StarRocks在支付對賬領域的應用
1. 前言
對賬是企業為了核實財務交易準確性、管理庫存和了解業務績效而進行的核對和調解過程。
因為對賬涉及到支付系統、訂單系統、財務系統、結算系統和權益系統等多個系統,需要確保這些系統的數據能夠有效地對應和匹配,需要一種高效可靠的方式以解決跨系統的數據匹配。
2. 支付閉環
2.1支付背后隱藏的細節。
一筆訂單的完結,C端用戶看到的僅僅是下單、支付簡單的流程,實際上背后有一套更復雜的流程實現支付的閉環。比如支付成功通知、訂單結算分賬、結算成功通知、賬務處理與報表生成等,以下是一個簡化的支付閉環流程:
圖片
3. 支付對賬架構的演進
3.1對賬1.0,All in MySql
圖片
基于Mysql數據庫完成對賬,將涉及到的分布在不同服務器上的業務庫同步到一個大磁盤服務器上的Mysql實例下,在此實例下完成跨庫查詢、數據的匹配。
此方案雖然解決了跨庫查詢的問題,但是因為有些表數據量達到億級別,導致sql查詢緩慢,對賬效率低下,比如月度退款對賬sql查詢需要3個小時。
3.2對賬2.0,利用大數據技術提速
圖片
使用 ETL(Extract, Transform, Load)方法來實現數據的提取、轉換、加載,將對賬需要的不同業務系統的表數據同步到數倉,在數倉完成跨庫跨表的關聯,以便進行有效的對賬分析。
3.3對賬2.0的缺陷
這種方式雖然比[對賬1.0]方案效率有所提升,但是對賬場景中有調賬、補賬的操作,這部分修改、新增的數據目前只能T+1同步到數倉,導致部分對賬場景不適用,需要按照【對賬1.0】方案處理。
4. 對賬3.0,Starrock極速提效
4.1引入StarRocks的背景
但隨著數據累積和數據量的增長,加之業務線和財務精細化的支付賬單需求,當前架構日漸吃力,業務上呈現出以下痛點:
人力成本高,每次對賬都需要4人/日,出現問題每次都需要財務人員找開發人員查詢,重復的工作浪費人力。
時效性低,基于大數據Hive的查詢,雖然解決了大數據量多表關聯的問題,但是執行速度的問題沒解決。
機器成本高,部分場景仍然需要基于Mysql,需要將多個mySql主庫同步到一臺高配的機器上的MySql服務上來支持跨表跨庫查詢。
為了給業務增長提供更強的助力,我們開始尋找一款可以支持更靈活的數據模型、具有高效的并發查詢性能、運維可以支持的實時性 OLAP 數據庫產品。
圖片
圖片
通過以上產品能力上的初步對比和查詢性能的對比,我們已經比較傾向于選擇 StarRocks。支持億級的大表關聯、秒級查詢,同時支持實時寫入,兼容Mysql協議等特性,符合我們支付對賬場景的業務需求。
4.2基于StarRocks的對賬3.0架構
圖片
和2.0對賬方案比整體架構上變化不大,StarRocks替代了Hive,基于StarRocks的高性能查詢特性補充了若干定時任務,并且將原來基于Hive語法的語句調整為SQL語句,基于MySQL語法的語句需要很小的變動(雖然官方兼容MySQL協議,但也發現有些SQL語法不兼容)。
對賬任務平臺中的任務,主要基于SQL和Python開發,遷移、新增自動化任務也完全基于熟悉的技術棧,學習成本很低。另外為了防止MySQL主庫和Starrock庫中的數據不一致,新增了數據校驗任務,一旦發現存在差異會報警,并觸發DataX數據補償機制。
4.3對賬模型的選擇
剛開始就是因為錯用了更新模型,產生存在主鍵重復的數據存在,導致對賬數據異常,所以要結合業務數據特性從明細模型、聚合模型、更新模型、主鍵模型中選擇符合業務場景的模型。
圖片
4.4Flink實時數據同步
數據同步工具和中間件,考慮到公司現有的技術支持和業界成熟度,最終選擇DataX同步存量數據,DataX的數據同步可以通過頁面操作的方式同步,Flink監控binlog同步增量數據,雖然StarRocks 提供了用于和Flink集成的connector,但還是相對復雜一點。
同時要注意,Flink不支持char類型、timestamp類型,要替換成對應的varchar和datetime。下面是實現同步的一些關鍵步驟:
- 建StarRocks表db1_flink_table1
圖片
- 定義Flink表(對應StarRocks表)xxxxtable
圖片
- 創建Flink SQL任務,向StarRocks寫入數據
圖片
如果有些需求無法使用Flink SQL實現,需要Flink 自定義任務向StarRocks寫入數據,然后自行編碼實現。
4.6SQL語法的適配
對賬有18個場景,每個場景下的SQL都需要適配StarRocks,但因為Starrocks兼容SQL語法,適配成本很低,一天的時間完成了所有的SQL適配。
下面是語法的對比,左側是MySQL,右側是Starrocks,基本一直,如果select 字段包含子查詢的時候StarRocks不支持,需要調整。
圖片
圖片
4.5落地效果
綜合比較,相比于之前的架構,現在的架構查詢性能方面提升明顯。最復雜的一條對賬Sql執行時間從1小時縮短到50秒,主鍵模型下查詢,關聯查詢相較于此前基于 MySQL 的架構,基于 StarRocks 的架構性能平均可以提升50-70倍以上。存儲成本相比于 MySQL+Druid,降低2倍以上。由此帶來的人力成本也由以前的3人/日縮減到1人/日釋放更多人力去完成更有挑戰性的工作。
圖片
5. 總結
當前,對賬工作中涉及多個場景的數據合并仍依賴人工操作,這種方法不僅效率低下,而且容易產生錯誤。因此,我們計劃將這一過程升級為程序定時自動對賬、生產報表。此外,利用StarRocks的最新特性,特別是物化視圖,能夠進一步提高查詢的效率,持續提升對賬效能。
作者簡介
馮現寬服務端研發部-服務端買用技術團隊
2016年加入汽車之家,目前任職于服務端研發部-服務端買用技術團隊,主要負責保險、支付和結算相關業務。