導語:隨著業務模型的不斷變化使運維難度越來越大,用友IT內部採用任務排程中心XXL-JOB和配置管理中心Nacos來實現公司IT分散式任務排程和微服務開發。但XXL-JOB和Nacos叢集數量的增多又使其支撐系統MySQL難以招架。
為了尋找一款既能提供高可用又能統一管理叢集的資料庫,降低運維壓力,用友IT內部開始了資料庫選型的探索與實踐。
以下為用友DBA的自述。
業務面臨挑戰
隨著公司的發展,人員數量及IT系統的規模不斷增長,日常的運維管理工作需要更多的投入,因此不得不引入一些自動化工具來助力運維管理,考慮到這些需求,我們引入了排程平臺和配置管理中心來實現公司IT運維的標準化和自動化工作。
目前,公司IT團隊任務排程平臺部分採用XXL-JOB,其核心設計目標是開發迅速、學習簡單、輕量級、易擴充套件,正是基於這些因素。
同時,為了解決團隊內部配置管理和服務註冊的問題,我們又引入了Nacos作為註冊中心和配置管理中心,透過Nacos,一方面可以做服務發現和服務註冊,另一方面可以使得配置標準化、格式統一化,當配置資訊發生變動時,修改實時生效,無需重啟伺服器就能夠自動感知相應的變化,並將新的變化統一傳送到相應程式上,快速響應變化。使用配置中心後只需要相關人員在配置中心動態去調整引數,就基本上可以實時或準實時去調整對應的業務。另外,透過審計功能還可以追溯問題。
但隨著XXL-JOB和Nacos叢集數量的增多,給我們帶來了很多其他煩惱。這些叢集自身的執行維護也需要投入人力,同時這些系統都需要資料庫來支撐,而我們使用的是單體資料庫MySQL,一方面會導致MySQL例項數量增多,另一方面,MySQL例項無法提供HA高可用。當例項出現故障的時候,整個排程平臺或配置管理中心就無法使用。如果要繼續為MySQL建立高可用叢集,管理成本和硬體成本都會非常高。
因此,我們想尋找一款既能提供高可用,又能統一管理叢集的資料庫,降低運維壓力,減少運維成本。
技術選型與落地效果
在考察了目前市場上的各類資料庫後,我們選擇了兩款分散式資料庫作為候選,兩款資料庫都原生提供了高可用能力,在節點出現問題的時候,可以自動切換,並且業務不需要做任何改造。
其中一款資料庫是 OceanBase,由於其提供多租戶能力,因此我們最終選擇了 OceanBase 作為排程中心和配置管理中心的資料庫。利用這種多租戶能力,我們可以將多個平臺的資料庫放在一套 OceanBase 叢集中。大幅減少運維多套資料庫所帶來的工作量,同時租戶的資源可以靈活配置,在某些叢集業務大量增長時,可快速實現租戶的擴容。
除了多租戶能力外,我們透過閱讀官方文件、瀏覽 OceanBase 問答社群以及與原廠工程師交流,並上手測試後,發現 OceanBase 還提供了以下四個關鍵能力。
高擴充套件
在我們使用MySQL時,其效能會隨著資料量的不斷增大而降低,導致平臺變卡頓。而 OceanBase 這類分散式資料庫,提供線性的擴充套件能力,在資料量增大之後,可透過增加伺服器達到效能的線性擴充套件。
高可用
OceanBase 分散式資料庫原生具備高可用能力,透過Paxos協議實現分割槽級別的高可用,在少數節點出現故障之後,依然能夠提供服務,不需要再為資料庫補充其他元件來實現高可用及自動故障轉移。
高壓縮率
基於 OceanBase 的LSM-Tree資料組織形式,全量資料=基線資料+增量資料,因為基線資料是靜態資料,只有在下次合併的時候才會有變化,所以實現了很高的壓縮率。我們從MySQL遷移到 OceanBase 之後,磁碟佔用率只用到原先的1/3左右。
高相容性
目前 OceanBase 基本相容MySQL語法,因為Nacos以及XXL-JOB都需要在資料庫中執行SQL的初始化,除了 OceanBase 在建表時由於XXL-JOB及Nacos官方提供的SQL執行需要ENGINE=InnoDB語法,其他都沒有問題,解決方法很簡單,去掉ENGINE=InnoDB就可以了。2-1
決定採用 OceanBase 後,我們投入測試環境執行,效果如下。
XXL-JOB任務排程中心: 初始化SQL完成之後直接執行比較順利,相容很不錯,沒有發現任何異常。
Nacos配置管理中心: 初始化SQL完成之後,能夠順利執行。
總結
經過上述探索及測試,說明了 OceanBase 與XXL-JOB和Nacos的相容度、整合度很高,我們利用 OceanBase 的多租戶能力,靈活部署XXL-JOB任務排程及Nacos配置管理中心,實現了多租戶的管理能力,減少了大量MySQL例項,大大簡化了資料庫的運維工作。下圖是我們叢集現在的一個示意圖。
對於本次資料庫替換的初步嘗試,我們認為非常順利。基於 OceanBase 提供的Daas能力,可以更好地為XXL-JOB和Nacos這類依賴MySQL的工具提供服務,簡化我們資料庫的管理,讓我們能夠有更多的時間不斷最佳化其他工具。