Categories
程式開發

獨家揭秘陸金所去Oracle全過程:18個月將90%數據庫業務換到MySQL


陸金所目前已經完成全站90%以上的去Oracle工作,並且將在6月底前下線最後一台Oracle。他們是怎麼做到的?

在蒐集企業去Oracle實踐的過程中,我們發現很多企業都會依賴於雲廠商或者其它已經去Oracle成功企業的幫助,真正憑藉自己力量去Oracle的企業並不多。而今天我們介紹的去Oracle案例,恰恰就是憑藉自己力量去Oracle的一家企業,這家企業是陸金所。

陸金所去Oracle實踐開始於2018年年中,歷時18個月,將全站90%的數據庫、數千張表從Oracle無縫切換至MySQL。 InfoQ記者為此獨家採訪陸金所去Oracle實踐的負責人王英傑,試圖為大家還原全過程。

陸金所的業務場景與去Oracle節奏

陸金所的去Oracle從2018年年中開始啟動,涉及大幾百個子系統,總數據量超過PB級,去除的Oracle數據庫覆蓋基金、網貸、信託、資管、銀行理財、證券、保險、主賬戶等全金融場景,全程使用自動化平台管控和推薦去Oracle實踐。

據王英傑介紹,“陸金所全部的研發和技術運營部門都參與了全站去Oracle,至少有500人以上的開發、測試和運維工程師參與其中。 ”

如果從整個實踐過程來看,陸金所去Oracle實踐有三個比較關鍵的階段:

  • 一是通過邊緣系統進行方案驗證階段;

  • 二是去”O“自動化工具平台構建和優化階段;

  • 三是全自動化標準化去”O“落地階段。

去Oracle 方案的選擇

與大多數企業去Oracle的原因相同,陸金所選擇去Oracle也是因為原有的Oracle數據庫架構擴展性很差,並且Oracle 軟件授權費用太高,無法支撐陸金所從2013年到現在交易量井噴式暴增下的業務需求。

另外,隨著陸金所業務逐步擴展為基金、網貸、信託、私募、AI理財、保險、銀行等全金融業務線,原來的Oracle數據庫不僅在容量上無法支持全金融業務場景,而且在監管上也不一定合規。

在去Oracle之前,陸金所對全站所有應用場景的各個接口和SQL進行了逐一審核,評定替代方案。結果選定了以MySQL作為主替代數據庫,同時因為MySQL無法支撐Oracle的所有場景,還引入了Elasticsearch、Redis、TiDB、HBase等多種存儲引擎,充分發揮這些存儲引擎在各自場景下的優勢,從而重構出一個合理的數據庫架構來無縫替換Oracle。

圖片

陸金所現在的數據庫架構

陸金所對於去Oracle的核心訴求是在外部用戶不感知的情況下,更換掉核心數據庫。因此,陸金所研發了一套數據同步工具,以表為粒度,把MySQL 作為Oracle的備庫,實時同步Oracle的DDL和DML變更。同時在應用層實現Oracle和MySQL兩套訪問數據庫的DAO層,以及開關模式的動態數據源,便於流量在Oracle和MySQL之間快速切換,在確保流量切換到MySQL之後,

數據還能夠反向向Oracle同步,保證數據一致性。

去Oracle的準備工作:按域拆分

為了順利完成去Oracle工作,陸金所在2016年到2018年期間進行了數據庫的按域拆分。據王英傑介紹,按域拆分的主要目的有三個,分別是:

  • 細粒度拆分數據庫、分片化,實現數據庫容量的水平擴展;

  • 應用解耦、服務化,讓應用訪問數據庫的調用更加清晰和規範;

  • 嚴禁應用跨域訪問數據庫,嚴禁數據庫之間產生數據交互,從業務角度呈現出一個更加完善的數據庫架構。

圖片

整個按域拆分過程中比較大的難點是大事務拆分和多表關聯複雜查詢。王英傑表示:“單庫上原有的大事務拆分後是通過應用層的分佈式事務機制在多庫上實現,而單庫上原有的多表關聯複雜查詢在拆分之後,是在應用層實現或在特殊場景中通過分佈式存儲引擎來支持。”

據了解,陸金所的數據庫按域拆分主要有四個關鍵階段:

  • 應用改造實現邏輯拆分:
    • 按表為粒度對大庫的數據庫對象進行梳理,把每張表歸屬於不同的應用域。
    • 在應用層根據梳理的結果對操作表的代碼進行改造,包括:
      • 拆分複雜的大查詢
      • 拆分龐大的事務
      • 操作表的代碼全部封裝在屬主應用的代碼中,非屬主應用無法直接操作表,通過調用服務接口的方式實現非常規範的應用訪問數據庫的調用鏈。
  • 邏輯拆分完成後,以數據庫的角度對應用改造的結果進行驗證:
    • 在同一個物理庫,使用邏輯schema的方式對數據庫對象的授權進行調整,驗證應用改造符合預期。
  • 數據庫遷移和實時同步:
    • 邏輯層拆分驗證完成後,通過實時同步把待拆分的數據庫對象實時同步到另外一個物理庫。上述所有改造步驟對應用層無感知。
  • 物理拆分和切換流量:
    • 源端和目標端保持實時同步後,在某個時間點推送配置並切換流量。整個過程最好有一套完善的自動化運維確保各個細節工作的無縫落地。流量切換操作,必須確保可以隨時前滾和回滾。

