應(yīng)用系統(tǒng)之間數(shù)據(jù)傳輸?shù)膸追N方式
隨著近年來SOA(面向服務(wù)技術(shù)架構(gòu))的興起,越來越多的應(yīng)用系統(tǒng)開始進行分布式的設(shè)計和部署。系統(tǒng)由原來單一的技術(shù)架構(gòu)變成面向服務(wù)的多系統(tǒng)架構(gòu)。原來在一個系統(tǒng)之間可以完成的業(yè)務(wù)流程,通過多系統(tǒng)的之間多次交互來實現(xiàn)。這里不打算介紹如何進行SOA架構(gòu)的設(shè)計,而是介紹一下應(yīng)用系統(tǒng)之間如何進行數(shù)據(jù)的傳輸。
應(yīng)用系統(tǒng)之間數(shù)據(jù)傳輸有三個要素:傳輸方式,傳輸協(xié)議,數(shù)據(jù)格式
數(shù)據(jù)傳輸方式一般無非是以下幾種:
1 socket方式
Socket方式是最簡單的交互方式。是典型才c/s 交互模式。一臺客戶機,一臺服務(wù)器。服務(wù)器提供服務(wù),通過ip地址和端口進行服務(wù)訪問。而客戶機通過連接服務(wù)器指定的端口進行消息交互。其中傳輸協(xié)議可以是tcp/UDP 協(xié)議。而服務(wù)器和約定了請求報文格式和響應(yīng)報文格式。如圖一所示:

目前我們常用的http調(diào)用,java遠程調(diào)用,webserivces 都是采用的這種方式,只不過不同的就是傳輸協(xié)議以及報文格式。
這種方式的優(yōu)點是:
1 易于編程,目前java提供了多種框架,屏蔽了底層通信細(xì)節(jié)以及數(shù)據(jù)傳輸轉(zhuǎn)換細(xì)節(jié)。
2 容易控制權(quán)限。通過傳輸層協(xié)議https,加密傳輸?shù)臄?shù)據(jù),使得安全性提高
3 通用性比較強,無論客戶端是.net架構(gòu),java,python 都是可以的。尤其是webservice規(guī)范,使得服務(wù)變得通用
而這種方式的缺點是:
1 服務(wù)器和客戶端必須同時工作,當(dāng)服務(wù)器端不可用的時候,整個數(shù)據(jù)交互是不可進行。
2 當(dāng)傳輸數(shù)據(jù)量比較大的時候,嚴(yán)重占用網(wǎng)絡(luò)帶寬,可能導(dǎo)致連接超時。使得在數(shù)據(jù)量交互的時候,服務(wù)變的很不可靠。
2 ftp/文件共享服務(wù)器方式
對于大數(shù)據(jù)量的交互,采用這種文件的交互方式最適合不過了。系統(tǒng)A和系統(tǒng)B約定文件服務(wù)器地址,文件命名規(guī)則,文件內(nèi)容格式等內(nèi)容,通過上傳文件到文件服務(wù)器進行數(shù)據(jù)交互。

最典型的應(yīng)用場景是批量處理數(shù)據(jù):例如系統(tǒng)A把今天12點之前把要處理的數(shù)據(jù)生成到一個文件,系統(tǒng)B第二天凌晨1點進行處理,處理完成之后,把處理結(jié)果生成到一個文件,系統(tǒng)A 12點在進行結(jié)果處理。這種狀況經(jīng)常發(fā)生在A是事物處理型系統(tǒng),對響應(yīng)要求比較高,不適合做數(shù)據(jù)分析型的工作,而系統(tǒng)B是后臺系統(tǒng),對處理能力要求比較高,適合做批量任務(wù)系統(tǒng)。
以上只是說明通過文件方式的數(shù)據(jù)交互,實際情況B完成任務(wù)之后,可能通過socket的方式通知A,不一定是通過文件方式。
這種方式的優(yōu)點:
1 在數(shù)據(jù)量大的情況下,可以通過文件傳輸,不會超時,不占用網(wǎng)絡(luò)帶寬。
2 方案簡單,避免了網(wǎng)絡(luò)傳輸,網(wǎng)絡(luò)協(xié)議相關(guān)的概念。
這種方式的缺點:
1 不太適合做實時類的業(yè)務(wù)
2 必須有共同的文件服務(wù)器,文件服務(wù)器這里面存在風(fēng)險。因為文件可能被篡改,刪除,或者存在泄密等。
3 必須約定文件數(shù)據(jù)的格式,當(dāng)改變文件格式的時候,需要各個系統(tǒng)都同步做修改。
3 數(shù)據(jù)庫共享數(shù)據(jù)方式
系統(tǒng)A和系統(tǒng)B通過連接同一個數(shù)據(jù)庫服務(wù)器的同一張表進行數(shù)據(jù)交換。當(dāng)系統(tǒng)A請求系統(tǒng)B處理數(shù)據(jù)的時候,系統(tǒng)A Insert一條數(shù)據(jù),系統(tǒng)B select 系統(tǒng)A插入的數(shù)據(jù)進行處理。

