高級架構(gòu)師如何僅用6步,就為企業(yè)量身打造一套高可用系統(tǒng)?
對于用戶量較大的系統(tǒng)以及系統(tǒng)穩(wěn)定性要求極高的企業(yè),每一次計劃外的系統(tǒng)停機都是嚴重事故。想要降低計劃外系統(tǒng)停機的概率,有兩個關(guān)鍵動作,一是執(zhí)行計劃內(nèi)維護來及時更新硬件或者軟件,另外一個有效的動作就是搭建一套高可用系統(tǒng)來降低系統(tǒng)意外停機的概率。
隨著企業(yè)用戶對集群方案需求的多樣性提升、系統(tǒng)環(huán)境的復雜度增加,為了進一步滿足企業(yè)用戶的需求,帆軟全新web集群方案就顯得很重要。截止今天已經(jīng)有140余家帆軟客戶選擇使用web集群方案來提升系統(tǒng)的高可用性。
既然上面提到我們可以滿足客戶多樣性、復雜性的需求,今天就給大家介紹一下如何選擇集群方案,來量身打造一套適合企業(yè)的高可用性系統(tǒng)。
什么是集群和分布式?
想要深入了解一個東西,概念和基礎(chǔ)知識很重要,我給你用大白話講明白。
小飯店原來只有一個廚師,切菜洗菜備料炒菜全干。后來客人多了,廚房一個廚師忙不過來,又請了個廚師,兩個廚師都能炒一樣的菜,兩個廚師的關(guān)系是集群。
為了讓廚師專心炒菜,把菜做到極致,再請了個配菜師負責切菜,備菜,備料 ... 廚師和配菜師的關(guān)系是分布式。
一個配菜師也忙不過來了,又請了個配菜師,兩個配菜師關(guān)系是集群。
一個配菜師因故請假了,但是其余的配菜師還是該啥就干啥,只是沒請假的配菜師任務(wù)均勻的加量了,但他們的任務(wù)和職責是不變的,這是集群。
- 集群:多個人在一起作同樣的事
- 分布式 :多個人在一起作不同的事


正式介紹之前,先說一點基礎(chǔ)知識:帆軟的web集群架構(gòu)負載均衡+狀態(tài)服務(wù)器+文件服務(wù)器/節(jié)點間同步+外置數(shù)據(jù)庫,支持的組件比較多樣化,我們可以針對不同場景進行選擇和搭配。

第一步:選擇操作系統(tǒng)
帆軟web集群方案對Windows操作系統(tǒng)、Linux操作系統(tǒng)均能支持,如果企業(yè)還在考慮選擇什么樣的操作系統(tǒng),這里推薦大家選擇Linux操作系統(tǒng),有兩個關(guān)鍵:性能和穩(wěn)定性。
- Linux系統(tǒng)處理多線程比Windows要好的多,而且不像Windows系統(tǒng)必備圖形化操作界面,因此占用資源會少一些,性能也更好;
- Linux系統(tǒng)穩(wěn)定性很好,大部分硬件和配置更新無需重啟;相對Windows系統(tǒng),宕機機率更低,常常一年都不用關(guān)機;
但是影響我們最終哪種系統(tǒng)的因素,還有一個最關(guān)鍵的點——運維能力,如果公司不具備Linux系統(tǒng)的運維能力,只能選擇Windows系統(tǒng)了。
第二步:選擇負載均衡
負載均衡作為集群的入口,起到請求分發(fā)和節(jié)點健康檢查的作用。不管是軟件負載均衡,還是硬件負載均衡,核心作用都是一樣的。
硬件負載均衡穩(wěn)定,性能也較好,但是采購和維護成本都比較高。軟件負載均衡性價比高,像我們常用的Nginx、Traefik都是開源免費的,許多超大型的企業(yè)也在使用,可用性得到了有效的驗證。
帆軟官方驗證過的軟件負載均衡有兩種:Treafik和Nginx,Linux系統(tǒng)推薦選用Nginx作為負載均衡,Windows系統(tǒng)推薦選用Treafik。如果希望負載均衡層面也具備高可用性,避免單點故障,可以再做一個Keepalived+Nginx方案,確保一個Nginx服務(wù)宕機或異常后,有備用的Nginx服務(wù)可以接手。
第三步:選擇Redis方案
帆軟集群方案里,狀態(tài)服務(wù)器是用Redis實現(xiàn)的,常用的Redis方案有Redis單機、Redis集群、Redis哨兵三種。Redis單機方案簡單易部署,運維成本低。但是如果希望Redis服務(wù)也達到高可用性,就需要選擇Redis集群或者Redis哨兵方案了。
Redis集群是官方推薦方案,既能夠保證Redis服務(wù)的高可用性,又因為數(shù)據(jù)是分區(qū)存儲在不同的主節(jié)點上,可以大幅度提升Redis服務(wù)的性能支撐。不足之處就是運維和資源成本相對Redis單機要高一些。
Redis哨兵模式是通過哨兵節(jié)點來實現(xiàn)自動化監(jiān)控Redis主節(jié)點健康狀態(tài),并提供故障恢復功能。最常用的Redis哨兵方案為1主2從3哨兵,能夠做到較好的高可用。缺點是不能支持高并發(fā),能提供寫入功能的也就只有主節(jié)點。
注:FineReport和FineBI產(chǎn)品需要安裝Redis哨兵插件來對接Redis哨兵服務(wù),插件還在測試階段,預計2020年2月份正式上線。
第四步:選擇文件一致性方案
集群一致性里很關(guān)鍵的點就是文件一致性,帆軟提供了多種方案來保障節(jié)點間資源文件的一致性。我們可以基于運維能力,實際場景來進行選擇。
- 節(jié)點間同步
節(jié)點間同步是保障節(jié)點間文件一致性的最簡方案。無須開啟文件服務(wù)器,無須做任何配置即可使用。而且各節(jié)點均存儲文件,具備高可用性。不過節(jié)點間同步方案建議僅在兩節(jié)點時選用,因為當節(jié)點增多時,節(jié)點間通信和同步效率會逐漸變低。
- 文件服務(wù)器
當使用文件服務(wù)器時,各個節(jié)點都從同一個文件服務(wù)器讀取資源文件,不涉及到節(jié)點間同步,因此各個節(jié)點讀取的資源文件永遠會保持一致性,節(jié)點數(shù)較多的場景下建議使用文件服務(wù)器。常用的幾種文件服務(wù)器:FTP、SFTP、HDFS、NAS、NFS。
第五步:選擇緩存模式
2019年12月更新的jar包里增加了緩存模式,當我們開啟集群時,可以選擇主動緩存、被動緩存、關(guān)閉緩存。主動緩存就是直接緩存所有資源文件,被動緩存是對訪問到的資源文件進行緩存,開啟緩存可以提高文件讀寫的性能。
而且配合文件服務(wù)器使用時,可以提升集群的高可用性,因為當文件服務(wù)器宕機時,系統(tǒng)可以繼續(xù)從緩存文件中讀取資源。
第六步:選擇外置數(shù)據(jù)庫

外置數(shù)據(jù)庫在集群方案里也是很關(guān)鍵的點,由于各個節(jié)點均使用同一個外置數(shù)據(jù)庫,因此節(jié)點間的配置可以保持一致性。FineReport和FineBI對常用的數(shù)據(jù)庫都可以支持,包括MySQL、SqlServer、Oracle、DB2等。
若公司已有數(shù)據(jù)庫服務(wù),數(shù)據(jù)庫版本符合帆軟的要求則可直接使用,如果想要保證數(shù)據(jù)庫的高可用性,還可以采用主從的數(shù)據(jù)庫部署方案。
讀完上面的內(nèi)容,相信你已經(jīng)知道了如何選擇一套符合自己企業(yè)的集群方案了。不過值得說明的是,世上沒有100%高可用的方案,不過我們通過選用完備的高可用方案,加上對系統(tǒng)定期運維檢查和更新,是可以讓系統(tǒng)的高可用性盡可能地接近100%。