天天看點

架構師速成8.3-可用性之分布式

分布式算是軟體界發展的一個裡程碑,它開辟一個新的軟體時代,其他的溢美之詞我就不再亂說了。

分布式按照我的觀點,應該分為有狀态和無狀态2種:

有狀态

分布式資料庫

分布式存儲

無狀态

分布式計算

分布式web系統

當然分布式盡量做成無狀态的分布式,但是存儲最終因為最終存儲的是有狀态的資料,是以不得不變的有狀态。當然web系統也可以是有狀态的,但是最好做成無狀态的,因為無狀态可擴充性更強,而有狀态必須維護和确定狀态和機器的對應關系,無謂增加了很多複雜性。例如:

無狀态的叢集,我随意增加或減少一台機器,對原有機器無任何影響。有狀态的,我就需要知道新增或減少的機器,應該配置設定哪些資料哪些資料。

我們先從簡單的無狀态分布式系統說起,分布式計算我就不再展開了,針對web系統如何架構為無狀态講解一下其中的關鍵:

web系統有狀态的原因是什麼?如果使用者都不需要登入,系統本身就是無狀态的,所有人的看到都是一緻的。但是使用者登入之後,你要一直顯示這個登入使用者的相關資料,導緻了系統變為有狀态。

如何解決這種有狀态呢?如果這種狀态可以作為資料每次通信時傳遞給web系統,那web系統就可以變為無狀态。這也是常見的有狀态變為無狀态系統的解決方案,例如web系統将有狀态的資料存儲在db。解決方案很簡單,就是cookie記錄使用者id。有人說使用者登入之後有好多資料,我cookie存不下,而且有安全問題,那就加一個無狀态的cache叢集,存儲所有的使用者資料。cookie的id來了之後就去cache拿一下所需的資料,針對這個有個專業的名詞叫做 share nothing architecture,sna架構。

有了無狀态的web系統,如果請求量增加,很easy,加機器就可以了。另外有些同學說加的機器怎樣感覺到,如果有機器當機,又是如何感覺到的,這個是負載均衡幹的事情,後面會單獨再講。

無狀态的講完了,那再講講有狀态的分布式,這個可能需要的篇幅比較多了,讓我再單開一章吧。

剛才查了一下,果真有人已經提出了有狀态和無狀态,呵呵,看來還是有人更專業。