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

Does azure functions share context between the running instances?

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

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

理想情况下,将事物设计为无状态的,并使用更适合稍后对任务进行排队的技术,例如 Azure 队列。

如果您必须保留某些状态,请将其放在更永久的地方,例如 %HOME% 目录或存储中。

视情况而定。

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

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

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