W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
明明架構(gòu)要求高可用,為何系統(tǒng)中還會存在單點?
回答:單點master的設(shè)計,會大大簡化系統(tǒng)設(shè)計,何況有時候避免不了單點
典型互聯(lián)網(wǎng)高可用架構(gòu):
(1)客戶端層,這一層是瀏覽器或者APP,第一步先訪問DNS-server,由域名拿到nginx的外網(wǎng)IP(5)數(shù)據(jù)層,包含cache和db,典型的是主從復(fù)制讀寫分離的db架構(gòu)
在這個互聯(lián)網(wǎng)架構(gòu)中,站點層、服務(wù)層、數(shù)據(jù)庫的從庫都可以通過冗余的方式來保證高可用,但至少
(1)nginx層是一個潛在的單點
GFS的系統(tǒng)架構(gòu)里主要有這么幾種角色:
(1)client,就是發(fā)起文件讀寫的調(diào)用端(3)chunk-server,實際存儲文件額服務(wù)器
這個系統(tǒng)里,master也是一個單點的服務(wù),Map-reduce系統(tǒng)里也有類似的全局協(xié)調(diào)的master單點角色。
單點系統(tǒng)一般來說存在兩個很大的問題:
(1)非高可用:既然是單點,master一旦發(fā)生故障,服務(wù)就會受到影響shadow-master是一種很常見的解決單點高可用問題的技術(shù)方案。
“影子master”,顧名思義,服務(wù)正常時,它只是單點master的一個影子,在master出現(xiàn)故障時,shadow-master會自動變成master,繼續(xù)提供服務(wù)。
shadow-master它能夠解決高可用的問題,并且故障的轉(zhuǎn)移是自動的,不需要人工介入,但不足是它使服務(wù)資源的利用率降為了50%,業(yè)內(nèi)經(jīng)常使用keepalived+vip的方式實現(xiàn)這類單點的高可用。
以GFS的master為例,master正常時:
(1)client會連接正常的master,shadow-master不對外提供服務(wù)
當(dāng)發(fā)現(xiàn)master異常時:
shadow-master會自動頂上成為master,虛IP機(jī)制可以保證這個過程對調(diào)用方是透明的
傳統(tǒng)的一主多從,讀寫分離的db架構(gòu),只能保證讀庫的高可用,是無法保證寫庫的高可用的,要想保證寫庫的高可用,也可以使用上述的shadow-master機(jī)制:
(1)兩個主庫設(shè)置相互同步的雙主模式
(2)平時只有一個主庫提供服務(wù),言下之意,shadow-master不會往master同步數(shù)據(jù)(3)異常時,虛IP漂移到另一個主庫,shadow-master變成主庫繼續(xù)提供服務(wù)
需要說明的是,由于數(shù)據(jù)庫的特殊性,數(shù)據(jù)同步需要時延,如果數(shù)據(jù)還沒有同步完成,流量就切到了shadow-master,可能引起小部分?jǐn)?shù)據(jù)的不一致。
既然知道單點存在性能上限,單點的性能(例如GFS中的master)有可能成為系統(tǒng)的瓶頸,那么,減少與單點的交互,便成了存在單點的系統(tǒng)優(yōu)化的核心方向。
怎么來減少與單點的交互,這里提兩種常見的方法。
批量寫
批量寫是一種常見的提升單點性能的方式。
例如一個利用數(shù)據(jù)庫寫單點生成做“ID生成器”的例子:
(1)業(yè)務(wù)方需要ID
(2)利用數(shù)據(jù)庫寫單點的auto increament id來生成和返回ID
這是一個很常見的例子,很多公司也就是這么生成ID的,它利用了數(shù)據(jù)庫寫單點的特性,方便快捷,無額外開發(fā)成本,是一個非常帥氣的方案。
潛在的問題是:生成ID的并發(fā)上限,取決于單點數(shù)據(jù)庫的寫性能上限。
如何提升性能呢?批量寫
(3)服務(wù)直接返回100個id中的1個,100個分配完,再訪問數(shù)據(jù)庫
這樣一來,每分配100個才會寫數(shù)據(jù)庫一次,分配id的性能可以認(rèn)為提升了100倍。
客戶端緩存
客戶端緩存也是一種降低與單點交互次數(shù),提升系統(tǒng)整體性能的方法。
還是以GFS文件系統(tǒng)為例:
無論怎么批量寫,客戶端緩存,單點畢竟是單機(jī),還是有性能上限的。
想方設(shè)法水平擴(kuò)展,消除系統(tǒng)單點,理論上才能夠無限的提升系統(tǒng)系統(tǒng)。
以nginx為例,如何來進(jìn)行水平擴(kuò)展呢?
今天的話題就討論到這里,內(nèi)容很多,占用大家寶貴的時間深表內(nèi)疚,估計大部分都記不住,至少記住這幾個點吧:
(1)單點系統(tǒng)存在的問題:可用性問題,性能瓶頸問題(4)水平擴(kuò)展也是提升單點系統(tǒng)性能的好方案
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: