分布式算是軟體界發展的乙個里程碑,它開闢乙個新的軟體時代,其他的溢美之詞我就不再亂說了。
分布式按照我的觀點,應該分為有狀態和無狀態2種:
有狀態
無狀態
當然分布式盡量做成無狀態的分布式,但是儲存最終因為最終儲存的是有狀態的資料,所以不得不變的有狀態。當然web系統也可以是有狀態的,但是最好做成無狀態的,因為無狀態可擴充套件性更強,而有狀態必須維護和確定狀態和機器的對應關係,無謂增加了很多複雜性。例如:
無狀態的集群,我隨意增加或減少一台機器,對原有機器無任何影響。有狀態的,我就需要知道新增或減少的機器,應該分配哪些資料哪些資料。
我們先從簡單的無狀態分布式系統說起,分布式計算我就不再展開了,針對web系統如何架構為無狀態講解一下其中的關鍵:
web系統有狀態的原因是什麼?如果使用者都不需要登入,系統本身就是無狀態的,所有人的看到都是一致的。但是使用者登入之後,你要一直顯示這個登入使用者的相關資料,導致了系統變為有狀態。
如何解決這種有狀態呢?如果這種狀態可以作為資料每次通訊時傳遞給web系統,那web系統就可以變為無狀態。這也是常見的有狀態變為無狀態系統的解決方案,例如web系統將有狀態的資料儲存在db。解決方案很簡單,就是cookie記錄使用者id。有人說使用者登入之後有好多資料,我cookie存不下,而且有安全問題,那就加乙個無狀態的cache集群,儲存所有的使用者資料。cookie的id來了之後就去cache拿一下所需的資料,針對這個有個專業的名詞叫做 share nothing architecture,sna架構。
有了無狀態的web系統,如果請求量增加,很easy,加機器就可以了。另外有些同學說加的機器怎樣感知到,如果有機器宕機,又是如何感知到的,這個是負載均衡幹的事情,後面會單獨再講。
無狀態的講完了,那再講講有狀態的分布式,這個可能需要的篇幅比較多了,讓我再單開一章吧。
剛才查了一下,果真有人已經提出了有狀態和無狀態,呵呵,看來還是有人更專業。
架構師速成8 3 可用性
作為乙個軟體系統可用性是第一位的,如果乙個系統不可用,你其他的地方做的再怎麼好,然並卵。一般什麼情況下軟體會不可用 我方發生故障,導致系統不可用,當然會出現單機的不可用及n多機器群的全部不可用。程式故障 功能錯誤 程式退出 系統故障 cpu超負荷 記憶體超負荷 網路超負荷 物理故障 機器宕機 斷電 ...
架構師速成8 3 可用性
作為乙個軟體系統可用性是第一位的,假設乙個系統不可用。你其它的地方做的再怎麼好,然並卵。一般什麼情況下軟體會不可用 我方發生問題。導致系統不可用。當然會出現單機的不可用及n多機器群的所有不可用。程式故障 功能錯誤 程式退出 系統故障 cpu超負荷 記憶體超負荷 網路超負荷 物理故障 機器宕機 斷電 ...
架構師速成8 3 可用性之分庫分表
有狀態分布式,涉及的知識就比較多了,只是我們能夠拿幾個現實的樣例由淺入深的來理解。如果你是乙個開發負責人,開始使用單機的資料庫,突然一天資料庫硬碟掛掉了。你沒有做備份,然後就沒有然後了。進入第2個公司,你意識到備份的重要性。每天定時備份到還有一台機器,突然有一天,資料庫硬碟掛掉了。你心想幸好我有備份...