asp.net mvc和cloud:全局数据结构是如何分布的

ren*_*ren 2 c# cloud asp.net-mvc

class A
{
    public static ConcurrentDictionary<string, MyClass> GlobalData
    {
        get;
        private set;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

假设GlobalData用于保留一些全局数据,假设整个应用程序中只有一个副本.在云环境中部署时,这种假设是否安全,其中应用程序分布在少数"实例"上?如果是这样,那怎么办?我猜这同样适用于Session变量.

Roy*_*tus 7

这是本地存储; 所以如果你有n个服务器,你将至少有n个实例.ConcurrentDictionary并不意味着它是单身,顺便说一句,它只是意味着它是线程安全的版本Dictionary.

如果您想拥有一个真正的全局实例,那么实现它的一种方法是创建一个管理对此全局数据的访问的Web服务.该服务将所有这些数据存储在内存中(然后只有一个服务实例)或单个数据库中.对其写入方法的访问将被序列化,以便只有一方可以在任何时间写入数据.

该服务的所有消费者都将访问相同的数据,因此数据实际上是全局的.