Как работают функции Azure?
масштабирующая документация для функций Azure немного освещает детали того, как Azure Functions решают, когда добавлять дополнительные экземпляры приложения.
Скажем, например, у меня есть функция, которая запускается веб-узлом Github. 10 000 человек одновременно берутся за репо Github (без конфликтов слияния;)), и Гитуб называет мою функцию 10 000 раз за очень короткий промежуток времени.
Что я могу ожидать? В частности,
- Функции Azure активируют вызовы webhook? то есть будут ли функции Azure отклонять некоторые вызовы функций, если приложение моей функции находится под большой нагрузкой?
- Функции Azure так или иначе очереди на запросы? Если да, то где/как?
- Сколько экземпляров моего функционального приложения будут создавать функции Azure в этом сценарии? Один для каждого запроса (т.е. 10000), и каждый из них будет работать параллельно?
- Если моя функция приложения была уменьшена до нулевых экземпляров, потому что на ней не было нагрузки, могу ли я ожидать некоторое "время разминки" до того, как будет выполнена первая функция? Примерно как долго?
Ответы
Ответ 1
- Функции Azure не будут отклонять вызов webhook, но в случае внезапной, экстремальной нагрузки некоторые запросы могут быть таймаутом. Для веб-apis, пожалуйста, включите повтор на клиенте в качестве наилучшей практики.
- Они не находятся в очереди в каком-либо постоянном месте. Они (подробности реализации) управляются IIS.
- (Детали реализации) Количество экземпляров не является сложной задачей. У нас есть определенные, неопубликованные меры защиты на месте, но мы рассчитаны на масштаб довольно далеко. Ваши запросы будут обрабатываться несколькими экземплярами.
- Да. Прямо сейчас, он довольно здоров (секунды), но мы будем работать над его улучшением. Для персидских чувствительных ситуаций рекомендуется использовать канарейку или таймер, чтобы он не просыпался.
Я из команды Azure Functions. То, что я обозначил как детали реализации, не promises и, скорее всего, также изменится по мере развития нашего сервиса; просто попытка прозрачности.
Ответ 2
- проверено сегодня. это заняло больше секунды: (
ACTUAL PERFORMANCE
--------------
ClientConnected: 13:58:41.589
ClientBeginRequest: 13:58:41.592
GotRequestHeaders: 13:58:41.592
ClientDoneRequest: 13:58:41.592
Determine Gateway: 0ms
DNS Lookup: 65ms
TCP/IP Connect: 40ms
HTTPS Handshake: 114ms
ServerConnected: 13:58:41.703
FiddlerBeginRequest: 13:58:41.816
ServerGotRequest: 13:58:41.817
ServerBeginResponse: 14:00:36.790
GotResponseHeaders: 14:00:36.790
ServerDoneResponse: 14:00:36.790
ClientBeginResponse: 14:00:36.790
ClientDoneResponse: 14:00:36.790
Overall Elapsed: **0:01:55.198**