天天看點

應用系統之間資料傳輸的幾種方式

如果你對項目管理、系統架構有興趣,請加微信訂閱号“softjg”,加入這個PM、架構師的大家庭

應用系統之間資料傳輸的幾種方式

随着近年來SOA(面向服務技術架構)的興起,越來越多的應用系統開始進行分布式的設計和部署。系統由原來單一的技術架構變成面向服務的多系統架構。原來在一個系統之間可以完成的業務流程,通過多系統的之間多次互動來實作。這裡不打算介紹如何進行SOA架構的設計,而是介紹一下應用系統之間如何進行資料的傳輸。

應用系統之間資料傳輸有三個要素:傳輸方式,傳輸協定,資料格式

資料傳輸方式一般無非是以下幾種:

1 socket方式

Socket方式是最簡單的互動方式。是典型才c/s

互動模式。一台客戶機,一台伺服器。伺服器提供服務,通過ip位址和端口進行服務通路。而客戶機通過連接配接伺服器指定的端口進行消息互動。其中傳輸協定可以是tcp/UDP

協定。而伺服器和約定了請求封包格式和響應封包格式。如圖一所示:

應用系統之間資料傳輸的幾種方式

目前我們常用的http調用,java遠端調用,webserivces 都是采用的這種方式,隻不過不同的就是傳輸協定以及封包格式。

這種方式的優點是:

1 易于程式設計,目前java提供了多種架構,屏蔽了底層通信細節以及資料傳輸轉換細節。

2 容易控制權限。通過傳輸層協定https,加密傳輸的資料,使得安全性提高

3 通用性比較強,無論用戶端是.net架構,java,python 都是可以的。尤其是webservice規範,使得服務變得通用

而這種方式的缺點是:

1 伺服器和用戶端必須同時工作,當伺服器端不可用的時候,整個資料互動是不可進行。

2 當傳輸資料量比較大的時候,嚴重占用網絡帶寬,可能導緻連接配接逾時。使得在資料量互動的時候,服務變的很不可靠。

2 ftp/檔案共享伺服器方式

對于大資料量的互動,采用這種檔案的互動方式最适合不過了。系統A和系統B約定檔案伺服器位址,檔案命名規則,檔案内容格式等内容,通過上傳檔案到檔案伺服器進行資料互動。

應用系統之間資料傳輸的幾種方式

最典型的應用場景是批量處理資料:例如系統A把今天12點之前把要處理的資料生成到一個檔案,系統B第二天淩晨1點進行處理,處理完成之後,把處理結果生成到一個檔案,系統A

12點在進行結果處理。這種狀況經常發生在A是事物處理型系統,對響應要求比較高,不适合做資料分析型的工作,而系統B是背景系統,對處理能力要求比較高,适合做批量任務系統。

以上隻是說明通過檔案方式的資料互動,實際情況B完成任務之後,可能通過socket的方式通知A,不一定是通過檔案方式。

這種方式的優點:

1 在資料量大的情況下,可以通過檔案傳輸,不會逾時,不占用網絡帶寬。

2 方案簡單,避免了網絡傳輸,網絡協定相關的概念。

這種方式的缺點:

1 不太适合做實時類的業務

2 必須有共同的檔案伺服器,檔案伺服器這裡面存在風險。因為檔案可能被篡改,删除,或者存在洩密等。

3 必須約定檔案資料的格式,當改變檔案格式的時候,需要各個系統都同步做修改。

3 資料庫共享資料方式

系統A和系統B通過連接配接同一個資料庫伺服器的同一張表進行資料交換。當系統A請求系統B處理資料的時候,系統A Insert一條資料,系統B select

系統A插入的資料進行處理。

應用系統之間資料傳輸的幾種方式

這種方式的優點是

1 相比檔案方式傳輸來說,因為使用的同一個資料庫,互動更加簡單。

2 由于資料庫提供相當做的操作,比如更新,復原等。互動方式比較靈活,而且通過資料庫的事務機制,可以做成可靠性的資料交換。

1 當連接配接B的系統越來越多的時候,由于資料庫的連接配接池是有限的,導緻每個系統配置設定到的連接配接不會很多,當系統越來越多的時候,可能導緻無可用的資料庫連接配接

2 一般情況,來自兩個不同公司的系統,不太會開放自己的資料庫給對方連接配接,因為這樣會有安全性影響

4 message方式

Java消息服務(Java Message

Service)是message資料傳輸的典型的實作方式。系統A和系統B通過一個消息伺服器進行資料交換。系統A發送消息到消息伺服器,如果系統B訂閱系統A發送過來的消息,消息伺服器會消息推送給B。雙方約定消息格式即可。目前市場上有很多開源的jms消息中間件,比如

ActiveMQ, OpenJMS 。

應用系統之間資料傳輸的幾種方式

這種方式的優點

1 由于jms定義了規範,有很多的開源的消息中間件可以選擇,而且比較通用。接入起來相對也比較簡單

2 通過消息方式比較靈活,可以采取同步,異步,可靠性的消息處理,消息中間件也可以獨立出來部署。

這種方式的缺點

1 學習jms相關的基礎知識,消息中間件的具體配置,以及實作的細節對于開發人員來說還是有一點學習成本的

2 在大資料量的情況下,消息可能會産生積壓,導緻消息延遲,消息丢失,甚至消息中間件崩潰。

下面具體來分析一個場景,來看看系統之間資料傳輸的應用

場景

目前業務人員需要導入一個大檔案到系統A,系統A儲存檔案資訊,而檔案裡面的明細資訊需要導入到系統B進行分析,當系統B分析完成之後,需要把分析結果通知系統A。

應用系統之間資料傳輸的幾種方式

A 系統A先儲存檔案到檔案伺服器。

B 系統A 通過webservice

調用系統B提供的伺服器,把需要處理的檔案名發送到系統B。由于檔案很大,需要處理很長時間,是以B不及時處理檔案,而是儲存需要處理的檔案名到資料庫,通過背景定時排程機制去處理。是以B接收請求成功,立刻傳回系統A成功。

C 系統B定時查詢資料庫記錄,通過記錄查找檔案路徑,找到檔案進行處理。這個過程很長。

D 系統B處理完成之後發送消息給系統A,告知系統A檔案處理完成。

E 系統A 接收到系統B請求來的消息,進行展示任務結果

應用系統之間資料傳輸的幾種方式