如何保障跨系統數據的最終一致性?
大家看到數據一致性第一時間想到的是什么? 大多數人想到的是是緩存和數據庫的一致性,或者是一個數據庫內的多個表的數據一致性。那么如何保障跨系統數據的最終一致性呢?這個問題對眾多企業來講是個難題,本文將為大家提供解決方案。
關于緩存和數據庫的一致性大家肯定都已經很熟悉了,無非是先改數據庫還是先改緩存,分別會對應什么樣的問題。同一個數據庫內多個表的一致性也好解決,一般用事務足以。
那么這里請大家想一下,一個調用鏈路下來,一共十幾個甚至幾十個系統,如何保證他們各自系統的數據一致性。如何保證整個鏈路的連續性呢。
比如一個場景,用戶使用優惠券選擇商品下單。這里面的資金流包括券資產的核銷、用戶實際的資金從第三方支付渠道比如支付寶、微信或者銀行卡支付劃撥到平臺;用戶確認收貨后,資金根據商品的性質劃分到商家、平臺、推廣傭金等等、用戶方賬單和商家方賬單的更新、對應物理資金的流轉,每一步都不能錯,即使一分錢對不上就是資損、就是事故。
解決方案
數據量大了之后,難免會因為網絡抖動、數據庫抖動、云服務商抖動等原因,導致出現一些異常數據。這種情況既然無法避免,就要想辦法能及時快速的排查出來,確保整個調用鏈路的最終一致性。想達到這樣的效果,要怎么做呢?要防止這些小概率事件,只能多做冗余保護措施。
一般分為實時核對和離線核對兩種思路。
實時核對
目前最常用的數據庫當屬MySQL,我們便以MySQL為例。通過監聽MySQL產生的binlog,解析出特定類型的DML語句作為觸發點來進行某些操作。比如可以將 DML語句中牽扯到的字段作為參數來發送MQ、調用RPC由接收方負責具體的業務核對邏輯。或者將表的關聯規則和具體核對業務規則都寫在負責實時核對的平臺,解析出來后由平臺進行統一的核對操作。
離線核對
為了保證數據的準確性,還可以每日將數據庫中的數據同步到HBase等離線表中,根據業務需要同步全量或者增量,然后通過寫Hive SQL將多個離線表Join在一起,核對數據有無缺失、不一致。
凡事必有代價,技術方案總有取舍,一般來說在比較重要尤其涉及到錢的部分,會通過實時核對和離線核對兩種方案來保證數據的一致性,這背后的代價就是成本,包括離線表的儲存使用成本、核對規則的編寫成本、數據的同步成本等。
數環通數據連接器iPaaS是一款開箱即用、安全穩定與多場景適用的一站式企業級應用集成平臺。基于云原生基座,通過預置連接器、可視化流程編排和API治理等能力,將企業內外部不同的業務、活動、應用、數據、API、設備連接起來,實現各個系統間的業務銜接、數據流轉、資源整合,高效實現企業上下游、內外網應用系統的數據互通,從而實現企業流程自動化,助力企業敏捷創新發展和數字化轉型升級。
目前,數環通已對接打通釘釘、金蝶云、維格表、抖音、企業微信、CRM、巨量千川、用友等1000+應用系統,擁有超20000+指令動作,且持續周周更新。能夠快速擴展您現有系統的功能,并將各個系統串聯起來。
中國南方電網、易方達基金、綠城中國、認養一頭牛、迪卡儂等數千家企業已選擇數環通助力企業數字化經營。
- 相關文章推薦