面向对象的分布式开发系统 (三)

类别:Java 点击:0 评论:0 推荐:

返回首篇

前文:面向对象的分布式开发系统 (二)

3.3     分布式对象Distributed Object

在上文提到,SoftEngine 由不同种类的对象构造,在发布实施角度上看,可分为三种: 本地(Local)对象,远地(Remote) 对象,虚拟(Virtual) 对象 。

图表 6 Local, Remote and Virtual Object

在上图中:

本地对象Local Object : 指分布在同一个SoftEngine 独体系统中的对象,互称为本地对象。如:在系统I 中的对象A 和B 互为本地对象 。 远地对象Remote Object : 指分布在不同SoftEngine 系统中的对象(同一个群体系统)。 如: 对象A 和C ,以及B 和C 互为远地对象。对于系统II 中的C ,系统I 中的A 和B 属于远地对象的 。 虚拟对象Virtual Object : 不同于本地和远地对象,虚拟对象不属于真实的对象,而是一个虚设的类型。真正的操作不在虚拟对象本身,只是远地对象在本地的映射。如:虚拟对象A,是A 在系统II 中的映射。对象C 向A发送的任务,会转送到远地对象A ,而C 不知道,也没有必要知道。同理,如果对象B 需要发送任务到C ,在系统I 中可定义C 的虚拟对象 。

本地和远地对象是相互的关系。而虚拟对象只是一种映射,用于关联本地和远地对象,起到分布和负载均衡的作用。三者之间的关系在开发中无须关心,只有在系统部署中,通过配置发布环境来确定或改变。以下图为例,介绍负载均衡:

图表 7 A load balance system

在一个分布的系统中,有两个独立的运行系 统 I 和II 。其中有相同的对象A1, A2, A3, A4 被分别发布,他们所被加载的类是相同的,只是被定义的发布名称不同。如果再定义一个虚拟对象A 同时映射到A1 – A4 ,同时配置不同的策略,如负载均衡的循环法(Round-Robin) ,或冗余法(Hi-Available)。发送到A 的任务,会按照不同的策略分发到A1-A4 上。

在应用对象开发测试完成后,部署的策略,包括:系统配置、对象配置、对象发布等信息,被定义在每个独体系统的配置文件中。通过这些配置文件,将会动态地构建出一个分布的网状系统,可以完成特定的应用功能。所以如此构成的分布式系统具备以下的体点:

整个分布式系统由各种对象,以动态组件的方式构造。 对象可以存在于任何网络(LAN/WAN) ,任何主机。 通过配置,对象可以动态地加载/ 卸载。整个分布系统,始终处于动态调整状态。 虚拟对象让本地对象忽视真实的远地对象的物理位置。 开发与分布过程完全分离。在对象开发过程中,无需过多的考虑系统级的问题。

图表 8 A distributed system

3.4     数据安全Data-Safety

应用系统所需的数据信息,在以任务的方式送入SoftEngine 系统内部后,任务将会被高效地传输在每个独体系统内部,或群体系统的网络中。因此,如何保证任务的安全到达,是一个关键的问题。在SoftEngine 里,解决这个问题的技术称为:数据安全。其中包括四个部分 :

安全的任务池Safety Task Pool 任务悬挂Pending 降速传递Slowdown 流量控制Flow control

以下图为例描述:

图表 9 Data-Safety

Forward Task: 发送任务

Backward Task: 回送任务

Undeliverable Task: 无法发送任务

Panding Task:悬挂任务

Task Channel:任务通道

Pending Pool: 悬挂缓冲池

 

l         安全的任务池Safety Task Pool

在SoftEngine 的内核,大部份对象都有自己的任务池与任务通道连接。类似于文件系统的内存缓冲,任务池对于提高系统性能有非常重要的作用。同时为了保证数据的安全不丢失,任务池需要良好的设计,包括: 过载保护(overload protection) ,硬盘缓冲等安全机制,确保无论对象运行状态如何,任务都不会丢失。也就是说,当一个任务被成功地送入目的对象的任务池,这意味着:任务是安全的。所以任务池保证了静态任务的安全性。

l         任务悬挂Pending

在一些特殊情况下,任务无法立即发送到目的对象(如上图对象A 发送任务到对象C )。无法发送的任务将会被悬挂在一个特殊的任务池中 – 悬挂缓冲池。通过悬挂缓冲池,SoftEngine 系统会记住有那些任务因为那些目的对象而被悬挂,等待目的对象恢复后重发,或则任务超过了规定的生存周期,被丢弃。

l         降速传递Slowdown

在常规状态下,对象A 会以最快的速度向对象B 发送任务。但如果此时,对象B 处于无效状态,或任务量过载,那么第一个无法发送的任务将会被悬挂,同时发送源对象的发送速度也会被系统自动控制,减缓发送的频率。称之为: 降速传递。

降速传递机制可以在巨大的任务流中,有效地保护系统失去控制,尤其当某个任务流中的对象发生了意外。举个例子:

 

对象A,B,C 合作完成一项任务,对象A 会产生大量的任务,经过对象B ,发送到C 。如下图:

图表 10 One Sample

假设,对象C 由于某种原因停止了工作,在没有降速传递机制的情况下:对象B 也会由于大量的任务没有发送,而很快“爆掉”。对象A 也会跟着失控。此时堆积在A,B,C 中间的任务将无法处理。另外,系统的CPU 、Memory 开销可以会受到影响。采用了降速传递机制,对象B 的处理和发送任务的工作在一定程度上得到控制,对象A 也是如此。整个工作流的处理速度会自动减慢。直至对象C 恢复正常的工作状态。

所以当系统发生无法估计的问题时,降速传递可以有效地起到稳定系统的作用,避免大量数据因事故而丢失。

l         流量控制Flow Control

在分布式系统中,任务将会通过任务通道、通讯通道在内存、网络上传输。保证传输线路上的数据安全也是非常重要了。流量控制机制是一个常见的技术用于解决传输双方的稳定及数据的安全问题。这里不做过多的介绍。

 后续:面向对象的分布式开发系统 (四)

本文地址:http://com.8s8s.com/it/it17213.htm