Как работают функции 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

  1. проверено сегодня. это заняло больше секунды: (
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**