关于系统集成的设计方案( 二 )

    (注:本文续上一篇 关于系统集成的设计方案(一))

    经过上面的论述,我们决定采用系统集成的方式来满足用户的需求。那么新的问题又有了,我们有集中集成方案可以选择呢?哪种方案更能满足我们的需求而且更容易扩展而且还不会增加系统不必要的复杂性呢?

    经过分析我觉得系统集成可以从数据共享和服务共享两方面来考虑。为什么这么说呢?首先我们来分析,当我们在做系统集成的时候需要面对的问题,有哪些。当我 们在做系统集成的时候我们首先需要做的是在将要被集成的子系统内寻找共同点,因为两个系统具有共同点的地方可能涉及到数据共享和功能共享的问题,也就是说 具有共同点的功能将来在整合后进会在一个子系统内对共享的数据进行维护,一般来讲共同的功能会被安排在主集成子系统内。还有一点值得注意,就是在系统集成 后我们达到的目的是两个系统间可以共享数据,也就是说一个系统维护的数据可以被另一个子系统访问到,或者说有一部分数据会被另一个或多个子系统访问到。基 于以上信息我提出通过数据共享的方式进行系统集成。那么基于服务的系统集成又是怎样的呢?首先我们回忆前面提到的两个系统,他们都是采用的C/S架构实现的系统,而且都是通过各自的业务服务器来处理各自的业务,基于此我们可以考虑,倘若我们能够让系统B的服务器为系统A服务或者让A的服务器为系统B服务器以提供各自所需要的共享的数据不也是实现系统集成的一种思路吗?因此,我提出基于服务器的系统集成,此方法的核心就是把一个系统看作另一个服务器的客户端,并且能让此服务器为其提供服务。

    下面我门将依次讨论数据共享和基于服务的两种系统集成的思路。我们先来考虑数据共享的系统集成,数据共享无非是数据库层面的数据共享,我们考虑两种方式,我们依旧以系统A 和系统B为例论述。数据共享最简单的方式是让一个系统去访问另一个系统的数据库以获取自己所需要的数据,其原理如 3所示。

                         图 3 数据共享系统集成原理

     还有一种方式我们可以利用数据库的发布和订阅功能(SqlServer 数据可以配置发布和订阅,其余数据库不清楚是否由此功能),也就是说我们可以将一个子系统的数据库配置为发布数据库,待有数据变更的时候会主动通知所有订阅数据库以更新订阅服务器的数据,其原理如 4所示。

 

      图4 数据订阅系统集成

    当我们采用图4所示的方式共享数据的时候我们不得不面对一个 子系统可能会访问多个子系统数据库的情况,而且可能出现多个子系统将交访问的问题,这个造成的直接问题就是系统结构混乱子系统将耦合读过高,最终造成的的 后果是系统集成成本加大,但是我们也不可以否认这种方法的简单,因此我们可以考虑在时间紧迫而且集成度要求不高的情况下采用。

    再谈后一种通过数据订阅的方式实现系统集成的方式,这种方式的优点是简单方便,只要我们拥有一个高水平的DBA并且对系统做简单的修改或者不做修改我们就可以达到系统集成的要求,但是这种问题造成的问题是,当要集成的子系统很高而且数据访问关系复杂的时候对于DBA的压力还是很大的,因为他要保证每个系统的数 据都是正确的而且能即时的到更新,差点忘了数据库间的数据订阅是存在延时的也就是说数据更新是异步的。不仅如此,通过此方法实现集成,其后期维护的成本是 非常昂贵的,我本人不建议采用,但是如果相对程序做双主机备份倒是可以考虑采用数据订阅的方式。   

    下面我们来介绍下基于服务共享的系统集成。服务我们可以采用Web服务也可以采用代理服务器的形式。我们这里只介绍代理服务器的解决方案,对于Web服务的方式不做介绍,因为Web服务的方式比较简单很容易理解,而且他对于Web系统的集成比较适合对于C/S架构的系统来说不太适合。

图5 代理服务器系统集成原理 

    基于代理服务器的系统集成方案原理如5所示。此方案的核心思想是对已有的每个子系统在保持原有的功能和系统完整性不便的情况下增加使用代理服务器的功能,每个子系统的客户端通过代理服务器与具体的业务服务器通信,而具体到每个客户端会与哪个业务服务器通信客户端可以不必理会他只需要知道有个代理服务器可以为他服务就可以了,此中方式有点类似于设计 模式中的代理模式。客户端与代理服务器之间的通信是通过代理服务器定义的一套代理通信协议实现的(此协议可以根据不同的集成环境自行定义),他们之间的行 为是通过预定义的协议来约束的,而每个子系统内客户端与服务器通信的协议数据会被代理协议所封装,当子系统的客户端与服务器通信的时候代理服务器会根据代 理协议的约定将数据数据转发给真正的业务服务器执行。通过这种方式的封装客户端可以实现和多种业务服务器的通信,只要他们按照既定义的公共协议执行即可满 足各种复杂业务的集成。

    通过代理服务器进行系统集成有以下几个优点。

    首 先,整个集成系统内的数据通信是通过代理服务器通信的,所有业务数据都是通过代理协议封装的,客户端所需要知道的只一个代理服务器而已,至于和具体哪个业 务服务器通信是代理服务器的问题,如此处理带来的一个直接的好处是在需要跨子系统进行数据交互的时候降低了彼此之间的耦合度,因为每个子系统从逻辑上来看 都是直接和代理服务器通信而不是和某个或某几个子系统之间的通信,因此从某种意义上来说由于代理服务器的应用使得被集成的每个子系统保持了子系统的独立 性。

    其 次,由于采用的是代理通信,所以整个系统是在一套完整的协议框架内运行的,只要代理通信协议设计的合理我们可以很方便的实现高度集成的系统,而同时有保证 每个被集成的子系统独立性,当然前提是每个子系统都要支持预定义的代理通信协议,也就是说只要子系统支持预定义的代理通信协议我们就可以在此框架下对系统 做任意程度的集成。

    这里需要特别强调下子系统的系统独立性的概念,在这里我所说的子系统的系统独立性是指,在整个高度集成的系统内通过代理通信该子系统是整个集成系统的一部 分,但是如果子系统关闭代理通信功能而使用自身的通信协议和自己的业务服务器直接进行通信并处理业务罗杰,那么此时该子系统哥就是一个拥有独立行为的应用 系统。 

     综述,通过代理服务器的使用和 定义良好的代理通信协议的使用,理论上我们可以将任意个数的子系统进行合理的集成而又能保持每个被集成软件的应用独立性,因为在通过代理进行集成的过程中 我们没有改变每个子系统的内部架构,甚至没有改变他们的内部数据库物理结构,我们使用的只是他们服务器所提供的业务处理服务和数据服务而已。从我个人角度 来说我很喜欢代理服务器进行系统集成的方案,因为我个人感觉通过协议进行系统集成使我们能对得到的系统更容易扩展和维护。当然代理服务器也存在它的确定, 如代理通信协议定义的难度是不容忽视的,倘若定义不当非但不会得到代理集成的好处返回会是系统陷入新的混乱难以理解的状态。

 (注:结束。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章