高影响力的Web层群集, 第二部分: 用JavaSpaces构建 - 编程入门网
入从 JSCart 应用程序传递过来的一个序列化对象的镜像(这是一个由应用程序维护的会话 镜像)。
这种设计对于通过主机/备用机配置使用容错功能的系统很有用。在这种配置下,一个主 服务器接收所有进入的请求,一个备用服务器只有在主服务器崩溃或者出现故障时才会启用 。图 3 展示了这种方案: 图 3. 容错配置 我们为什么使用事务? 因为通过 take 操作取得的所有项对于其他用户来说都不再可用,所以初看起来我们不需 要对更新时进行的 take 和 write 操作使用事务。不过,事务的主要目的并不是防止对项的 并发访问,而是防止当服务器在进行了 take 后但是在 write 之前崩溃使得会话消失。使用 事务保证超过事务租约到期后,会话项可以恢复到事务前的值。 因为它一般不处理任何收到的请求,所以图 3 中的备用服务器只在两种情况下访问共享 会话信息: 在启动时,以获得当时的会话状态 当主服务器崩溃时,以获得最新的会话状态 不过,在阶段 1 和阶段 2 之间,备用服务器不需要对共享内存进行任何读操作。相反, 它可能会在阶段 1 和阶段 2 之间保有过时的会话信息,因为在进入阶段 2 读取共享的内存 之前,它对于会话的改变是一无所知的。 这种松散耦合的配置对于支持容错的会话共享群集的实现是足够的了。实际上,每一个群 集应用程序都可能有自己独特的需求。上述解决方案虽然是有效的,但是可能不足以满足那 些需求。用 JavaSpaces 实现群集的解决方案使我们可以只用最少的设计和代码改变就可以 适应不同的设计需求。为了亲身体验这种灵活性,我们可以研究一下如何创建一个更紧密耦 合的解决方案,它除了容错外还支持负载平衡。 扩展为具有负载平衡的群集 为了充分利用现有的资源,一些群集的应用程序可能要求使用(前一方案中的)备用服务器 处理进入的请求。这种配置的主要好处是请求处理负荷分散到了群集中的几个服务器上(在有 多于一个备用服务器的情况时),因此应用程序可以扩展为接受更大的并发用户群(称为 外扩 )。这种配置一般称为 负载平衡群集配置。一些实现可能将收到的请求转发给负载最少的服 务器,而另一些实现可能使用循环请求分配方案。图 4 说明了这个概念: 图 4. 负载平衡群集 高影响力的Web层群集, 第二部分: 用JavaSpaces构建(5)时间:2011-04-16 IBM Sing Li在负载平衡的群集中容错是自动的。如果一个服务器不能工作,那么所有新进入的请求都 分配给剩下的服务器。 对于负载平衡的群集,我们不能使用第一个方案中使用的共享内存实现。这是因为松散耦 合的解决方案会使会话信息过时。 在这种方案中,我们不能假定主服务器是唯一修改特定共享会话的服务器。所有本地保持 的会话信息在任何时候都可能过时并且不同步。要解决这个问题,我们必须保证对共享会话 数据的读-修改-写操作是一个原子。 原子会话读-修改-写 为了保证群集中的所有服务器可以在任何时候处理会话的请求,我们必须对会话数据的维 护加以严格的限制。即服务器必须不能使用任何本地保存的共享会话镜像作为修改的源 -- 因为这个镜像可能是过时的并会破坏信息。相反,服务器必须在修改会话数据之前从共享内 存中读取它。 我们更新了第一篇文章中的 JavaGroups 购物车应用程序以使用 JavaSpaces 联网共享内 存(参阅 参考资料 中的下载地址)。这个应用程序展示了单个购物车应用程序会话的内部情 况。改变的代码局限在两个类中,如表 3 所示: 表 3. JSCart 应用程序中主要改变的两个类
|
||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |