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