關於系統集成的設計方案( 二 )

    (注:本文續上一篇 關於系統集成的設計方案(一))

    經過上面的論述,我們決定採用系統集成的方式來滿足用戶的需求。那麼新的問題又有了,我們有集中集成方案可以選擇呢?哪種方案更能滿足我們的需求而且更容易擴展而且還不會增加系統不必要的複雜性呢?

    經過分析我覺得系統集成可以從數據共享和服務共享兩方面來考慮。爲什麼這麼說呢?首先我們來分析,當我們在做系統集成的時候需要面對的問題,有哪些。當我 們在做系統集成的時候我們首先需要做的是在將要被集成的子系統內尋找共同點,因爲兩個系統具有共同點的地方可能涉及到數據共享和功能共享的問題,也就是說 具有共同點的功能將來在整合後進會在一個子系統內對共享的數據進行維護,一般來講共同的功能會被安排在主集成子系統內。還有一點值得注意,就是在系統集成 後我們達到的目的是兩個系統間可以共享數據,也就是說一個系統維護的數據可以被另一個子系統訪問到,或者說有一部分數據會被另一個或多個子系統訪問到。基 於以上信息我提出通過數據共享的方式進行系統集成。那麼基於服務的系統集成又是怎樣的呢?首先我們回憶前面提到的兩個系統,他們都是採用的C/S架構實現的系統,而且都是通過各自的業務服務器來處理各自的業務,基於此我們可以考慮,倘若我們能夠讓系統B的服務器爲系統A服務或者讓A的服務器爲系統B服務器以提供各自所需要的共享的數據不也是實現系統集成的一種思路嗎?因此,我提出基於服務器的系統集成,此方法的核心就是把一個系統看作另一個服務器的客戶端,並且能讓此服務器爲其提供服務。

    下面我門將依次討論數據共享和基於服務的兩種系統集成的思路。我們先來考慮數據共享的系統集成,數據共享無非是數據庫層面的數據共享,我們考慮兩種方式,我們依舊以系統A 和系統B爲例論述。數據共享最簡單的方式是讓一個系統去訪問另一個系統的數據庫以獲取自己所需要的數據,其原理如 3所示。

                         圖 3 數據共享系統集成原理

     還有一種方式我們可以利用數據庫的發佈和訂閱功能(SqlServer 數據可以配置發佈和訂閱,其餘數據庫不清楚是否由此功能),也就是說我們可以將一個子系統的數據庫配置爲發佈數據庫,待有數據變更的時候會主動通知所有訂閱數據庫以更新訂閱服務器的數據,其原理如 4所示。

 

      圖4 數據訂閱系統集成

    當我們採用圖4所示的方式共享數據的時候我們不得不面對一個 子系統可能會訪問多個子系統數據庫的情況,而且可能出現多個子系統將交訪問的問題,這個造成的直接問題就是系統結構混亂子系統將耦合讀過高,最終造成的的 後果是系統集成成本加大,但是我們也不可以否認這種方法的簡單,因此我們可以考慮在時間緊迫而且集成度要求不高的情況下采用。

    再談後一種通過數據訂閱的方式實現系統集成的方式,這種方式的優點是簡單方便,只要我們擁有一個高水平的DBA並且對系統做簡單的修改或者不做修改我們就可以達到系統集成的要求,但是這種問題造成的問題是,當要集成的子系統很高而且數據訪問關係複雜的時候對於DBA的壓力還是很大的,因爲他要保證每個系統的數 據都是正確的而且能即時的到更新,差點忘了數據庫間的數據訂閱是存在延時的也就是說數據更新是異步的。不僅如此,通過此方法實現集成,其後期維護的成本是 非常昂貴的,我本人不建議採用,但是如果相對程序做雙主機備份倒是可以考慮採用數據訂閱的方式。   

    下面我們來介紹下基於服務共享的系統集成。服務我們可以採用Web服務也可以採用代理服務器的形式。我們這裏只介紹代理服務器的解決方案,對於Web服務的方式不做介紹,因爲Web服務的方式比較簡單很容易理解,而且他對於Web系統的集成比較適合對於C/S架構的系統來說不太適合。

圖5 代理服務器系統集成原理 

    基於代理服務器的系統集成方案原理如5所示。此方案的核心思想是對已有的每個子系統在保持原有的功能和系統完整性不便的情況下增加使用代理服務器的功能,每個子系統的客戶端通過代理服務器與具體的業務服務器通信,而具體到每個客戶端會與哪個業務服務器通信客戶端可以不必理會他只需要知道有個代理服務器可以爲他服務就可以了,此中方式有點類似於設計 模式中的代理模式。客戶端與代理服務器之間的通信是通過代理服務器定義的一套代理通信協議實現的(此協議可以根據不同的集成環境自行定義),他們之間的行 爲是通過預定義的協議來約束的,而每個子系統內客戶端與服務器通信的協議數據會被代理協議所封裝,當子系統的客戶端與服務器通信的時候代理服務器會根據代 理協議的約定將數據數據轉發給真正的業務服務器執行。通過這種方式的封裝客戶端可以實現和多種業務服務器的通信,只要他們按照既定義的公共協議執行即可滿 足各種複雜業務的集成。

    通過代理服務器進行系統集成有以下幾個優點。

    首 先,整個集成系統內的數據通信是通過代理服務器通信的,所有業務數據都是通過代理協議封裝的,客戶端所需要知道的只一個代理服務器而已,至於和具體哪個業 務服務器通信是代理服務器的問題,如此處理帶來的一個直接的好處是在需要跨子系統進行數據交互的時候降低了彼此之間的耦合度,因爲每個子系統從邏輯上來看 都是直接和代理服務器通信而不是和某個或某幾個子系統之間的通信,因此從某種意義上來說由於代理服務器的應用使得被集成的每個子系統保持了子系統的獨立 性。

    其 次,由於採用的是代理通信,所以整個系統是在一套完整的協議框架內運行的,只要代理通信協議設計的合理我們可以很方便的實現高度集成的系統,而同時有保證 每個被集成的子系統獨立性,當然前提是每個子系統都要支持預定義的代理通信協議,也就是說只要子系統支持預定義的代理通信協議我們就可以在此框架下對系統 做任意程度的集成。

    這裏需要特別強調下子系統的系統獨立性的概念,在這裏我所說的子系統的系統獨立性是指,在整個高度集成的系統內通過代理通信該子系統是整個集成系統的一部 分,但是如果子系統關閉代理通信功能而使用自身的通信協議和自己的業務服務器直接進行通信並處理業務羅傑,那麼此時該子系統哥就是一個擁有獨立行爲的應用 系統。 

     綜述,通過代理服務器的使用和 定義良好的代理通信協議的使用,理論上我們可以將任意個數的子系統進行合理的集成而又能保持每個被集成軟件的應用獨立性,因爲在通過代理進行集成的過程中 我們沒有改變每個子系統的內部架構,甚至沒有改變他們的內部數據庫物理結構,我們使用的只是他們服務器所提供的業務處理服務和數據服務而已。從我個人角度 來說我很喜歡代理服務器進行系統集成的方案,因爲我個人感覺通過協議進行系統集成使我們能對得到的系統更容易擴展和維護。當然代理服務器也存在它的確定, 如代理通信協議定義的難度是不容忽視的,倘若定義不當非但不會得到代理集成的好處返回會是系統陷入新的混亂難以理解的狀態。

 (注:結束。)

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