去Oracle的具體實踐

講完去Oracle的方案和準備工作之後,接下來我們具體講講詳細的替代過程。

去Oracle前後的數據庫架構差異

在去Oracle之前,陸金所全站的金融OLTP業務場景都是由Oracle支撐的,而完成之後,全部的金融場景是由MySQL支撐,部分Oracle上的大事務也被優化成為了MySQL上的小事務。

值得注意的是,去Oracle完成之後,陸金所中85%的數據庫查詢請求都是簡單的單表查詢,15%的關聯查詢都是比較簡單的關聯查詢,而原先Oracle數據庫中包含的複雜業務邏輯的多表關聯也做了以下的優化:

  • 被拆解成簡單查詢,在代碼層實現部分複雜的關聯邏輯;

  • 通過陸金所的數據總線平台,把數據實時同步到Elasticsearch裡,在Elasticsearch裡實現複雜且高效的關聯搜索;

  • 部分在Oracle讀庫上支撐的複雜業務邏輯查詢(支持業務監控和實時對賬等),通過數據總線平台同步到TiDB裡,在TiDB裡實現複雜的關聯查詢。

具體遷移過程

在真正去Oracle之前,陸金所先把MySQL作為對外提供服務的Oracle備庫掛在了Oracle後面。與傳統備庫不同,從Oracle到MySQL的異構數據庫備庫,不需要實例級的數據同步,可以按表為粒度進行數據的實時同步。

陸金所整個去Oracle實踐主要是依賴於其內部的去Oracle平台來落地的,在去Oracle平台上勾選需要同步的Oracle表,數據遷移工作就會自動完成。據介紹,陸金所智能化去O平台橫跨代碼改造到上線切換以及後期運維的全流程自動化保障和落地,其中主要包含的工具有:

  • Oracle SQL代碼自動轉MySQL SQL代碼工具

  • O to M數據字典轉化和管理工具

  • O to M數據自動遷移和雙寫工具

  • 去O流量一鍵切換

  • 跨機房一鍵切換去O自愈工具

據王英傑介紹,在陸金所去Oracle平台中完成數據遷移的主要過程如下:

  • 首先去Oracle平台會解析Oracle表結構,並轉化成MySQL表結構部署到MySQL上。之後,Oracle有任何數據字典變更,去Oracle平台都會對MySQL進行同步;

  • 將Oracle的數據全量同步至MySQL,因為Oracle庫還在對外提供服務,所以會記錄同步開始時間點,發生過變更的Oracle數據;

  • 在全量同步完成後,解析Oracle的redo log,把同步期間發生過變更的數據進行增量追平;

  • 增量追平後,比對Oracle和MySQL每一筆記錄和每一個字段的數據一致性,因為Oracle還處在不斷更新中,去Oracle平台會使用增量補償重試的方式不斷對記錄進行一致性校驗;

  • 當Oracle和MySQL數據完全追平且校驗一致後,去Oracle平台會開始嘗試解析MySQL binlog,建立從MySQL到Oracle的數據同步通道;

  • 因為Oracle to MySQL和MySQL to Oracle的雙向數據同步鏈路都會被自動建立起來,為了防止數據回流,必須區分好是應用層寫入的數據還是同步框架寫入的數據,確保一份數據無論在Oracle還是MySQL提交,都會同步到對端,且僅寫入一次。

據悉,陸金所核心業務去Oracle的時間大約是6個月,在這6個月中會出現應用中部分錶讀寫流量在Oracle、部分錶讀寫在MySQL的中間狀態,而這時陸金所的業務系統還會有大量的功能版本不斷上線,如何平衡業務系統的版本上線和去Oracle的數據遷移呢?

王英傑表示:“為了降低業務功能改造和去Oracle架構改造之間高頻交叉上線的風險,陸金所自研的Bettle系統實現了業務版本和去Oracle版本並行推進,且互相透明的重要功能。”

圖片

遷移完成之後,陸金所每3個月會通過數據庫一鍵切換平台把全站數據庫寫庫更換一次,一鍵切換平台在180秒完成全站數百套數據庫的跨機房切換後,數千張表的O和M雙寫同步會自動重建,並確保數據一致性和完整性。 (陸金所跨機房切換的具體實踐可以參看InfoQ之前發布的文章《陸金所機房一鍵切換平台建設》)

圖片

經驗總結

作為去Oracle的實踐者,王英傑也分享了他在整個實踐過程中獲得的感悟和經驗,希望能對之後想要去Oracle的企業有所幫助。

  • 對於嚴苛的金融系統來說,去Oracle是個非常複雜的系統工程,涉及到開發、測試、架構和DBA等幾乎全部技術部門的通力合作;

  • 整個去Oracle改造過程需要在各個階段都總結出一套完善的方法論,確保各個細節改造工作能穩妥落地;

  • 需要有一套完善的去Oracle工具平台來落地整套方法論,讓開發、測試和DBA在上面開展去Oracle工作,通過工具無縫銜接好這些團隊在去Oracle改造中的協同工作,通過工具來確保從代碼改造、到壓測、到數據遷移、到流量切換等橫跨多個團隊、長周期的工作風險可控,效果如期。

嘉賓介紹:

王英傑,陸金所數據架構團隊負責人,負責陸金所全站存儲引擎運營和智能化工具研發。