28

Azure Functions的缩放文档对 Azure Functions如何决定何时添加更多应用程序实例的细节有所了解。

例如,我有一个由 Github webhook 触发的函数。10,000 人同时提交到 Github 存储库(没有合并冲突;)),Github 在很短的时间内调用了我的函数 10,000 次。

我可以期待会发生什么?具体来说,

  1. Azure Functions 会限制 webhook 调用吗?即,如果我的函数应用处于高负载状态,Azure Functions 会拒绝某些函数调用吗?
  2. Azure Functions 是否以某种方式对请求进行排队?如果是这样,在哪里/如何?
  3. 在这种情况下,Azure Functions 将创建多少个我的函数应用实例?每个请求一个(即 10,000 个),并且每个请求将并行运行?
  4. 如果我的应用程序功能被缩减到零个实例,因为它没有负载,我可以期望在第一个功能执行之前看到一些“预热时间”吗?大概多长时间?
4

2 回答 2

25
  1. Azure Functions 不会拒绝 webhook 调用,但在突然、极端负载的情况下,某些请求可能会超时。对于 web api,请在客户端上包含重试,作为最佳实践。
  2. 他们没有在任何持久的地方排队。它们由 IIS 管理(实现细节)。
  3. (实现细节)实例的数量并不是一个很难确定的事情。我们有一定的、未发布的保护措施,但我们的设计目的是扩大规模。您的请求将由多个实例处理。
  4. 是的。现在,它相当大(秒),但我们会努力改进它。对于性能敏感的情况,建议使用金丝雀或计时器触发器以使其保持清醒。

我来自 Azure Functions 团队。我标记为实现细节的东西不是承诺,并且可能会随着我们服务的发展而改变;只是尝试透明度。

于 2016-05-18T23:37:00.720 回答
6
  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**
于 2016-12-18T13:05:53.750 回答