上一篇:对项目开发中几种测试类型的理解和实操 >>
JGroups ARM(一)
根据Hein Meling和Alberto Montresor的ppt编写
前言
进入了分布式的时代,我们通常将1)可靠的高可用性2)容错 3)负载均衡定义为分布式系统满足的三个基本条件。分布式系统并不是指操作系统,它扮演一种中间件的角色,在各种操作系统和应用之间构架起一套桥梁,它能够做到 i)不依赖于特定的硬件,软件及操作系统,不受限于系统架构和软件体系 ii) 在充分利用便宜的硬件和软件的基础上,实现最大的性价比。
进一步讨论分布式系统的时候,让我们了解一下我们传统的集中式系统面对的挑战:
1, 服务器硬件故障(硬盘损坏)
2, 网络故障(交换机,路由器崩溃)
3, 操作系统故障(Windows死机)
4, 软件故障(内存泄露)
分布式系统需要解决集中式系统所带来的问题,需要从以下两个方面着手
1) 提供一套系统框架,该框架实现了服务器之间的多路数据复制且在出现故障的时候,不需要管理员的干预便能自动恢复。
2) 提供一套接口,让用户能够在此基础上开发可靠的,高可用性的分布式应用。
让我看看过去的分布式系统框架把
l Corba
l DCOM/.Net
l Java RMI/Jini/EJB
这三种系统框架都具有以下的特性
1, 面向对象
2, 基于Client/Server远程方法调用的思想
3, 模块化
4, 高度重用性
5, 互操作性
6, 可移植性(DCOM限于Windows平台上)
下面,以Java RMI 远程方法调用为例,描述一下传统的分布式框架存在的问题。
Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1以后的版本实现的,它大大增强了Java开发分布式应用的能力。RMI是在一种百分之百纯Java的网络分布式应用系统的核心解决方案之一,其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。JRMP是专为Java的远程对象制定的协议。用Java RMI开发的应用系统可以部署在任何支持JRE(Java Run Environment Java,运行环境)的平台上。但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信。
RMI让JVM1与JVM2互相调用的时候,很好屏蔽了底层操作系统的细节,但是,如果将上面的架构改成一对多模式(一个客户端对多个服务器),Client仍然避免不了需要知道系统各个服务器的网络细节(即客户端对服务器的调用并不是透明的),而且,服务器之间还存在一个如何维持调用一致性的问题。
总之,RMI和DCOM等分布式框架都没有很好的地考虑可靠性和高可用性的需求。于是,一个新的概念从这里提出了——组件群(Object Group)。
组件群可以这样理解:它是一个基于服务器对象和组件的动态集合,集合中的所有组件对象互相协作和维持各个组件一致性,他们为客户端外提供一致、可靠和高可用性服务。
?SHAPE?\* MERGEFORMAT
Client
Server
Server
Server
Server
?SHAPE?\* MERGEFORMAT
Client
Server
Server
Server
Server
组件群依赖于三种服务来构架起分布式体系框架,在描述这套框架之前,先约定,群组(Group)是一个组件的组合,组件可抽象为组员,群组发生的事件通常有:
a) Join
b) Leave
c) Merge
d) Partition
e) Crash
1, 群组管理服务(Group Membership Service)
因为群组是动态的,有些组员会加入(join)到群,有些组员会脱离(leave),有些组员会因为故障而偶然脱离(crash),有时候还存在2个群之间的合并(merge)、分离(Partition)等事件,因此,群必须具有处理这些事件的能力。
2, 可靠多播服务(Reliable Multicast Service)
在分布式群组环境下,我们通过一对多的方式来实现高可用性(跟HA其实同一个概念),现在的关键是,我们的群如何进行可靠的通讯。
答案很简单——多播。关于群组多播的概念可参考:
http://blog.csdn.net/huangzhq/archive/2005/02/18/291761.aspx
3, 状态传输服务(State Transfer Service)
状态传输的目的就在于群组组员的信息同步,也就是,组员A跟组员B所看到的群的结构是一致的。也就是,群组成员是通过此服务来维持该群的一个统一的视图(View)。
下一篇:Nice用户手册(四) >>
相关文章:
- · A problem when connect MSSQL with transaction.
- · Struts中的Action类的工作机制
- · Eclipse手记(小弟发现最实用的资料之一)
- · 如何提高自己的编程水平
- · Sun 总裁专稿:信息技术将步电力业后尘
- · Portal开源实现-Liferay的Portlet Session处理(2)
- · Portal开源实现-Liferay的Portlet Session处理(1)
- · 涂鸦软件游戏开发者采访实录
- · 腾迅游戏开发人员采访实录
- · 对于不同级别classloader define的类的问题处理
- · 扬扬的J2EE学习笔记(一)概述
- · 学习JFreeChart(一)
- · MIDP1.0中实现三角形的填充
- · [Eclipse笔记]Eclipse真的是商用IDE的杀手吗?
- · 的确不错的iBATIS SQL Maps
- · struts超简单入门(三)
- · struts超简单入门(二)
- · JBuilder2005+JBoss-4.0.2RC1+J2SDK1.5+Log4j 开发Session Bean例解(4)
- · JBuilder2005+JBoss-4.0.2RC1+J2SDK1.5+Log4j 开发Session Bean例解(3)
- · JBuilder2005+JBoss-4.0.2RC1+J2SDK1.5+Log4j 开发Session Bean例解(2)
- · Spring Framework 1.2 RC1 发布
- · JBuilder2005+JBoss-4.0.2RC1+J2SDK1.5+Log4j 开发Session Bean例解(1)
- · 最终还是手工输出XML对象可靠
- · 选择jsp而不是servlet作为BS前台主流方案是JAVA的战略性方向错误
- · java开源项目研究 1. 引子
- · Tomcat集群的三种负载均衡方式优缺点对照。
- · 初探Eclipse结合Lomboz开发EJB-Eclipse环境搭建
- · TIJ阅读笔记(第十一章)
- · 关于Java的一些 工具,类库,框架......
- · 今天总算看完了log4j,心情不错!把自己的学习笔记拿出来给大家共享一把
- · Annotations中文翻译
- · 使用dao.Processor管理数据持久化对象
- · 在Unix/Linux上令(java)JVM支持中文输出
- · 简单的Oracle存储过程的创建方法(菜鸟级)
- · 利用游标返回结果集的的例子(Oracle 存储过程)
- · 《Java极限编程》(Java Tool for Extreme Programming)读书笔记 (4)
- · linux环境下Apache+Resin的配置
- · 实战 Eclipse ,Jigloo, PostgreSQL,JDBC 开发数据库查询应用系统起步
