我正在开发一个基于 Azure Functions 的项目,并且我有一个带有缓冲区的静态帮助程序类(私有静态 ConcurrentDictionary),它包含一些要在执行结束时处理的项目列表,问题是否该缓冲区将被共享在多个运行实例之间?
问问题
937 次
2 回答
4
这取决于。
最常见的是,函数的多次执行将在同一个实例上运行。表示相同的 .NET 进程和应用程序域,因此它们将共享您的静态字典。
如果您的 Function App 在单个实例上处理的请求过多,则会创建第二个实例,并且不会与第一个实例共享任何内容。因此,在这种情况下,您将拥有 2 个(以及 3、4、N 个,如果需要)字典。
这些实例中的任何一个也可能随时消失,因此您无法在两次执行之间可靠地在字典中存储任何内容。您可以“尽最大努力”做到这一点,例如缓存数据。
于 2018-05-10T18:06:37.113 回答
1
Azure Functions 不一定在每次调用时都在同一台机器上运行,这意味着共享内存将是不稳定的,因为未来的调用可能会在全新的机器上发生。
理想情况下,将事物设计为无状态并使用更适合将任务排队以供以后使用的技术,例如 Azure 队列。
如果您必须保留某些状态,请将其放在更永久的位置,例如%HOME%
目录或存储中。
于 2018-05-10T12:43:16.247 回答