眾誠汽車保險股份有限公司(簡稱“眾誠保險”,下同)為了實現業務的高質量發展,毅然決定對核心數據庫進行 “換芯” ,從 Oracle 數據庫替換成國產數據庫 OceanBase ,而這場手術的“主刀團隊”正是中亦科技。
這場“換芯”不僅實現了40+業務系統的平滑過渡,更以兩地三中心架構打造了金融級容災標桿。今天,就讓我們一起解碼這場國產化替代的重要實踐!
一、測試環境壓測
在正式遷移之前,中亦團隊搭建了模擬真實業務場景的測試環境,對 OceanBase 進行全面壓測。
- 高并發讀寫測試,模擬大量用戶同時進行保單查詢、理賠申請等操作;
- 大數據量存儲測試,向數據庫中導入歷史積累的海量業務數據,測試其存儲性能和查詢效率;
- 復雜事務處理測試,模擬涉及多個業務表關聯的復雜業務流程,驗證事務的一致性和完整性。
通過壓測,收集到了 OceanBase 在不同負載下的性能指標,如響應時間、吞吐量等,為后續的參數調整和優化提供了數據依據。同時,與原 Oracle 數據庫在相同測試場景下的性能進行對比,進一步驗證了 OceanBase 在性能上的優勢和潛力。
二、準生產環境壓測
在測試環境壓測取得初步成功后,中亦團隊將 OceanBase 部署到準生產環境進行更貼近實際業務的壓測。準生產環境盡可能模擬生產環境的硬件配置、網絡架構和業務流量。在這個階段,不僅對數據庫本身進行壓測,還將相關應用系統接入,進行端到端的性能測試。通過準生產環境壓測,發現了一些在測試環境中未暴露的問題,如應用與數據庫之間的兼容性問題、部分復雜業務邏輯下數據庫資源消耗過大等。針對這些問題,及時進行了針對性的優化和調整,包括優化數據庫查詢語句、調整應用系統的連接池配置等,確保 OceanBase 在正式上線后能夠穩定運行。
三、應用改造與適配
由于 OceanBase 與 Oracle 在語法、特性等方面存在一定差異,為了確保應用系統能夠順利運行在新的數據庫上,進行了全面的應用改造與適配工作。首先,對應用代碼中涉及數據庫操作的部分進行梳理和分析,將 Oracle 特有的語法和函數替換為 OceanBase 支持的語法和函數。例如,在數據查詢語句中,將 Oracle 的 ROWNUM 關鍵字替換為 OceanBase 的 LIMIT 語法來實現分頁功能;對于日期處理函數,也根據 OceanBase 的語法進行相應調整。其次,對應用系統的配置文件進行修改,確保其能夠正確連接到 OceanBase 數據庫,并根據新數據庫的特性進行參數優化,如調整連接池的最大連接數、最小連接數等。此外,還對應用系統進行了全面的回歸測試,確保改造后的應用系統功能正常,性能不受影響。
OceanBase 采用分布式架構,數據庫集群的搭建是一項關鍵工作。在第一階段,采用了單機房三副本架構,這種架構能夠在單機房環境下提供較高的數據可靠性和讀寫性能。通過 OceanBase 的集群管理工具,將多個物理節點組成一個集群,每個數據分片在三個節點上保存副本,確保在某個節點出現故障時,數據仍然可用。在搭建過程中,嚴格按照 OceanBase 的最佳實踐進行配置,包括節點的硬件配置、網絡配置、存儲配置等。同時,對集群的各個節點進行監控和管理,確保集群的穩定性和性能。隨著業務的發展和對數據高可用性要求的進一步提高,第二階段完成了兩地三中心的建設。通過在不同地理位置的三個數據中心部署 OceanBase 集群,實現了數據的異地多活,極大地提高了系統的容災能力和業務連續性。
在兩地三中心架構下,通過智能路由和數據同步技術,確保用戶的請求能夠被合理地分配到各個數據中心,同時保證數據在不同數據中心之間的一致性。
五、數據庫參數調整優化
為了充分發揮 OceanBase 的性能優勢,對數據庫參數進行了細致的調整和優化。根據業務特點和壓測結果,對內存分配參數進行優化,合理調整系統內存、緩存內存等參數,確保數據庫在處理不同類型的業務時,都能夠高效地利用內存資源。
例如,對于讀密集型業務,適當增加緩存內存的比例,提高數據的讀取速度;對于寫密集型業務,優化內存分配,確保寫入操作的高效執行。同時,對 I/O 參數進行調整,根據存儲設備的性能,優化磁盤 I/O 調度策略,減少 I/O 等待時間。此外,還對事務相關參數進行優化,確保事務的并發處理能力和一致性。通過不斷地調整和優化參數,使 OceanBase 在各種業務場景下都能夠達到最佳性能狀態。
六、數據庫表結構設計
隨著業務數據的不斷增長,一些核心業務表的數據量達到了千萬甚至億級,對這些大表進行分區表改造成為提高性能的關鍵措施。根據業務特點和查詢需求,選擇合適的分區鍵,如按時間、業務類型等進行分區。例如,對于保單表,按照保單生效時間進行分區,將不同時間段的保單數據存儲在不同的分區中。這樣在進行數據查詢時,只需要訪問相關的分區,大大減少了數據掃描范圍,提高了查詢效率。同時,在進行數據插入和更新操作時,也能夠避免對整個大表的鎖爭用,提高了并發處理能力。為了進一步提高數據庫的性能和管理效率,采用了 TABLEGROUP 方式對相關表進行組織。將業務上緊密相關的表放在同一個 TABLEGROUP 中,這樣在進行數據操作時,可以減少磁盤 I/O 的隨機訪問,提高數據讀寫的效率。例如,將客戶信息表、客戶保單關系表等放在同一個 TABLEGROUP 中,當查詢客戶及其保單信息時,能夠通過一次 I/O 操作讀取多個相關表的數據,減少了 I/O 開銷。3、PRIMARY ZONE 修改為單 ZONE 架構在 OceanBase 的架構中,PRIMARY ZONE負責處理讀寫請求,為了優化性能和提高可用性,將 PRIMARY ZONE修改為單 ZONE 架構。在單 ZONE 架構下,所有的讀寫請求都集中在一個 ZONE 中處理,減少了跨 ZONE 的數據傳輸開銷,提高了讀寫性能。同時,通過合理配置副本數量和分布,確保在單 ZONE 出現故障時,數據仍然能夠通過其他 ZONE 的副本進行訪問,保證了系統的高可用性。
七、執行計劃綁定與復雜SQL改寫
在應用系統運行過程中,數據庫的執行計劃對于查詢性能至關重要。為了確保查詢語句始終能夠使用最優的執行計劃,采用了執行計劃綁定技術。通過對關鍵查詢語句進行分析和測試,獲取其最優執行計劃,并將其綁定到數據庫中。這樣,無論數據庫的統計信息如何變化,該查詢語句都將始終使用綁定的執行計劃,避免了因執行計劃變化而導致的性能波動。例如,對于一些涉及多表關聯的復雜查詢,通過執行計劃綁定,能夠確保在不同的業務負載下,都能夠高效地完成查詢操作。在原 Oracle 數據庫中,存在一些復雜的 SQL 語句,這些語句在遷移到 OceanBase 后,可能無法達到預期的性能。因此,對這些復雜 SQL 語句進行了改寫。通過優化查詢邏輯、減少子查詢嵌套、合理使用索引等方法,提高 SQL 語句的執行效率。例如,將一些多層嵌套的子查詢改寫成 JOIN 操作,減少了數據的重復掃描;對于一些頻繁查詢的字段,添加合適的索引,加快了數據的檢索速度。同時,在改寫過程中,充分考慮了 OceanBase 的特性和優化策略,確保改寫后的 SQL 語句能夠在新數據庫上高效運行。
八、遷移過程中的數據處理
在數據遷移過程中,使用同步工具進行數據遷移,并通過強大的數據比對功能,確保遷移前后數據的一致性。同步工具在遷移完成后,對源 Oracle 數據庫和目標 OceanBase 數據庫中的數據進行逐行比對,發現不一致的數據后,及時進行修復。例如,在數據比對過程中,發現由于數據類型轉換問題導致部分數值型數據在遷移后出現精度丟失的情況,通過同步工具的數據修復功能,對這些數據進行了重新轉換和修正,確保了數據的準確性。原 Oracle 數據庫中存在一些不規范的數據,如數據格式不一致、空值處理不當等,這些數據如果直接遷移到 OceanBase ,可能會影響后續的業務處理和數據分析。因此,在遷移之前,對源 Oracle 數據庫中的不規范數據進行了優化。通過編寫數據清洗腳本,對數據格式進行統一規范,如將日期格式統一為 “YYYY-MM-DD” ;對于空值,根據業務規則進行合理的填充或處理。同時,對一些不合理的索引和約束進行調整,確保數據的完整性和一致性。考慮到業務數據中可能存在生僻字,在遷移過程中對生僻字的存儲和處理進行了優化。確保 OceanBase 數據庫的字符集能夠支持所有可能出現的生僻字,避免因字符集不兼容導致生僻字存儲錯誤或顯示亂碼的問題。同時,對應用系統中涉及生僻字輸入、查詢和顯示的部分進行了測試和優化,確保生僻字在整個業務流程中能夠正確處理。通過一系列的技術工作和努力,中亦科技作為眾誠保險數據庫 “換芯” 項目的 “主治醫師”,憑借專業的技術能力、豐富的項目經驗以及高度的責任心,為眾誠保險核心數據庫的成功替換和 40 多個系統的順利上線提供了強有力的支持。這次合作不僅實現了眾誠保險技術架構的升級和優化,也為雙方在未來的業務發展和技術創新方面奠定了堅實的基礎。總之,眾誠保險核心數據庫的 “換芯” 工程是一次成功的技術變革,為企業的數字化轉型和可持續發展奠定了堅實的基礎。