Azure functions 跨多个Azure函数实例共享对象

Azure functions 跨多个Azure函数实例共享对象,azure-functions,Azure Functions,我们有一个要求,即我们需要存储一个可以被函数的多个实例访问和使用的对象,请建议实现这一点的最佳方法。大多数情况下,您的所有函数执行都在同一进程中运行,因此您可以使用静态类成员在函数实例之间共享状态。然而,这并不可靠。进程可以随时停止,或者您的函数可以跨多个VM扩展到多个进程,这意味着某些函数将看到静态数据的一个副本,而其他函数则会看到不同的副本。出于这个原因,静态变量实际上只在作为尽力而为的瞬态缓存时才有用 如果要在函数实例之间可靠地共享对象,则需要将对象序列化到某些外部数据存储(如Redis)

我们有一个要求,即我们需要存储一个可以被函数的多个实例访问和使用的对象,请建议实现这一点的最佳方法。

大多数情况下,您的所有函数执行都在同一进程中运行,因此您可以使用静态类成员在函数实例之间共享状态。然而,这并不可靠。进程可以随时停止,或者您的函数可以跨多个VM扩展到多个进程,这意味着某些函数将看到静态数据的一个副本,而其他函数则会看到不同的副本。出于这个原因,静态变量实际上只在作为尽力而为的瞬态缓存时才有用


如果要在函数实例之间可靠地共享对象,则需要将对象序列化到某些外部数据存储(如Redis),或者将对象序列化到本地文件系统,它始终可用于函数的所有实例。

我一直在使用Azure函数,以通过调用保持静态数据。我认为,只要函数没有向外扩展,底层进程没有被azure基础设施处理,静态属性就会通过多次调用保持不变。尽管azure函数本质上是无状态的


因此,我有几个azure函数在静态并发字典中缓存数据,运行在不同的计时器上-5/10/20分钟,所有值都通过调用进行,除非您停止/重新启动该函数。缓存的有效期很长,例如,在您停止或重新部署功能之前的几天

请定义对象的含义。您是否需要对它进行并发和线程安全的访问,是否会有多个实例同时更新它,它是只读数据还是写/编辑数据,等等。如果您考虑创建一个大型无服务器应用程序,这是一个有趣的问题!有趣的方法!即使自动缩放添加了应用程序的新实例,文件系统是否始终对所有实例可用?是,所有实例共享相同的底层文件系统。是否有一个方法或事件可以在进程启动时挂接并使用它加载所需的数据。@akhil否。您需要在函数代码的开头编写一个线程安全检查,以查看数据是否已加载。