我们有一个C#Azure功能应用程序(消费计划)可动态扩展,即根据负载添加新实例,现在我们有一个对象需要在此Azure功能的所有实例中使用,因为对象很复杂(有委托)我无法序列化以放置外部缓存,以便所有实例都可以从那里访问它,请建议处理这种情况的最佳方法。
答案 0 :(得分:2)
Azure函数实例在不同的服务器上运行,它们不共享相同的内存,因此没有远程调用(因此序列化)所有人都无法访问单个.NET对象。
答案 1 :(得分:1)
你的问题中存在一些根本矛盾的东西:你不能同时拥有一个可扩展到许多机器的功能; b)所有实例共享内存中对象,就好像它们在一台机器上运行一样。 它也是另一种方式:无服务器意味着如果没有人使用你的功能,所有基础设施都可以关闭(从而节省你的钱) - 但这隐含意味着你将失去你的内存状态并需要能够序列化它。
最小化共享状态,使其可序列化(有处理诸如委托[1]之类的东西的模式),并使用外部存储(Azure存储或像Redis这样的缓存)。
[1]对于代理人来说,一个技巧是维护委托句柄字典,然后序列化句柄。同样,对于多态,您可以序列化类型名称。