azure函数是否在正在运行的实例之间共享上下文?

时间:2018-05-10 12:25:47

标签: c# azure-functions azure-functions-runtime

我正在开发一个基于Azure Functions的项目,我有一个带缓冲区的静态助手类(私有静态ConcurrentDictionary),它保存了一些在执行结束时要处理的项目列表,问题是这个缓冲区将在多个正在运行的实例之间共享?

2 个答案:

答案 0 :(得分:3)

取决于。

最常见的是,多个函数执行将在同一个实例上运行。意思是相同的.NET进程和应用程序域,因此它们将共享您的静态字典。

如果您的Function App在单个实例上处理的请求太多,则会创建第二个实例,并且它不会与第一个实例共享任何内容。因此,在这种情况下,您将拥有2个(以及3个,4个N,如果需要)字典。

任何这些实例也可能随时消失,因此您无法在执行之间可靠地存储字典中的任何内容。你可以用最好的努力"来做到这一点,例如缓存数据。

答案 1 :(得分:0)

每次调用Azure函数时,它们不一定在同一台机器上运行,这意味着共享内存将是易失性的,因为未来的调用可能会在全新的机器上发生。

理想情况下,设计无状态的东西并使用更适合稍后排队任务的技术,例如Azure队列。

如果你必须保留一些状态,请把它放在更永久的位置,例如%HOME%目录或存储。