數據庫國產化替代中的雙軌制運行機制
對于企業級核心系統而言,業務連續性要求是十分嚴格的。哪怕數據庫的性能再優秀,業務連續性能力不足也無法在核心業務中應用,在和我交流過的正在做國產數據庫替代的客戶那邊獲得的信息是,他們最為關心的并非性能,而是穩定性。一套系統只有穩定運行,才能讓使用者省心、放心。
從另外一個方面講,沒有不宕機的數據庫,數據庫系統從底層基礎設施到數據庫產品本身都無法確保100%的可用性。因此在國產數據庫替代工作中,高可用機制是十分必要的保障措施。而在數據庫國產化替代的特殊條件下,雙軌制運行又是數據庫國產化替代遷移工作中的重點。
如果從Oracle等國外商用數據庫直接遷移到國產數據庫,切換后Oracle數據庫直接下線,生產系統只使用國產數據庫,我們稱之為單軌制切換。而如果系統切換后,國產數據庫作為主系統,Oracle作為備系統,主系統的數據自動全量復制到備系統。當主系統故障時,可以快速切換到備系統,這種運行模式稱之為雙軌制運行模式。雙軌制運行機制是指主備系統非對稱的模式,主備分別由老系統和新系統承擔。
雙軌制運行模式可以首先由老系統作為主系統,新系統作為備系統,等新系統運行較為穩定后擇機將新系統切換為主系統,由老系統承擔備系統運行,數據復制流向也做反向切換。如果新系統運行過程中發現有嚴重問題,可以隨時快速切換回老系統,數據復制留下再次反轉。等新系統故障排除后,再進行回切工作。
當新系統運行已經十分穩定后,備系統由與新系統相同的數據庫替代,老系統的數據庫下線,由雙軌制運行切換到單軌制運行。新數據庫的備用系統可以在雙軌制運行之前完成建設,采用一老二新三套數據庫運行的架構,也可以在雙軌制轉單軌制的時候開始搭建新數據庫備庫,具體方案可以根據企業自己的IT規劃和技術要求來確定。一般情況下,雙軌制運行采用邏輯復制的方式,而單軌制運行的高可用機制采用物理復制的方式。
銀行、證券、能源等關鍵部門的關鍵業務系統的重要性極高,一旦出問題會產生極其嚴重的社會與 經濟影響,因此這些企業的核心系統升級與切換一般來說都十分小心。普通的單軌制運行機制下,在系統切換的前期發現一些嚴重問題還可以回退到老系統,一旦系統運行一段時間后,因為數據與應用的變化產生了一些不可逆的因素,很難比較順利地切換回老系統了。因此我們一般把單軌制運行的系統切換稱為“單程票”,是沒有回頭路可走的。
有些朋友可能質疑雙軌制機制的實施成本很高,是否有必要。其實哪怕測試再完整,復雜的核心業務系統中都可能存在一些一旦發生就不容易快速解決的BUG,如果你的業務無法承擔BUG引發的系統停運、性能不足等問題,那么你就必須考慮雙軌制模式作為過渡期的保障措施。雙軌制運行因為在運行初期階段不下線老系統,因此容錯能力較高,不容易出現因為新系統的數據庫存在一些前期未能測試出來的問題而導致系統故障無法修復,這對于保障核心業務系統的穩定過渡十分有著十分難關鍵的作用。
雙軌制運行機制在國產化替代中不僅僅可以解決數據庫的替代問題,還可以用在國產化硬件替代中發揮作用。一些關鍵業務系統可能不采用一步到位的模式,先替換數據庫,再替換服務器。比如先用X86環境的國產數據庫替換Oracle,雙軌制變單軌制時,主系統數據庫服務器繼續使用X86,備系統的數據庫和服務器都改為國產產品。等穩定運行一段時間后,將全國產生產環境切換為主系統,最后再去除X86服務器。
為了適應國內的核心業務系統遷移,目前的主流國產數據庫都對雙軌制運行機制提供了較好的支持。從數據雙向復制,SQL語法與數據庫對象的兼容性等方面都做了大量的適配,在國內也已經有了十分成功的應用。在設計雙軌制運行方案的時候,仍然需要根據應用系統的特點去做精心設計,因為采用邏輯復制,復制延時與應用特點,比如長事務等都有十分密切的關系,因此絕大多數系統在實現雙向復制的時候,都需要針對應用做一些改造,避免雙向復制的故障。測試的時候,也需要對雙向復制都做充分的測試。這是實施雙軌制運行時容易忽略的地方。
2016年,某電力企業在遷移人資系統的時候,就采用了雙軌制運行模式,在雙軌制運行1年后,徹底改為單軌制運行。作為一個系統的雙軌制運行,比起單一的數據庫而言,要復雜得多。因為除了數據庫要切換,操作系統、中間件等也要做切換,應用系統基于操作系統、中間件等的雙軌制改造也是改造工作中不可或缺的。當時的環境是從小型機+WEBLOGIC+Oracle切換到X86服務器+國產中間件+達夢數據庫。為適應雙軌制運行的應用改造花了大約三個月時間。