2024-03-12
如果我們調研一個客戶的業(yè)務操作人員,讓他談談對資金系統(tǒng)的可用性的期望?客戶大概率的回答可能是:“我期望這個系統(tǒng)隨時都可用,不要出任何問題”,直覺上我們都期望一個系統(tǒng)永遠在線,不出問題。那么從工程的角度如何對高可用(High availability,即 HA)去科學的定義呢?業(yè)界一般用幾個九來衡量系統(tǒng)的可用性,如下:
通過具體的數(shù)據(jù)量化后,我們對所謂的“高可用”的預期就更清晰化了,對照這個表格,我們就可以來分析,我們的業(yè)務能接受一天里系統(tǒng)能夠有多久時間,處于不可用的狀態(tài)。
一、資金管理系統(tǒng)場景分析
資金系統(tǒng)的常規(guī)業(yè)務架構
高可用的量化,和企業(yè)對資金系統(tǒng)的可用性的期待,對構建合適的系統(tǒng)架構非常有必要,現(xiàn)實中往往會有兩種不合理的現(xiàn)象:
● 企業(yè)投入大量軟、硬件資源,構建高可用的系統(tǒng),但是無論用戶數(shù)、還是業(yè)務量都不需要這種配置,浪費資源。
● 部分企業(yè)的IT負責人對高可用架構的難度和投入認識不足,軟、硬件的投入完全無法支撐對系統(tǒng)的可用性期待。
二、如何設計高可用
1、架構分析
我們都熟悉一句俗話叫著“不能把雞蛋放到同一個籃子里”,這個也道出了高可用設計的一個真諦那就是【冗余】,但是光有【冗余】還是不夠,在高可用的架構設計里是存在“主備”的概念的,當“主”出現(xiàn)問題,“備”需要頂上,但是這個過程不能依賴人工,因為沒有人能夠時時刻刻去監(jiān)控機器是否正常,這個時候就需要設計【自動故障轉移】。簡要總結:【冗余,自動故障轉移】是高可用架構設計的需要解決的兩個核心要點。
那么一個系統(tǒng)的哪些部分需要去冗余呢?又如何去做自動故障轉移呢?這個就需要對系統(tǒng)的整體組成部分進行分析,拜特科技資金管理系統(tǒng)目前的整體結構大致如下圖,我們就結合這個示意圖,從整個請求鏈來分析如何進行實現(xiàn):
可以看到架構主要分以下幾層:
● 接入層:主要由 F5 硬件或 LVS 軟件來承載所有的流量入口;
● 反向代理層:Nginx,主要負責根據(jù) url 來分發(fā)流量,限流等;
● 網(wǎng)關:主要負責流控,風控,協(xié)議轉換等;
● 業(yè)務服務:完成核心業(yè)務微服務;
● 存儲層:也就是 DB,如 MySQL,Oracle 等;
● 中間件:ZK,ES,Redis,MQ 等。
如前所述,要實現(xiàn)整體架構的高可用,必須要實現(xiàn)每一層組件的高可用,接下來我們就來分別看一下每一層的組件都是如何實現(xiàn)高可用的。
2、接入層&反向代理層
接入層核心組件是:LVS、Nginx、keepalived ,通過虛擬IP技術,兩個 LVS 以主備的形式對外提供服務,注意 只有 master 在工作(即此時的 VIP 在 master 上生效),另外一個 backup 在 master 宕機之后會接管 master 的工作,另外LVS通過keepalived維護可以轉發(fā)的Nginx列表,從而也實現(xiàn)了Nginx的故障轉移。
3、微服務
微服務,我們以開源 dubbo 框架為例,來看下服務層的高可用是如何實現(xiàn)的。
微服務架構下,核心的角色包括:服務提供者、服務消費者、注冊中心,整體原理:首先 Provider(服務提供者)向 Registry(注冊中心,如 ZK 或 Nacos 等)注冊服務,然后 Consumer(服務消費者)向注冊中心訂閱和拉取 Provider 服務列表,獲取服務列表后,Consumer 就可以根據(jù)其負載均衡策略選擇其中一個 Provider 來向其發(fā)出請求,當其中某個 Provider 不可用(下線或者因為 GC 阻塞等)時,會被注冊中心及時監(jiān)聽(通過心跳機制)到,也會及時推送給 Consumer,這樣 Consumer 就能將其從可用的 Provider 列表中剔除,也就實現(xiàn)了故障的自動轉移,這個場景下注冊中心就起到了類似 keepalived 的作用。
4、數(shù)據(jù)庫
數(shù)據(jù)庫層面拜特科技的客戶使用的數(shù)據(jù)庫以Mysql,與Oracle為主,生產(chǎn)上我們常用的數(shù)據(jù)庫層高可用方案一般有如下幾種:
● 基于共享存儲的雙機熱備方案
基于存儲的雙機熱備方案是基于磁盤陣列的數(shù)據(jù)庫高可用方案,數(shù)據(jù)的安全性由磁盤陣列的容錯機制保障,在軟件存儲該方案部署維護簡單,數(shù)據(jù)庫服務切換、VIP切換以及磁盤資源的切換過程都由第三方軟件管理,用戶層面只維護一臺數(shù)據(jù)服務,數(shù)據(jù)也不需要再做同步。
● Mysql主從方案
近些年來,隨著開源軟件的發(fā)展,Mysql數(shù)據(jù)庫在企業(yè)級的應用也越來越廣泛,Mysql主從復制方案也越來越多的被企業(yè)采用。Mysql主從方案中Master數(shù)據(jù)庫的改變會通過binlog日志傳到slave數(shù)據(jù)庫,slave數(shù)據(jù)庫通過執(zhí)行Binlog與主數(shù)據(jù)庫數(shù)據(jù)同步,當Master出現(xiàn)故障時,可以自動或者手動通過keepalived把VIP切換到Slave,原來的Slave會變成新的Master,并對外提供服務,待原Master修復后重新恢復同步。
● Oracle RAC集群方案
針對企業(yè)資金系統(tǒng)應用,Oracle RAC集群方案是大型集團客戶采用較多的數(shù)據(jù)庫高可用方案,數(shù)據(jù)保存在磁盤陣列上,通過磁盤陣列冗余和校驗保障數(shù)據(jù)高可用,數(shù)據(jù)庫多個實例節(jié)點可以同時訪問磁盤陣列,客戶端可以連接任意一個實例節(jié)點,存取數(shù)據(jù),可以實現(xiàn)數(shù)據(jù)庫負載均衡。Oracle Dataguard組件可以通過日志把陣列上數(shù)據(jù)庫同步到遠程Standby數(shù)據(jù)庫,實現(xiàn)異地數(shù)據(jù)容災。
三、客戶案例
1、微服務架構
某電氣集團,中國工業(yè)制造業(yè)的領軍品牌,歷史至少可以追溯到1902年,創(chuàng)造了中國與世界眾多第一。榮獲中國工業(yè)領域最高獎項—中國工業(yè)大獎,入選《全球制造500強》、《財富》中國500強 。入選《全球制造500強》、《財富》中國500強 ,2021年ENR全球最大250強國際承包商排名全球第51位 ,下圖是該客戶的司庫解決方案中系統(tǒng)部署整體架構圖。
我們?yōu)樵摽蛻艏軜嫷募夹g方案充分結合當前主流技術架構,從接入層、業(yè)務邏輯層、數(shù)據(jù)庫、中間件各層構建高可用、高性能架構,為企業(yè)的資金業(yè)務開展構建了堅實的信息化地基。
2、同城雙活
某銀行,開放銀行云財資系統(tǒng)同城雙活架構。
技術架構—同城雙活架構
技術架構—部署方案在該案例中,我們通過微服務、分布式數(shù)據(jù)庫、中間件集群,實現(xiàn)了同城雙機房雙活金融級別高可用架構。
四、安全防護
以上我們給出的各種形式的高可用架構,前提都是建立在系統(tǒng)正常運行的基礎上的,但是我們都知道現(xiàn)在整體上網(wǎng)絡環(huán)境并不安全,例如:2022年8月28日至29日,某知名軟件廠商旗下產(chǎn)品大面積遭受勒索病毒攻擊,大量用戶計算機文件被.locked后綴的勒索病毒加密。被勒索后,需要支付0.2個比特幣。因此安全性防護作為系統(tǒng)高可用的一個容易忽視的點,同樣不能掉以輕心,為此我們針對拜特科技資金系統(tǒng)的特性制定了以下安全性防護策略供我們的客戶來參考實施。
1、標準化:
● windows系統(tǒng)一定要有殺毒軟件,并定時更新病毒庫;
● 客戶服務器不下載不明軟件;
● 除公司服務端口外,屏蔽不需要端口;
● 公司統(tǒng)一提供標準中間件產(chǎn)品包(包括Tomcat、Mysql、FTP、SFTP、Redis、Nginx);
● 有外網(wǎng)訪問的客戶必須使用服務器證書。
2、建議部分:
● 數(shù)據(jù)庫、應用建議安裝到Linux操作系統(tǒng),除銀行前置機;
● 建議客戶有專門安全運維人員,定時做安全檢查,更新病毒庫等;
● 客戶推薦配置一定要有防火墻 。
3、底線操作:
● 數(shù)據(jù)庫一定要有備份,并且一定要有異機備份(離線備份或不同操作系統(tǒng)數(shù)據(jù)備份) 建議每天備份一次;
● 各產(chǎn)品線備份注意T2產(chǎn)品可能問題及改進措施數(shù)據(jù)安全:數(shù)據(jù)庫,附件(標準化推薦)、回單(增量備份);
● 銀行接口可能問題及改進措施 數(shù)據(jù)安全:日志數(shù)據(jù)(備份一個月,增量)。
本文簡要的介紹了高可用架構在資金管理系統(tǒng)建設的落地,通過以上的分析希望能夠對需要上線資金管理系統(tǒng)的客戶有一定的指導作用,當今新技術層出不窮幾乎到了“亂花漸欲迷人眼”的地步,那么在高可用這塊,我們要如何去選擇呢?我總結了幾個關鍵字 “簡單”、“適用”、“可演進”,高可用架構的設計不是越高級越先進越好,重點結合自己企業(yè)的實際情況,選擇對的,而不是單純的貴的。
最后,歡迎大家針對系統(tǒng)的安全性,可用性等相關問題跟我們探討交流,一起讓我們的資金系統(tǒng)更高效、更安全、更穩(wěn)定。