我想知道Azure Function中的并行原理。如果我的batchSize是32,阈值是16。如果队列变大,则Scale控制器会旋转一个新函数来承受压力。我了解这一点。我不明白的是:单个实例是否可以批量处理?也就是说,我只有一个函数运行pr batch,还是运行时扩展并使用该函数运行多个线程?
我是否可以冒险运行两个实例,每个实例带有32条消息,并同时运行32个线程,一次运行32个函数?
想象我有一个调用webapi的函数。这意味着该api将一次获得我不希望的64次调用。
我想要的是2个函数处理32条消息,每条函数调用1条pr消息pr函数。
我希望你们能理解。
答案 0 :(得分:0)
是的。实际上,缩放就是这样工作的。 docs中也详细解释了这一点。
因此,您的函数(一个实例)一次最多可以运行48条消息(新批次中的32条消息,现有批次中的16条消息),并可能根据队列长度扩展到多个实例。
要实现您提到的方案,您必须
batchSize
设置为1
,以避免每个实例并行处理WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
应用设置设为2
,以将横向扩展限制为最多2个实例请注意,所有32条消息都不会由任何一个实例加载,但仍将在队列中工作。