可靠的系統是業務穩定、快速發展的基石,而系統高可用歷來是業務正常運行的有力保障。相比於其他金融機構,證券行業具有自身的特點和規律,基於證券行業複雜業務場景下的系統高可用建設既需要準確的技術選型,同時也需要滿足業務運行的客觀規律。
本文作者東方證券系統運行總部總監殷皓以東方證券的具體實踐為例,通過相關技術選型、業務場景應用詳細闡述了證券行業複雜業務場景系統高可用建設的具體實踐和發展思路。
一、證券行業的行業屬性
證券行業首先是處於證監會的監管之下,所以有很強的監管要求。證監會明確指出「市場發展越快,就越要嚴格監管」,因此證券行業面臨「依法監管、從嚴監管、全面監管」的監管環境。為了指導行業會員信息系統建設,證監會發布了大量信息技術管理辦法與行業標準,規定了業務連續性的具體要求,每年災備能力、演練次數要有具體的報告和指標,備份能力指標等,並且定期對這些內容進行巡視與審計。
除了行業監管之外,行業本身發展也為證券企業帶來了內部要求的壓力。隨著證券市場的規範化和創新步伐的加快,業務系統逐漸增加,以東方證券為例,現在每年都有50套以上新增的系統,這些新增的系統對運維能力提出了更高的安全要求和技術要求。因此擺在我們面前的重要問題,就是如何根據行業及自身特點,能夠更好的創建自身的高可用能力,進而滿足這些需求。
不同於其他行業的,證券行業的信息系統運維特點主要包括:
第一、較長的可變更窗口證券行業7x24小時不間斷運行的系統目前在逐漸演化和增加,但總體數量並不是很多,工作日休市期以及周末的48小時的存在,使得證券行業有一個較長的可變更窗口。
第二、測試頻繁並且習慣於用生產環境直接參測由於有了較長的變更窗口,對於業務的測試也就可以更加的頻繁,並且經常是將核心系統的主生產環境直接投入測試。各交易所也經常以通關、聯調的名義要求會員單位必須以生產環境進行新業務的測試驗證工作。主生產的參測導致了大量的回退操作,這些回退操作對高可用系統帶來了破壞性作用,運維人員疲於應對高可用系統的修復與重建工作,這對高可用系統的技術選型有非常大的影響性因素。以東方證券為例,每年高可用系統的重建達上百次,是銀行業的數倍。
第三、人員精簡隨著相關新技術的應用,運維已經從分散運營、到集中運營再到智慧運營,運維人員的學習主動性要求和成本越來越高,這也導致人員進一步精簡,每個崗位需要擔負的責任也更大。
二、高可用技術選型
基於以上的特點,在高可用技術選型上,也就需要更加慎重。我們從分析一般系統的基本架構入手,大部分系統可分解為接入層、應用層、數據層和硬體層。除數據層外大部分層次是無狀態信息的,高可用建設比較簡單,組件之間功能等價,無數據交換,冗餘部署即可解決大部分問題。數據層則不同,大部分系統在收束到數據層後,裡面儲存有狀態信息,必須採用專業的高可用技術才能保持業務的連續性。
從技術視角分類的話,我們認為數據層的高可用技術有可以分為四個流派。
首先是資料庫源生的日誌重放技術。由於資料庫的內部機制是先寫日誌再提交事務,可以通過將日誌傳到備份系統,主備兩邊同步或異步執行日誌內容,實現系統的高可用。採用這個方案的優點是功能由資料庫源生提供,準確度有保障,效率相對較高。缺點是不支持異構資料庫之間的高可用。不同的資料庫產品有針對自家產品的不同的實現方案,但是基本上都是同源同類的。
而在不同資料庫之間,就只能採取第三方方案來做了,這就是第二類流派日誌解析回放技術。比如英方軟體的i2Active,它的原理也是基於資料庫先寫日誌再提交事務機制,只是不可避免的有一個處理流程串在裡面存在的,首先是想辦法獲得日誌的,通過api接口抓日誌,再將二進位日誌解析成可讀取的字符,重新封裝成自己的格式,再分發出去,在目標端提交事務。
這種方案的優點就是支持異構資料庫,並且目標端選擇非常多,不僅可以入庫還可以做文件,或者直接對接消息中間件kafka等。缺點是準確性依賴廠商的日誌解析能力,長流程串導致效率一般。
第三種流派,則是通過第三方文件系統同步方案。在早期資料庫版本還沒有提供日誌重放功能時,硬體存儲複製是應用較多的的高可用方案,即將本機存儲空間通過硬體層傳輸過去。其局限性是會硬體綁定,並且投入非常高。
不過隨著相關軟體方案的出現,逐漸解決了這個問題,比如英方的i2COOPY,它就是模擬了硬體操作技術,通過在作業系統層安裝一個代理程序捕獲I/O操作,通過網絡將I/O操作傳輸出去實現與存儲複製類似的功能。它的優點主要是和應用無關,非常貼近於底層,可以同步一個庫,也可以同步一個文件;既可以做應用高可用也可以做資料庫高可用。
第四種方案則是像Hadoop大數據平臺、mpp架構數據倉庫、分布式newsql資料庫等系統,他們提供的是整體解決方案,並不是某一項具體技術,是由一大堆技術搭建起來的。優點是是自帶高可用功能,當然,也存在諸如體量大、成本高(無法用單套小系統去做分布式實踐)等缺點。
三、場景應用
每一種技術的選擇,都需要考慮到具體的應用場景。我們結合證券行業頻繁測試的背景將高可用場景分為:結構簡單但是由於數量多導致的複雜場景和由於多系統業務關聯導致的複雜場景兩大類。
前面我們從技術視角出發把高可用技術分為4類。現在我們站在運維的視角,把高可用技術重新分類為2類:需要維護和無需維護。如果把高可用比做一個大廈的話,那麼建造這個大廈就需要兩種基石。一種是「白石」,是透明的,需要進行維護,它的創建和運維都是需要初始化的,運行過程當中需要監控,應用系統的變更可能導致白石損壞;另一種是「黑石」,無需維護,比如說做文件系統複製,因為跟應用系統是無關的,搭建好之後應用系統的變更不會對其產生影響。
在搭建的過程中會有兩個基本原則:第一,選擇黑石、白石兩條腿走路。不管是文件系統複製還是資料庫複製,都有可能出現的問題,所以需要在建設過程中要選擇兩條腿走路;第二,業務需求優先。雖然白石越多需要維護的量就越大,黑石越多維護量越小,這個一定要優先滿足業務場景的需求。黑石場景的一個缺點是目標端是不可用的狀態,如果業務要求做讀寫分離,要去查詢一些數據,這時候白石、黑石比例要優先滿足業務要求,再去想怎麼在滿足業務前提下簡化體系和工作量。
黑石有什麼好處呢?黑石技術相對比較單一,我們可以統一管理,可以通過簡單平臺把300多套黑石方案進行監管。白石則不同,各種技術方案的具體實現差異極大,現在沒有什麼監控體系可以把多種白石技術合在一起進行統一運維。
舉一個多系統的複雜架構例子。場外交易平臺本身是一個大的主庫,同時承擔了帳戶、交易和經管,由於負載分流的需要,按功能拆分,把帳戶和交易剝離出來成為了2個獨立的子系統,同時要實時管控和分析,數據還要寫回經管庫做清算。
縱向來看,每一個子系統都有讀寫分離的要求,所以採用了資料庫同步的方案。橫向來看帳戶和交易還要將數據實時寫回到經管庫上,在經管庫上做實時報表和分析,經管庫自己還是要做讀寫分離的,這就是一個「五白一黑」組成的高可用架構。這套系統在證券行業主生產環境參測的背景下,每次參測後都要重建5套白石高可用。我們要對這種系統進行優化,降低它的複雜度。比如說因為交易和帳戶在經管庫上是有全量數據的,所以對其查詢負載是可以放在經管庫上去做。經過改造之後,原來的「五白一黑」的架構就變成了「三白三黑」的架構,這樣運維量就大大降低了。
這裡還有一個高可用系統建設衍生出的副產物,在高可用技術當中採用了黑石架構,它是一個不可讀不可寫的狀態,目標端資源是閒置浪費的狀態。因此要儘量減少資源浪費,就是可以把多個系統的黑石同步數據匯總到一臺存儲上的共用存儲空間,這有兩個場景:第一,測試數據快速交付。過去老的方法,比如說託管系統要測試要最新的數據,首先託管系統要等待備份窗口需數小時不等,備份本身2小時,在脫敏伺服器上恢復數據要2小時,脫敏要1小時,脫敏後數據再備份2小時,再把數據通過特殊網絡拷貝測試環境裡面去,恢復再要2小時。
基本上要交付一套測試數據,周期在7到8小時以上。新的方法是當開發提出要測試數據時,可以對已經存在的託管的黑石數據進行存儲快照,把它掛在脫敏伺服器上直接脫敏,脫敏之後可以通過存儲的卸載、掛載放到規定的測試機上,這樣就從七八個小時壓縮到了一個小時了;第二,這種架構也可以對接雲管平臺,在啟用災備時動態劃分資源,實現動態資源災備的作用。
四、大道至簡,衍化至繁
總體來說,高可用的運營轉型經歷了四個階段。第一階段是手工執行命令;第二階段是標準化,把一些常用的東西固化下來形式腳本;第三階段借用自動化運維平臺通過流程系統把前面做好的腳本串聯起來,實現一個工作自動化;第四階段目標則是實現運維的智能化。
自動化運維和智能運維的差別主要在決策形成機制方面。自動化運維一般是定時重複性的,或者流程驅動,事件驅動。運維動作的發起大多還是要依靠人。智能運維希望能減少人工幹預。為了實現智能化,東方證券已經在做基礎平臺的準備。建好基於zabbix的統一監控平臺和運維大數據分析平臺,這些平臺和前面的自動化運維平臺是基礎。
目前的自動化運維平臺更多是一個執行機構,統一監控平臺提供實時狀態信息,後面的運維大數據分析平臺提供歷史經驗、學習分析,這些平臺綜合在一起才能真正實現智能分析決策,並且真正實現向自動、智能演變的過程。
這裡引用老子在道德經中的一句話:「大道至簡,衍化至繁」,再複雜的體系也是由簡單系統堆砌起來的。所以,在規劃建設運維系統時一個有效的工作方法論是把複雜的事物進行分解、歸納、合併同類項,最後實現一個從簡到繁再到簡的變化過程。