多端異構,通常來講這是數據集成系統最複雜的狀況,而前面部分咱們將討論多端同構場景下的作法,再逐漸延伸到文章主題部分,即多端異構的場景。數據庫
所謂多端同構,就是終端類型能夠是多種,可是使用的數據庫是相同的,好比都是MySQL。這種狀況下,須要將終端的MySQL數據同步到統一數據平臺,統一數據平臺的數據庫類型能夠是任意的。這種場景的示意圖以下:後端
通常來講,有兩種實現方式:服務器
按期將終端MySQL的bin log增量同步到統一數據平臺,平臺解析bin log後寫入數據庫,解析器獨立於業務代碼,反向亦然;網絡
終端和統一數據平臺的業務代碼經過自定義的數據包協議來收發數據,解析後寫入各自的數據庫;架構
第一種方式的話,須要獨立的解析器,即數據同步和業務邏輯是分開的,所以須要在數據到達時通知業務模塊,通常是經過消息隊列來實現,當解析器將數據寫入數據庫時,同時發送一個消息到消息隊列,業務代碼經過訂閱消息來實時響應。示意圖以下:工具
第二種方式其實就是將解析器邏輯放入到業務模塊裏邊,這個時候就省去了消息隊列。示意圖以下:大數據
那麼比較來看的話,第一種方式部署上須要多部署兩個模塊,可是業務模塊更純粹一些,沒有數據集成邏輯,但業務模塊仍是免不了須要接收消息而後進行數據處理。並且若是平臺也有數據須要同步到終端,而且平臺不是bin log採集增量數據的方式,解析器和接收器又變得更復雜了。所以,從這個角度看的話,第二種方式更經常使用也更省事。那第一種方式是否毫無用處呢?其實也不是。若是平臺這邊有多個獨立的業務模塊須要同步數據,第二種方式的話,每一個模塊都須要跟終端進行直連並收發數據,這種狀況下能夠將兩種方式結合起來獲得第三種方式,示意圖以下:阿里雲
多端異構,也就是各個終端不一樣,使用的數據庫也不相同,好比有的終端使用MySQL,有的終端使用Oracle,另外的使用SQL Server等,示意圖以下:插件
這種狀況下,只須要將多端同構的方案進行下變化,獲得下面的圖:設計
這時候,各個終端系統和平臺採用統一的數據交換協議,每一個終端模塊和平臺模塊都具備封裝數據和解析數據協議的功能。
還有一種比較複雜的狀況,就是各個終端模塊由不一樣的廠商開發,沒有統一的數據協議,終端業務模塊也不會直接經過TCP/IP和平臺模塊進行數據傳輸。這個時候,平臺仍是須要終端的數據,怎麼辦?可使用第三方軟件,經過監控終端和平臺的數據庫變化,捕獲變化的數據發送給對方,對方解析後同步到數據庫。這樣的話,看起來和多端同構時咱們給的第一種解決方案相似,第三方同步軟件就是一個獨立的數據收發和解析器。
我曾經對比過各類數據同步工具,網上不少所謂的同步工具更多的是轉換器,就是一次性的將某種數據庫的數據轉換成另一種數據庫能識別的結構並導入目標數據庫,但並不能進行增量同步。在支持增量同步方面,有個開源項目叫SymmetricDS,支持異構數據的雙向增量同步,數據變化的捕獲基於觸發器。在上面的場景中,咱們須要將SymmetricDS安裝到每一個終端系統中,同時平臺端也須要安裝。每一個數據庫被看做SymmetricDS架構中的一個節點(Node),每一個節點屬於一個組(Group),數據的同步規則是基於組的,即組和組之間的同步,組內的節點使用的是組的規則。
SymmetricDS在鏈接到某個數據庫後,會在數據庫中插入幾十個表,用來記錄數據變動、路由規則、組信息、節點信息等等。這些表也須要和咱們的業務表放在一塊兒,觸發器才能正常,所以這種方式對業務數據庫是侵入式的。若是不喜歡這種方式,咱們能夠將每一個終端的數據庫結構,轉換成平臺端數據庫對應的結構,而後在平臺端新建一個數據庫,將終端數據庫的數據同步到剛剛專門爲該終端創建的數據庫,這個新建的數據庫至關於終端數據庫的備份。這樣的話,新建的這個備份數據庫和咱們平臺端的業務數據庫是分開的。那當數據從終端同步到平臺端時,業務模塊怎麼知道呢?一樣的,經過消息隊列。咱們須要給在平臺端安裝的SymmetricDS服務安裝插件,這個插件在終端數據同步到備份數據庫時被調用,插件的功能就是將接收到的數據發送到消息隊列,業務模塊經過訂閱消息來獲取數據並進行相應的處理。整個系統的架構以下圖所示:
從上面的架構圖能夠知道,每一個終端在平臺端都有相應的備份數據庫,當終端有新的數據同步到備份數據庫時,SymmetricDS的插件將消息發送到消息隊列,再通過消息處理服務解析後進入到業務數據庫。反向的,業務模塊有數據更新時,一樣把相應的數據寫入到消息隊列,這時候消息處理服務將數據寫入到備份數據庫,由於有觸發器,觸發SymmetricDS將更改的數據先保存到數據表中,而後再同步到終端數據庫,這樣就實現了數據的雙向增量同步集成。
若是你的數據不是多端的,好比只是後端集成,能夠考慮消息隊列,我也建議你去看看阿里雲的數加大數據平臺,好比它提供將Apache Log數據抽取而後寫入RDS數據庫,又提供將RDS數據同步到Max Compute等存儲系統,而後就能夠配接DataV進行數據分析展現,這就是數加的一站式大數據服務。阿里雲有一個數據同步工具叫DataX,貌似不支持多端增量同步,後來又演化成叫「數據集成」的產品,目前具體怎樣沒有再去了解了。若是你瞭解更多或者有其餘的方案,也歡迎你在評論裏跟你們分享分享!
多端離線是指多端離線使用,寫這個是由於前段有人問我這麼個問題:在終端機刷他們的卡時,反應速度比較慢,由於要聯網,網絡很差的時候體驗很很差。是否能夠改進,將數據同時存儲在終端機,而後刷卡時不鏈接服務器,還容許必定額度的透支。另外還有一個問題,這張卡是能夠在多個終端機刷的,好比在這個窗口刷完,立刻能夠去另一個窗口刷。
咱們能夠先看下不容許多終端刷卡的狀況下如何解決。這種狀況就是把數據存儲一份到終端,而後數據庫裏存放容許透支金額、已透支金額等數據就能夠了。當用戶刷卡時,若是沒有超出範圍就能夠正常使用,等到網絡條件好時,再同步數據到後端服務器。
可是當容許多終端刷卡時,可能第一次刷完數據尚未同步到服務器,第二次在另外的終端刷時,數據就不一樣步了。這種狀況就要看具體的軟硬件條件了,若是能夠,把須要的信息存儲到卡上,這樣在第2、三個終端刷時都沒有問題。當各個終端將刷卡消費信息同步到服務器端時,服務器端設計成相似能夠回放電影同樣,把每次刷卡的動做回放,再結合具體記錄下來的數據進行處理就能夠了。這只是我根據對方粗淺描述的狀況給的一個思路,也許瞭解了更多信息後,會有不同的答案。
延伸閱讀: