Azure Functions 如何横向扩展?
How do Azure Functions scale out?
scaling documentation for Azure Functions 略微阐述了 Azure Functions 如何决定何时添加更多应用程序实例的详细信息。
例如,我有一个由 Github webhook 触发的函数。 10,000 人同时提交到 Github 存储库(没有合并冲突 ;)),并且 Github 在很短的时间内调用了我的函数 10,000 次。
我会发生什么?具体来说,
- Azure Functions 会限制 webhook 调用吗?即,如果我的函数应用程序处于高负载状态,Azure Functions 是否会拒绝某些函数调用?
- Azure Functions 是否以某种方式对请求进行排队?如果是,where/how?
- 在此场景中,Azure Functions 将创建我的函数应用程序的多少个实例?每个请求一个(即 10,000 个),每个请求将 运行 并行?
- 如果我的应用函数因为没有负载而缩减为零个实例,我是否可以期望在执行第一个函数之前看到一些 "warm-up time"?大概多长时间?
- Azure Functions 不会拒绝 webhook 调用,但在突然出现极端负载的情况下,某些请求可能会超时。对于网络 api,请在客户端包括重试,作为最佳实践。
- 他们没有在任何持久的地方排队。它们由 IIS 管理(实现细节)。
- (实施细节)实例数量不是硬性设定的。我们有特定的、未发布的保护措施,但我们的设计目的是扩大规模。您的请求将由多个实例处理。
- 是的。现在,它相当长(秒),但我们会努力改进它。对于性能敏感的情况,建议使用金丝雀或定时器触发器来保持唤醒。
我来自 Azure Functions 团队。我标记为实现细节的东西不是承诺,并且可能会随着我们服务的发展而改变;只是一种透明度的尝试。
- 今天测试。花了超过几秒钟:(
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**
scaling documentation for Azure Functions 略微阐述了 Azure Functions 如何决定何时添加更多应用程序实例的详细信息。
例如,我有一个由 Github webhook 触发的函数。 10,000 人同时提交到 Github 存储库(没有合并冲突 ;)),并且 Github 在很短的时间内调用了我的函数 10,000 次。
我会发生什么?具体来说,
- Azure Functions 会限制 webhook 调用吗?即,如果我的函数应用程序处于高负载状态,Azure Functions 是否会拒绝某些函数调用?
- Azure Functions 是否以某种方式对请求进行排队?如果是,where/how?
- 在此场景中,Azure Functions 将创建我的函数应用程序的多少个实例?每个请求一个(即 10,000 个),每个请求将 运行 并行?
- 如果我的应用函数因为没有负载而缩减为零个实例,我是否可以期望在执行第一个函数之前看到一些 "warm-up time"?大概多长时间?
- Azure Functions 不会拒绝 webhook 调用,但在突然出现极端负载的情况下,某些请求可能会超时。对于网络 api,请在客户端包括重试,作为最佳实践。
- 他们没有在任何持久的地方排队。它们由 IIS 管理(实现细节)。
- (实施细节)实例数量不是硬性设定的。我们有特定的、未发布的保护措施,但我们的设计目的是扩大规模。您的请求将由多个实例处理。
- 是的。现在,它相当长(秒),但我们会努力改进它。对于性能敏感的情况,建议使用金丝雀或定时器触发器来保持唤醒。
我来自 Azure Functions 团队。我标记为实现细节的东西不是承诺,并且可能会随着我们服务的发展而改变;只是一种透明度的尝试。
- 今天测试。花了超过几秒钟:(
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**