這種方式的優(yōu)點是
1 相比文件方式傳輸來說,因為使用的同一個數(shù)據(jù)庫,交互更加簡單。
2 由于數(shù)據(jù)庫提供相當(dāng)做的操作,比如更新,回滾等。交互方式比較靈活,而且通過數(shù)據(jù)庫的事務(wù)機制,可以做成可靠性的數(shù)據(jù)交換。
這種方式的缺點:
1 當(dāng)連接B的系統(tǒng)越來越多的時候,由于數(shù)據(jù)庫的連接池是有限的,導(dǎo)致每個系統(tǒng)分配到的連接不會很多,當(dāng)系統(tǒng)越來越多的時候,可能導(dǎo)致無可用的數(shù)據(jù)庫連接
2 一般情況,來自兩個不同公司的系統(tǒng),不太會開放自己的數(shù)據(jù)庫給對方連接,因為這樣會有安全性影響
4 message方式
Java消息服務(wù)(Java Message Service)是message數(shù)據(jù)傳輸?shù)牡湫偷膶崿F(xiàn)方式。系統(tǒng)A和系統(tǒng)B通過一個消息服務(wù)器進行數(shù)據(jù)交換。系統(tǒng)A發(fā)送消息到消息服務(wù)器,如果系統(tǒng)B訂閱系統(tǒng)A發(fā)送過來的消息,消息服務(wù)器會消息推送給B。雙方約定消息格式即可。目前市場上有很多開源的jms消息中間件,比如 ActiveMQ, OpenJMS 。

這種方式的優(yōu)點
1 由于jms定義了規(guī)范,有很多的開源的消息中間件可以選擇,而且比較通用。接入起來相對也比較簡單
2 通過消息方式比較靈活,可以采取同步,異步,可靠性的消息處理,消息中間件也可以獨立出來部署。
這種方式的缺點
1 學(xué)習(xí)jms相關(guān)的基礎(chǔ)知識,消息中間件的具體配置,以及實現(xiàn)的細(xì)節(jié)對于開發(fā)人員來說還是有一點學(xué)習(xí)成本的
2 在大數(shù)據(jù)量的情況下,消息可能會產(chǎn)生積壓,導(dǎo)致消息延遲,消息丟失,甚至消息中間件崩潰。
下面具體來分析一個場景,來看看系統(tǒng)之間數(shù)據(jù)傳輸?shù)膽?yīng)用
場景 目前業(yè)務(wù)人員需要導(dǎo)入一個大文件到系統(tǒng)A,系統(tǒng)A保存文件信息,而文件里面的明細(xì)信息需要導(dǎo)入到系統(tǒng)B進行分析,當(dāng)系統(tǒng)B分析完成之后,需要把分析結(jié)果通知系統(tǒng)A。

A 系統(tǒng)A先保存文件到文件服務(wù)器。
B 系統(tǒng)A 通過webservice 調(diào)用系統(tǒng)B提供的服務(wù)器,把需要處理的文件名發(fā)送到系統(tǒng)B。由于文件很大,需要處理很長時間,所以B不及時處理文件,而是保存需要處理的文件名到數(shù)據(jù)庫,通過后臺定時調(diào)度機制去處理。所以B接收請求成功,立刻返回系統(tǒng)A成功。
C 系統(tǒng)B定時查詢數(shù)據(jù)庫記錄,通過記錄查找文件路徑,找到文件進行處理。這個過程很長。
D 系統(tǒng)B處理完成之后發(fā)送消息給系統(tǒng)A,告知系統(tǒng)A文件處理完成。
E 系統(tǒng)A 接收到系統(tǒng)B請求來的消息,進行展示任務(wù)結(jié)果
14年互聯(lián)網(wǎng)技術(shù)、產(chǎn)品、運營經(jīng)驗,前支付寶技術(shù)專家,互金創(chuàng)業(yè)公司CTO,大令保事業(yè)部總經(jīng)理。
在互金領(lǐng)域有比較強的產(chǎn)品以及運營經(jīng)驗,尤其擅長用戶增長、轉(zhuǎn)化、運營上的經(jīng)驗,兼具技術(shù)、產(chǎn)品、運營思維。
目前是云貓增長實驗室 創(chuàng)始人
團隊成員來自阿里等國內(nèi)知名互聯(lián)網(wǎng)公司,曾在互聯(lián)網(wǎng)金融、互聯(lián)網(wǎng)保險、企業(yè)級SaaS等項目中負(fù)責(zé)用戶增長,團隊管理的工作,擁有豐富的一線流量增長經(jīng)驗與實操手段。
歡迎關(guān)注我們,用技術(shù)驅(qū)動增長
浙公網(wǎng)安備 33010602011771號