目錄
第零章、前言:為什么?做什么?怎么做?
最近帶隊做了公司的一個項目,叫數據交換平台,旨在物理隔離的情況下對多端業務系統進行數據的加密、傳輸、監控。
正好這個項目的架構師也在公司做了一次架構層面的技術分享,我便把此次分享和我在項目實踐中遇到的一些坑一起整理出來,形成本系列文章。
本系列文章介紹在物理隔離的網絡條件下進行數據交換的難點,以及如何保證文件交換的可靠性和安全性,如何與業務系統做到低耦合。
本文的目的在於跟讀者一起經歷整個項目,看看項目之初我們為什么去啟動這個項目,項目的邊界在哪里?
項目啟動后我們為什么去這樣架構和設計?為什么做這樣的選型?
再看看項目之中我們怎樣去解決斷點續傳、文件加解密、文件傳輸監控、文件存儲策略、多節點集群等方面的問題?
最后再看看項目結束之后我們又收獲了什么?是否真正地解決了問題?還有沒有可改進的地方?
第一章、數據交換平台的一些基本概念
1.1 數據交換與交換平台
數據交換在一般意義上實際上是指物理硬件上的電路交換,而我們本次探討的內容則是軟件系統間的數據交換實現。
那么軟件系統中的數據交換都有哪些類型呢?
- API接口
這應該是我們最常用的一種數據交換方式了。可是,API接口也算是數據交換嗎?
事實上,我們所有的ESB、webService、API網關、RPC、MQ等等,都是在做系統間通信的工作。
我們想一想,不同的系統間通信什么內容呢?不就是靈與靈的交流、心與心的溝通,嗯,數據跟數據的交換嗎?
- 共庫
這應該是最簡單的一種交換方式了,我把數據放到這個庫,然后給你開個只讀用戶,或者對你開放同義詞、視圖權限,我寫你讀,你寫我讀。
- ETL
ETL是英文Extract-Transform-Load的縮寫,指將數據從源端抽取取、轉換、加載到目標端的一個過程。
ETL常常用在數據倉庫,但其實並不限於數據倉庫。
- 數據交換平台
在我的理解中,數據交換平台其實就是ETL的一個擴展集,它可以對多個應用子系統進行信息/數據的傳輸及共享,對各種分布異構系統進行互聯互通,建立中心數據庫,完成數據的抽取、集中、加載、展現,有着統一的數據處理和交換方法。
1.2 什么是物理隔離?
那我們本次要說的數據交換平台跟上面定義中的交換平台有什么區別呢?
為什么我們的文章標題中要加一個物理隔離呢?
實際上在我們軟件系統數據傳輸中,大部分都是通過TCP協議來通信的,而在物理隔離的情況下,這一法則將不再適用。
什么是物理隔離?
這個嘛,說起來也是頗具中國特色。在政務內網中,有個名詞頻頻被提及,就是網閘。
這個吊吊的設備提供了我們政務內網與互聯網之間的網絡安全性。
什么是網閘?來看看百度詞條上的一段話:
網閘是使用帶有多種控制功能的固態開關讀寫介質連接兩個獨立主機系統的信息安全設備。
網閘是怎么保證內外網的安全性的?
由於物理隔離網閘所連接的兩個獨立主機系統之間,不存在通信的物理連接、邏輯連接、信息傳輸命令、信息傳輸協議,不存在依據協議的信息包轉發,只有數據文件的無協議"擺渡",且對固態存儲介質只有"讀"和"寫"兩個命令。
一句話,就是文件擺渡。另外提一嘴,這個協議隔斷可是從鏈路層搞起的哦。
當前面臨的情況就是,一個網閘連接兩台主機,只監控這兩台主機上指定的文件夾目錄,擺渡目錄中的文件,從A1到B1,從B2到A2,如此這般。
這兩台連接網閘的主機,我們一般叫做前置機。
那么,這兩台前置機之間通信只能依賴文件跟文件的交換了。哦,NO。管你什么基於TCP、UDP的HTTP、FTP、TFTP、socket都完蛋。
好吧,看來,網閘真的神一樣的存在啊。而網絡直連的API接口訪問、共庫、ETL好像都成了鏡花水月一樣的東西,看得見,摸不着。只能走自建數據交換平台,使用文件交換這條路了。
緊接着,我們因為這個網閘產生的一系列問題即將接踵而來。
怎么把數據變成文件上傳到前置機上去交換?怎么在目標端下載下來?
怎么保證大文件的傳輸完整呢?中途失敗了怎么辦?
怎么知道對面的主機收到了我發送的文件呢?網閘可不提供TCP的ACK功能。
怎么保證數據的安全性呢?中途被篡改了怎么辦?
怎么保證數據的時序性呢?網閘可不按照時間順序給你傳遞文件。
怎么監控數據流轉的情況呢?丟包了怎么辦?有沒有辦法可以知道?
嗯,如果想了解以上問題,請看第二章:交換平台的項目邊界與架構設計。
第二章在哪里看?額,還沒寫,等兩天吧。