Azure函数如何进行横向扩展?

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. 如果我的应用程序函数因没有负载而缩减到零个实例,那么在执行第一个函数之前,我是否可以期望看到一些“预热时间”?大约需要多长时间?
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
25
  1. Azure Functions不会拒绝Webhook调用,但在突然的极端负载情况下,一些请求可能会超时。对于Web API,请作为最佳实践在客户端加入重试。
  2. 它们不会排队在任何持久位置。它们(实现细节)由IIS管理。
  3. (实现细节)实例数并非是固定的。我们有某些未发布的保护措施,但我们的设计可以扩展很远。您的请求将由多个实例处理。
  4. 是的。目前它相当沉重(秒级),但我们将努力改进它。对于性能敏感的情况,建议使用金丝雀测试或计时器触发器来使其保持唤醒状态。

我来自Azure Functions团队。 我标记为实现细节的内容并不能保证不变,随着服务的演进,它们可能也会发生变化;这只是我们透明度的一种尝试。


你能详细说明一下定时器触发器解决方案吗?我可以在函数应用程序上拥有另一个定时器触发的函数,并依赖它来保持HTTP触发的函数“热”吗? - Shrulik
1
如果您在同一个Function App上有另一个类似于定时器触发器的函数,它将保留一个暖实例以供另一次执行。 - Chris Anderson
谢谢。"今天"有点令人担忧,但我很欣赏你的诚实。 - Shrulik
那不应该是这种情况。我会创建一个具有示例时间段的新问题,然后您可以给我们提供调用ID +区域,我们可以调查睡眠活动。 - Chris Anderson
@ChrisAnderson-MSFT:我能否使用Azure Functions从给定的(活动的)容器中读取所有Blob(例如包含Azure Webapp日志的容器),并将其发送到另一个地方?由于Blob可以多次追加,因此通过Blob触发器传递给函数的数据实际上会重叠。理论上,我可以在单独的地方(如表存储)上对每个Blob的读取字节数进行簿记,但是同步是一个大问题,因为同一Blob上的不同触发器将由不同的函数处理。 - David Ha
显示剩余2条评论

6
今天进行了测试,但是耗时超过了几秒钟 :(
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**

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,