高影响力的Web层群集,第一部分: 利用JavaGroups扩展 - 编程入门网
// set our local state
cstate = (CartState) state;
}
orderModel.changeData(cstate);
}
4. 在接收到 GET_STATE 请求之后――一般是从加入群集的新成员处接收到――我们需要 返回当前状态。PullPushAdapter 类将回调 MessageListener 接口的 getState() 方法。清 单 5 显示我们对了这一方法的实现。我们只是复制了一份状态,然后将它作为对象返回。 清单 5. 处理 GET_STATE 请求 值得注意的是,必须对状态做一份 深拷贝(每个引用对象的逐个成员的拷贝),因为状态 在线路上传输之前, STATE_TRANSFER 协议有可能保留一会状态。如果状态引用的任何对象 在这时被修改了,传输的状态就会变得不一致。实际上,因为深拷贝操作本身要花一定的时 间,所以在复制期间要防止对状态的并发访问,以确保状态操作的同步。 高影响力的Web层群集,第一部分: 利用JavaGroups扩展(12)时间:2011-04-16 IBM Sing Li5. 最后,我们需要在 JGCart 启动期间调用 getState()。清单 3 中以绿色高亮显示的 一行负责这一动作,并且是 PrepareChannel() 方法的一部分。注意 getState() 调用是异 步的。它只是启动 STATE_TRANSFER 协议以从群集获得状态,但是它立即返回。 PullPushAdapter 类对 MessageListener 接口的 setState() 的回调将在以后某一时间发生 。 清单 3 到 5 中的代码都在源代码中 (参见 参考资料),但是都被注释掉了。要获得状态 传输支持功能,请删除注释并重新编译。 有了 STATE_TRANSFER 支持之后,我们就作好了再次尝试 JGCart 群集模拟的准备。首先 ,启动一个 JGCart 实例,然后添加几件商品到购物车。现在通过启动另一个 JGCart 实例 来模拟添加新机器到群集。该实例现在启动了,就像第一个实例一样,所有的商品都在购物 车中。在它启动之后,我们可以使用任何一个 JGCart 来继续购物。JavaGroups 的状态传输 协议允许我们在任何时候添加新机器到群集中。 当然,如果需要传输的状态非常大,那么将它通过线路发送给每台加入群集的新机器是不 切实际的,甚至是不可能的。当机器经常性地加入和离开群集时尤其如此。幸运的是,J2EE Servlet/JSP 容器级别的实现通常涉及到较低的成员关系计数,并且成员关系很少改变 (例 如,机器崩溃或者拿到群集外面去维护)。 廉价机器群集可以为部署 Web 应用和 Web 服务提供一个可伸缩的、高度可用的平台。然 而,这种群集所需的网络软件通常是针对于某一特定应用的,并且是难以编写和测试的。 JavaGroups 是一个开放源代码的分布式系统工具,通过提供以下马上可以部署的、高级别的 特性,对于这一难题可以有所帮助: 组成员关系管理。 基于多播和单播消息的组通信。 状态传输协议。 功能分布式数据结构。 一些可重用的、经常使用的通信编码模式组成的库。 利用 JavaGroups 的特性,我们创建了群集购物车 Web 应用(JGCart)的会话复制机制 的一个可视化演示。通过对 JGCart 进行实验,我们看到了会话复制如何才能改善 Web 层应 用的可用性和可伸缩性。 通过使用 JavaGroups 来处理群集解决方案的组通信、状态传输和数据复制等方面,设计 者可以将精力集中于其他特定于应用的需求。 本文配套源码 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |