1

AppFabric 1.1 客户端文档讨论了将 DataCachServer 终结点列表分配给 DataCacheFactoryConfiguration。大多数示例显示了由一个或两个不同的缓存服务器组成的列表。如果集群由n 个服务器组成,客户端应该注册每个服务器吗?服务器注册的顺序是否重要?例如,如果我的 Web 层中有 50 台服务器,缓存层中有 5 台服务器,那么 50 台 Web 服务器是否都注册了所有 5 台缓存服务器?这是示例代码:

// Declare array for cache host(s).
DataCacheServerEndpoint[] servers = new DataCacheServerEndpoint[5];
servers[0] = new DataCacheServerEndpoint("Cache01", 22233);
servers[1] = new DataCacheServerEndpoint("Cache02", 22233);
servers[2] = new DataCacheServerEndpoint("Cache03", 22233);
servers[3] = new DataCacheServerEndpoint("Cache04", 22233);
servers[4] = new DataCacheServerEndpoint("Cache05", 22233);

// Setup the DataCacheFactory configuration.
DataCacheFactoryConfiguration factoryConfig = new DataCacheFactoryConfiguration();
factoryConfig.Servers = servers;

// Create a configured DataCacheFactory object.
DataCacheFactory mycacheFactory = new DataCacheFactory(factoryConfig);

// Get a cache client for the cache named "default".
DataCache myDefaultCache = mycacheFactory.GetCache("default");

每个 Web 服务器是否可以相同地注册,并且是否会在缓存层之间平衡负载?如果已注册的服务器不可用,是按顺序尝试下一个服务器,还是随机尝试?支持文档的链接会有所帮助。

与负载平衡相关,Jason Roth写了以下 [还有其他可用的文档]?

App Fabric 客户端是智能客户端,它可以直接联系拥有您数据的服务器。应用程序不必担心负载平衡。这是使用路由客户端完成的。

4

1 回答 1

1

基于一些测试,并让 Jason Roth 的评论深入人心,我认为DataCacheServerEndPoint 被“智能客户端”用于在 DataCacheFactory 上调用 GetCache 方法时检索缓存集群成员列表。DataCache 对象是智能的——如果在 DataCacheServerEndpoint 实例化中使用的服务器脱机或不可用,智能客户端仍然可以访问其他集群成员。因此,列出多个 DataCacheServerEndpoint 的目的是在调用 GetCache 方法时提供冗余。

建议是 DataCache 对象应该遵循单例模式,而不是在每次请求缓存数据时实例化。这就是为什么不需要为各个 DataCacheServerEndpoints 进行负载平衡或提供 VIP 的原因。

根据需要实例化尽可能多的 DataCacheServerEndPoint,以确保至少有一个始终处于运行状态——无需添加缓存集群的每个成员,除非这是确保至少一个处于运行状态的唯一方法。

当涉及到管理缓存集群中的盒子时(例如,应用每月补丁),考虑通过一次管理一个盒子来最小化缓存抖动和重新平衡,而不是尝试以“波”的形式管理一组盒子。

于 2013-04-10T18:55:06.533 回答