假設你對項目管理、系統架構有興趣。請加微信訂閱號「softjg」,增長這個PM、架構師的你們庭java
隨着近年來SOA(面向服務技術架構)的興起。愈來愈多的應用系統開始進行分佈式的設計和部署。系統由原來單一的技術架構變成面向服務的多系統架構。原來在一個系統之間可以完畢的業務流程。經過多系統的之間屢次交互來實現。這裏不打算介紹怎樣進行SOA架構的設計。而是介紹一下應用系統之間怎樣進行數據的傳輸。python
應用系統之間傳輸數據有三個要素:傳輸方式,傳輸協議。數據格式web
傳輸數據方式通常無非是下面幾種:數據庫
1 socket方式編程
Socket方式是最簡單的交互方式。是典型才c/s 交互模式。一臺客戶機,一臺server。server提供服務,經過ip地址和port進行服務訪問。而客戶機經過鏈接server指定的port進行消息交互。安全
當中傳輸協議可以是tcp/UDP 協議。而server和約定了請求報文格式和響應報文格式。微信
如圖一所看到的:網絡
眼下咱們常用的http調用,java遠程調用。webserivces 都是採用的這樣的方式。僅僅只是不一樣的就是傳輸協議以及報文格式。架構
這樣的方式的長處是:框架
1 易於編程。眼下java提供了多種框架,屏蔽了底層通訊細節以及傳輸數據轉換細節。
2 easy控制權限。經過傳輸層協議https,加密傳輸的數據,使得安全性提升
3 通用性比較強。無論client是.net架構,java,python 都是可以的。尤爲是webservice規範,使得服務變得通用
而這樣的方式的缺點是:
1 server和client必須同一時候工做,當server端不可用的時候,整個數據交互是不可進行。
2 當數據傳輸量比較大的時候,嚴重佔用網絡帶寬。可能致使鏈接超時。使得在數據量交互的時候。服務變的很是不可靠。
2 ftp/文件共享server方式
對於大數據量的交互,採用這樣的文件的交互方式最適合只是了。
系統A和系統B約定文件server地址,文件命名規則,文件內容格式等內容。經過上傳文件到文件server進行數據交互。
最典型的應用場景是批量處理數據:好比系統A把今天12點以前把要處理的數據生成到一個文件,系統B次日凌晨1點進行處理,處理完畢以後,把處理結果生成到一個文件,系統A 12點在進行結果處理。這樣的情況經常發生在A是事物處理型系統。對響應要求比較高,不適合作數據分析型的工做,而系統B是後臺系統,對處理能力要求比較高,適合作批量任務系統。
以上僅僅是說明經過文件方式的數據交互。實際狀況B完畢任務以後。可能經過socket的方式通知A,不必定是經過文件方式。
這樣的方式的長處:
1 在數據量大的狀況下,可以經過文件傳輸。不會超時,不佔用網絡帶寬。
2 方案簡單,避免了網絡傳輸,網絡協議相關的概念。
這樣的方式的缺點:
1 不太適合作實時類的業務
2 必須有共同的文件server,文件server這裏面存在風險。因爲文件可能被篡改,刪除,或者存在泄密等。
3 必須約定文件數據的格式,當改變文件格式的時候,需要各個系統都同步作改動。
3 數據庫共享數據方式
系統A和系統B經過鏈接同一個數據庫server的同一張表進行數據交換。
當系統A請求系統B處理數據的時候。系統A Insert一條數據,系統B select 系統A插入的數據進行處理。
這樣的方式的長處是
1 相比文件方式傳輸來講,因爲使用的同一個數據庫,交互更加簡單。
2 由於數據庫提供至關作的操做。比方更新,回滾等。交互方式比較靈活,而且經過數據庫的事務機制。可以作成可靠性的數據交換。
這樣的方式的缺點:
1 當鏈接B的系統愈來愈多的時候,由於數據庫的鏈接池是有限的,致使每個系統分配到的鏈接不會很是多,當系統愈來愈多的時候,可能致使無可用的數據庫鏈接
2 普通狀況。來自兩個不一樣公司的系統。不太會開放本身的數據庫給對方鏈接,因爲這樣會有安全性影響
4 message方式
Java消息服務(Java Message Service)是message傳輸數據的典型的實現方式。
系統A和系統B經過一個消息server進行數據交換。系統A發送消息到消息server,假設系統B訂閱系統A發送過來的消息,消息server會消息推送給B。
兩方約定消息格式就能夠。
眼下市場上有很是多開源的jms消息中間件。比方 ActiveMQ, OpenJMS 。
這樣的方式的長處
1 由於jms定義了規範,有很是多的開源的消息中間件可以選擇。而且比較通用。接入起來相對也比較簡單
2 經過消息方式比較靈活。可以採取同步,異步。可靠性的消息處理,消息中間件也可以獨立出來部署。
這樣的方式的缺點
1 學習jms相關的基礎知識。消息中間件的詳細配置,以及實現的細節對於開發者來講仍是有一點學習成本的
2 在大數據量的狀況下,消息可能會產生積壓,致使消息延遲,消息丟失,甚至消息中間件崩潰。
如下詳細來分析一個場景。來看看系統之間傳輸數據的應用
場景 眼下業務人員需要導入一個大文件到系統A,系統A保存文件信息。而文件中面的明細信息需要導入到系統B進行分析,當系統B分析完畢以後,需要把分析結果通知系統A。
A 系統A先保存文件到文件server。
B 系統A 經過webservice 調用系統B提供的server,把需要處理的文件名稱發送到系統B。由於文件很是大。需要處理很是長時間,因此B不及時處理文件,而是保存需要處理的文件名稱到數據庫。經過後臺定時調度機制去處理。
因此B接收請求成功,立馬返回系統A成功。
C 系統B定時查詢數據庫記錄,經過記錄查找文件路徑。找到文件進行處理。這個過程很是長。
D 系統B處理完畢以後發送消息給系統A。告知系統A文件處理完畢。
E 系統A 接收到系統B請求來的消息,進行展現任務結果
假設你對項目管理、系統架構有興趣。請加微信訂閱號「softjg」,增長這個PM、架構師的你們庭