Posted on 2005-12-21 22:58
非鱼 阅读(2814)
评论(5) 编辑 收藏 所属分类:
面向对象设计
术语
信息对象 - 表示会被持久化的实体对象,一般在信息视图中描述。下文也把信息对象简称为对象。这些对象本身不是分布式对象,但它们可能会被不同的节点访问。
节点 - 分布式系统中的组成部分。由应用服务器和数据库及其他服务端组件组成。
复制 - 指持久化的对象的复制,如数据库记录的复制。
背景
在MIS、ERP、CRM等分布式系统中,可能存在多个
节点,每个节点都有自己的应用服务器和数据库系统。这些节点产生的信息对象可能被本地节点或异地节点所访问;在整个分布式系统中,也存在一些全局的信息对象,它们被分布式系统中的所有节点访问。
需求问题
从用户的角度,他们不关心具体的实现,但他们会要求某些信息对象可以在每个分布式节点都能被访问到。从需求一开始被提出时,他们可能并没有意识到这一点。需求分析人员要在这里做更多的工作,避免遗漏:
- 信息对象是在哪些节点产生的?
- 这些信息对象会被其他节点使用吗?
- 网络状况如何?
- 这些信息对象会从一个节点复制到另一个节点吗?
- 这些对象会从一个节点迁移到另一个节点吗?
对象在本地节点产生,被异地节点访问
如果一个信息对象会被其他节点使用,一般来说是要持久化的,在持久化时,必须保存其节点信息。持久化的方式有两种:独立存放(放在单独的字段中)或者把节
点信息存放在对象的识别域(一般是主键)中。独立存放节点信息比较灵活;把节点信息存放在识别域中可以获得有限的位置透明特性,但带来节点信息和其他识别
信息的混杂,且不利于信息对象的迁移。另外,用户方面可能原本定义了对象识别方法,并且这个方法可能和我们即将采取的行动冲突。
当一个信息对象被其他节点使用时,一般存在两种方式:远程访问和本地副本。远程访问直接通过网络调用远程节点上的过程并返回其关心的信息对象。本地副本则
在本地保存其他节点的信息对象,在使用时直接在本地加载。远程访问适用于网络状况良好、需要事务控制的场合;本地副本一般在对信息实时性要求不高、或者网
络条件差,传输得不到保证的环境下。但在实际应用过程中,这两种方法经常联合使用。
远程访问的优点和缺点:
- 获得的信息是最新的、实时的。
- 方便事务控制。
- 实现简单,整洁。
- 可管理性、可维护性好。
- 依赖于网络状况。
- 可靠性和可用性不够好。
本地副本的优点和缺点:
- 高性能。
- 不受网络限制。
- 可靠性和可用性高。
- 不能实现全局事务。
- 一般需要额外的成本实现信息对象的复制。
- 在信息对象大量复制的情况下不易管理和维护。
结合上述两种方式,并权衡系统的非功能需求和质量要求,可以设计出适合不同应用的方案。
本地对象的迁移和委托
本地对象的迁移指在本地节点产生的信息对象,因为某种原因需要迁移到另外一个节点。本地对象的委托指本地节点产生的信息对象委托另外的节点来管理,即主要
的操作在异地节点完成,本地只有少量操作甚至没有任何操作。这是两个相反的情况。
一般情况下,我们通过建立信息对象的引用来处理这两种情况。在对象迁移时,我们把信息对象存储到新的节点上,并在原节点建立到新节点该对象的引用。在委托
时,正好相反,我们在新的节点建立对原对象的引用。同时,系统也应该建立处理信息对象引用的机制。
值得注意的是,对象的迁移和委托可能会和异地节点访问信息对象的设计相冲突,这主要是指上文提到的本地副本的使用。可以考虑不使用本地副本机制或迁移、委托对象特别处理的方式解决这个问题。
全局对象
除了本地信息对象之外,分布式系统中往往也存在一些全局信息对象。这些全局信息对象在整个系统中的所有节点使用。
部分全局信息对象在系统安装、初始化时刻就产生了;部分全局对象是在系统运行过程中产生的。保证全局信息对象的一致性,是设计过程中需要特别注意的。比如,应该极力避免全局信息对象的复杂存储设计。
一般来说,可以考虑对全局信息对象进行集中存储和分布存储加集中/分布复制两种方案。这两种方案的优缺点和我们上文讲到的本地对象异地访问类似。但由于全局对象的往往访问频繁,一般采用第二种方式实现。
数据中心
对于一个一般性的全局查询,不可能通过遍历分布式系统中的所有节点来完成。所以,在分布式系统中建立一个全局集中的数据中心是必要的。数据中心可以满足大部分查询需求,并可以在其基础上建立高级应用,如数据分析、决策支持等等。
在数据中心的问题上,应该尽量避免分布式系统本身对数据中心的依赖。数据中心是对分布式系统的有益补充,但它的主要目的并不是分布式系统本身。所以我们应该利用但尽可能不依赖它。
工具
一般信息对象的复制可以使用现成的产品,如Sybase Replication Server。当然对于一些特殊要求,可能需要自己实现。这不是做广告,算是对本文的一个补充吧。
总结
在大型分布式系统中,上述问题是基本的也是简单的。但这样说的前提是你考虑到了这个问题。如果你正在进行类似的工作,希望本文能够对你有所启发。