深圳法大大網絡科技有限公司曾經是POLARDB最大的使用者,其資料庫架構演進也在阿裡雲上發生了多次疊代,并最終取得非常好的效果。本文中深圳法大大網絡科技有限公司副總裁兼CTO陳立清就為大家分享了法大大在業務演化過程中資料庫方面遇到的一些問題,在這些問題發生之後的解決方案,以及最終借助POLARDB的實施效果。

法大大業務背景及問題
傳統的合同寄送過程需要較長的時間,此外合同主體身份往往難以證明,并且大量的紙質合同導緻企業難以管理,需要持續地投入很多的人力物力。法大大成立于2014年,主要針對于紙質合同出現的問題設計了第三方的電子合同平台,利用實名身份認證、防篡改以及區塊鍊技術來解決合同當中安全以及合規性問題。
接下來從法大大整個業務流程來分享整個資料庫使用過程中遇到的問題。國家法規中要求給每個使用者主體身份頒發CA憑證,而頒發CA憑證的第一個條件就是為使用者做實名身份認證,認證方式包括姓名和身份證号碼比對以及銀行卡資訊比對以及人臉識别等,是以在這個過程中将會産生大量的使用者資料檔案。而因為需要為每個使用者頒發CA憑證,是以會産生大量的數字證書檔案。簽署電子合同的整個過程也需要記錄到資料庫中,是以也會形成大量合同簽署檔案的資料表。此外,當合同簽署完畢還存在一個使用周期,當使用完成之後需要進行歸檔,這也會形成大量的結構化資料檔案。
法大大的整個業務都是建構在阿裡雲上面的,使用了ECS、OSS、RDS等一系列的雲産品。法大大最開始用的資料庫是MySQL,而使用者基本上都是高頻使用電子合同的企業,他們對于業務的實時性、并發以及穩定性存在非常高的要求,而在此過程中,資料庫就會成為一個使用瓶頸。上層的業務架構采用分布式,中間服務采用了微服務,是以在業務層面基本上可以實作彈性擴充,而底層的資料庫部分則受限于MySQL 3TB容量的限制,這使得業務發展一度出現瓶頸。
在法大大發展過程中,在2016年1月份,當時的每天合同份數達到1萬份,到2016年11月份達到了每天10萬份,2017年5月份每天合同量就達到了100萬份,直到今天每天合同份數達到270萬份以上。目前,法大大有1000多家合作企業,累計簽署合同超過7億份。而在法大大的業務流程中,有這樣幾個點會出現大量檔案。第一個就是證書表檔案,這個檔案的表空間有783G,總空間達到815G。第二個是證據表,表空間達到240G,總空間将近500G。而合同簽署檔案表達到17.8億行,這是因為一份合同至少有兩方以上簽署。大檔案的出現就帶來了資料庫的挑戰。
在2015年,法大大資料庫團隊開始做讀寫分離,在杭州兩個可用區做了雙活架構,同時在資料庫上做了讀寫分離和執行個體庫拆分,在這階段解決了每天10萬份合同的壓力。到了每天需要簽署100萬份合同的時候,法大大已經在北上杭深出現了核心使用者群,是以在北京、杭州以及深圳做了三個資料中心,同時在三個資料中心中實作了雙活。此時問題也出現了,這種資料庫架構方式解決了分片區使用者在使用過程中出現的業務瓶頸,但是從資料庫角度而言,3T容量限制始終都會到來。這樣的資料庫架構也出現了諸多問題,因為有三個資料中心,那麼使用者在使用法大大官網的時候需要在多個資料源之間來回切換,這使得代碼更加複雜。此外,在兩個資料中心之間進行切換使得使用者體驗受到挑戰。這種方式不僅無法面對3TB容量上線,其實也無法滿足跨區域的要求。是以法大大想到了一個更好的解決方案——使用POLARDB。
法大大如何使用POLARDB解決業務資料困境
在新方案中,法大大在華北、華東和華南三個資料中心的資料先經過ETL清洗,之後進入POLARDB主節點中,同時利用POLARDB中隻讀資料庫的複制特性實作讀寫分離,在資料庫上層中增加了ES搜尋引擎。這樣就解決了三個資料中心的資料彙總問題。後續的使用者查詢以及報表應用也都集中在POLARDB上進行實作了,全國使用者都集中在杭州資料節點中完成。
具體而言,法大大技術團隊做了這樣幾件事情:使用Kafka消息隊列将幾個資料中心中的資料進行漫遊同步,保持資料中心的核心資料一緻性。為了保證資料彙總後主鍵的一緻性,在三個資料中心中做了主鍵隔離。第三點就是曆史上全部資料分成兩個部分:生産資料和歸檔資料。對于歸檔資料首先增量複制到POLARDB上來,将POLARDB作為底層的全局資料源。此外,在POLARDB上導入了ES做全文的搜尋引擎,利用多個隻讀節點來分片導入,加快索引的速度。在業務層面上,當全部資料彙總完成之後,對于資料相關報表分析都基于POLARDB實作。目前,法大大中還是MySQL和POLARDB并存的,因為在業務層面上還需要不斷調整和深入。在資料向POLARDB遷移的過程也是不斷深入的。目前,法大大在主要的合同簽署功能上還是用MySQL,未來将會向POLARDB遷移。目前對于MySQL主庫會實作定期清理,将這部分資料全部彙總到POLARDB資料庫裡面。
實施效果評價
從實施效果上來看,POLARDB能夠100%相容MySQL,對于法大大而言,可以通過DTS非常平滑地将資料從MySQL遷移到POLARDB,減小了工作量。此外,POLARDB自帶讀寫分離機制,并且提供了7*24小時的高可用,同時也節省了很多的成本。計算和存儲分離的架構設計解除了資料庫3T存儲容量的限制,使用者可以根據自身需要實作資料庫擴容的增長。并且POLARDB具有較強的并發高性能查詢能力,因為采用了讀寫分離的架構,支援多路應用伺服器并發通路,提供了企業級的高性能、高可用的能力,提高了查詢的性能。