分布式的對立面就是集中式轨淌。
集中式系統(tǒng)就是由一臺或者多臺計算機組成的中心節(jié)點提澎,數(shù)據(jù)集中存儲在這個中心節(jié)點绽昼,并且整個系統(tǒng)的邏輯單元都在這個中心節(jié)點语盈。
集中式系統(tǒng)部署簡單,無需考慮對服務進行多節(jié)點部署蓖康,也就無需考慮多節(jié)點之間的分布式協(xié)作問題铐炫。
現(xiàn)在的分布式系統(tǒng)在解決部署和擴容便利性方面,都在追求類集中式系統(tǒng)的部署蒜焊。將分布式系統(tǒng)單元化倒信,一組服務作為一個單元,這個單元能提供完整的服務泳梆,擴容就是增加一個單元如此簡單鳖悠。
分布式特點
對于分布式系統(tǒng),我的理解就是將集中式的程序拆分出獨立的服務模塊优妙,部署在不同的網(wǎng)絡計算機上乘综,各模塊之間僅僅通過消息傳遞進行通信和協(xié)調(diào)。
分布式系統(tǒng)中的計算機在空間部署上是隨意分布的套硼】ǔ剑可以在不同的機柜,可以在不同的機房邪意,也可以在不同的地理區(qū)域九妈。分布式系統(tǒng)都會有如下特點:
分布性
即計算機可以隨意分布,不受空間約束雾鬼。機器的分布情況可以隨時變動萌朱。
對等性
分布式系統(tǒng)中的計算機沒有主從之分〔卟耍可以理解為計算機沒有中心控制節(jié)點晶疼,組成分布式系統(tǒng)的計算機節(jié)點都是對等的。
需要指出的是又憨,副本是分布式系統(tǒng)中最常見的概念翠霍,其對數(shù)據(jù)和服務提供的一種冗余方式,這是提高系統(tǒng)高可用的一方面蠢莺。一種是數(shù)據(jù)副本寒匙,當某個數(shù)據(jù)節(jié)點失效之后,可以從其副本節(jié)點獲取數(shù)據(jù)浪秘,這是解決分布式系統(tǒng)數(shù)據(jù)丟失問題的最常見做法蒋情。另一種是服務副本,多個節(jié)點提供相同服務耸携,一個節(jié)點失效后可以轉移到另外副本處理棵癣。
并發(fā)性
分布式系統(tǒng)中多個節(jié)點可能同時(并發(fā))操作同一個資源,如數(shù)據(jù)庫夺衍。如何高效準確協(xié)調(diào)并發(fā)操作狈谊,成為分布式系統(tǒng)架構設計中最大的挑戰(zhàn)。一般架構設計的做法是將共享資源進行細分沟沙,將并發(fā)操作降低到最小河劝。比如之前是一百萬人會并發(fā)訪問一個數(shù)據(jù)庫,為把并發(fā)操作降低矛紫,可以設計并拆分數(shù)據(jù)庫赎瞎,將數(shù)據(jù)按照一定規(guī)則分開存放到十個數(shù)據(jù)庫,控制每組是十萬人并發(fā)訪問各自的數(shù)據(jù)庫颊咬。也可以增加多個數(shù)據(jù)副本务甥,每個副本處理的并發(fā)量也會減小。
缺乏全局時鐘
在分布式系統(tǒng)中喳篇,計算機在空間隨意分布的敞临,很難定義其中兩個計算機上的事件先后發(fā)生順序。原因就是缺乏全局的時鐘麸澜。
故障總會發(fā)生
任何形式的故障都有可能發(fā)生挺尿。機房斷電,光纜被挖炊邦,自然災害编矾,機器本身故障等。如何保證在故障發(fā)生時系統(tǒng)能正確提供服務也是一大挑戰(zhàn)铣耘。一個被大量工程實踐驗證過的黃金定律是:任何在設計階段考慮到的異常情況洽沟,一定會在系統(tǒng)實際中發(fā)生,并且還會遇到很多在設計上未考慮到的異常情況蜗细。
所以設計分布式系統(tǒng)時一定要嚴謹裆操,不要存在僥幸心理,"這個事件發(fā)生的概率極其小炉媒,只有千萬分之一"踪区。但是在有千萬用戶的系統(tǒng)中,發(fā)生這個"千萬分之一概率"事件的概率就是1吊骤。也就是必然會發(fā)生缎岗!
分布式環(huán)境中的問題
通信異常
現(xiàn)代計算機體系結構中,單機內(nèi)存訪問延時在納秒級別白粉,正常的一次網(wǎng)絡交互延遲在0.1~1毫秒左右传泊。如此巨大的延時期間鼠渺,天知道會發(fā)生什么異常情況。所以消息的丟失和延遲就是家常便飯了眷细。
網(wǎng)絡分區(qū)
網(wǎng)絡分區(qū)俗稱"腦裂"拦盹。就是一個分布式系統(tǒng)因網(wǎng)絡故障出現(xiàn)小的集群。集群之間互不通信溪椎,但是各集群又可能完成正常的邏輯普舆。如果是數(shù)據(jù)業(yè)務,就會存在數(shù)據(jù)一致性問題校读。
三態(tài)
即成功沼侣,失敗,超時歉秫。在單機系統(tǒng)中就只存在成功和失敗蛾洛。引入空間后就會存在超時狀態(tài)。所以tcp協(xié)議層會有超時狀態(tài)端考。
節(jié)點故障
某個節(jié)點掛掉了雅潭,或者由于網(wǎng)絡問題,該節(jié)點與集群失去聯(lián)系却特。分布式系統(tǒng)中扶供,每個節(jié)點都可能出現(xiàn)故障,而且是必然事件裂明。
參考 從paxos到zookeeper-分布式一致性原理與實踐