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