我们开发了一种服务器服务(用几句话)支持两个设备之间的通信。我们希望利用Azure Scale Set(多实例VM)提供的可伸缩性,但我们不确定如何在每个实例之间共享内存。
我们的服务基本上将临时数据存储在本地虚拟机中,这些数据被读取,修改并发送到连接到此服务器的设备。
如果这些数据本地存储在其中一个实例中,则其他实例无法访问且不具有相同的信息。这是对的吗?
如果其中一个设备开始向服务器发出一些请求,那么要处理请求的实例将不会始终相同,因此最后的数据会在实例之间传播。
所以问题可能是,如何在Azure实例之间共享内存?
由于
答案 0 :(得分:0)
您可以使用Service Fabric并利用 Reliable Collections 让您的州在所有实例中自动复制。
Microsoft.ServiceFabric.Data.Collections
命名空间中的类提供了一组开箱即用的集合,可自动使您的状态高度可用。开发人员只需要对Reliable Collection API进行编程,并让Reliable Collections管理复制和本地状态。Reliable Collections与其他高可用性技术(如Redis,Azure Table服务和Azure Queue服务)之间的主要区别在于,状态在本地保留在服务实例中,同时也具有高可用性。 强>
可靠集合可以被认为是
System.Collections
类的自然演变:一组新的集合,专为云和多计算机应用程序而设计,不会增加开发人员的复杂性。因此,Reliable Collections是:
- 已复制:复制状态更改以实现高可用性。
- 持久化:数据持久保存到磁盘以防止大规模中断(例如,数据中心停电)。
- 异步:API是异步的,以确保在发生IO时不会阻塞线程。
- Transactional:API利用事务的抽象,因此您可以轻松管理服务中的多个Reliable Collections。
答案 1 :(得分:0)
根据您要共享的数据类型和延迟的重要性,以及ServiceFabric(低延迟,但您需要重新构建/重新构建解决方案的位),您可以查看共享的背面端存储库 - Redis Cache非常适合作为分布式缓存; SQL Azure如果要使用关系数据库来存储数据;存储队列/ blob存储 - 或存储帐户中的文件存储(这允许您只从两个vm实例写入已装入的网络驱动器)。 DocumentDB是另一种选择,适用于存储JSON数据。