內(nèi)容整理自
邴越
的分布式技術(shù)原理與實(shí)戰(zhàn)45講
事期,『一塊錢(qián)上車(chē)傳送門(mén)』轧房。持續(xù)學(xué)習(xí),遇見(jiàn)更好的自己湿刽!
一的烁、 分布式系統(tǒng)
1. 集中式系統(tǒng)的性能問(wèn)題
畢竟單臺(tái)機(jī)器的性能有限,集中式架構(gòu)的性能問(wèn)題主要包含:
- 可用性不高叭爱,容易出現(xiàn)點(diǎn)單故障
- 可擴(kuò)展性不高撮躁,水平擴(kuò)展系統(tǒng)容量的難度較大
- 可維護(hù)性低漱病,業(yè)務(wù)系統(tǒng)間的耦合程度大
- 成本高买雾,高配置機(jī)器成本和低配置機(jī)器的成本并不是線性關(guān)系
2. 分布式系統(tǒng)的好處
分布式系統(tǒng)的核心是 可擴(kuò)展性
,通過(guò)多臺(tái)機(jī)器的合作來(lái)完成單臺(tái)機(jī)器無(wú)法完成的任務(wù)杨帽。好處是:
- 成本低漓穿,可以由多臺(tái)一般配置的機(jī)器協(xié)同合作,來(lái)完成需要高配置機(jī)器才能完成的工作注盈。
- 可用性高晃危,多臺(tái)機(jī)器同時(shí)出故障的幾率要小于單臺(tái)機(jī)器出故障的幾率。
- 可擴(kuò)展性高,理想情況下僚饭,只需要水平增加機(jī)器就可以線性增加系統(tǒng)容量
3. 分布式系統(tǒng)常見(jiàn)問(wèn)題
由于分布式系統(tǒng)由多臺(tái)機(jī)器協(xié)同合作來(lái)提供服務(wù)震叮,雖然避免了 單點(diǎn)故障
,提高了可用性鳍鸵,但也存在一些問(wèn)題:
- 多臺(tái)機(jī)器間的通信:
- 時(shí)序性
- 網(wǎng)絡(luò)可用性
- 多臺(tái)機(jī)器間的數(shù)據(jù):
- 狀態(tài)的一致性
- 同步的實(shí)時(shí)性
二苇瓣、 CAP理論
1. 結(jié)論
CAP 理論指出,一個(gè)分布式系統(tǒng)只能同時(shí)滿足以下兩點(diǎn):
-
Consistency
一致性:所有機(jī)器同時(shí)看到相同的數(shù)據(jù) -
Availability
可用性:任何時(shí)候偿乖,讀寫(xiě)都是成功的 -
Partition Tolerance
分區(qū)容忍性:部分機(jī)器通信延遲击罪、失敗或者故障時(shí),系統(tǒng)還可以繼續(xù)提供一致贪薪、可用的服務(wù)
2. 結(jié)論反證
假設(shè)能夠同時(shí)保證 CAP媳禁,因?yàn)?P 的存在,則一定存在部分機(jī)器間無(wú)法通信的情況画切,那么則一定無(wú)法保證所有機(jī)器之間的一致性竣稽。
3. CP 和 AP
由于 P 是一定的,分布式系統(tǒng)可分為:
- CP:犧牲一些可用性霍弹,來(lái)保證更好的一致性丧枪。如:ZooKeeper,用來(lái)解決分布式系統(tǒng)中多臺(tái)機(jī)器的協(xié)調(diào)和一致性問(wèn)題庞萍。
- AP:犧牲一些一致性拧烦,來(lái)保證更好的可用性。如:Eureka钝计,用來(lái)在微服務(wù)系統(tǒng)中提供服務(wù)的注冊(cè)和查詢功能恋博。
三、 Base 理論
1. 一致性分類(lèi)
一致性分類(lèi):
- 強(qiáng)一致性:多臺(tái)機(jī)器的狀態(tài)私恬,一致且實(shí)時(shí)债沮。
- 弱一致性:多臺(tái)機(jī)器的狀態(tài),在用戶能夠接受的時(shí)間范圍內(nèi)本鸣,能達(dá)到
最終一致
疫衩。細(xì)分:- 因果一致性,如:會(huì)話一致性
- 單調(diào)讀一致性
- 單調(diào)寫(xiě)一致性
2. 因果一致性舉例
因果一致性是指荣德,有因果關(guān)系的操作在順序上能夠得到保證
闷煤。即:機(jī)器 A 完成了對(duì)某數(shù)據(jù)的更新,然后告知了機(jī)器 B涮瞻,機(jī)器 B 必須能夠讀取到機(jī)器 A 更新后的數(shù)據(jù)鲤拿,如果機(jī)器 B 也要更新那個(gè)數(shù)據(jù),必須在機(jī)器 A 的更新結(jié)果上進(jìn)行更新署咽。
比如微信:你發(fā)了一個(gè)朋友圈近顷,你的朋友進(jìn)行了評(píng)論,評(píng)論動(dòng)作由 A 機(jī)器來(lái)完成。此后窒升,你又對(duì)朋友的評(píng)論進(jìn)行了回復(fù)缀遍,回復(fù)動(dòng)作由 B 機(jī)器來(lái)完成。這時(shí)的 評(píng)論
和 回復(fù)
就有因果關(guān)系饱须,執(zhí)行順序必須得到保證瑟由。
3. 會(huì)話一致性舉例
會(huì)話一致性是指,在一個(gè)會(huì)話中冤寿,必須 能夠讀到剛才寫(xiě)入的數(shù)據(jù)
歹苦。比如:分布式系統(tǒng)中的 session 一致性問(wèn)題。
4. Base 理論
Base 理論的核心思想是 最終一致性
督怜,簡(jiǎn)單概述就是:放棄強(qiáng)一致性殴瘦,追求分區(qū)容錯(cuò)性和可用性。具體是:
- Basically Available号杠,基本可用蚪腋。
基本可用是指,不追求 任何時(shí)候讀寫(xiě)都是成功的
姨蟋,而是 系統(tǒng)能夠基本運(yùn)行屉凯,一直提供服務(wù)
。例如:在一些秒殺系統(tǒng)中眼溶,當(dāng)最大 QPS 超過(guò)系統(tǒng)容量時(shí)悠砚,返回的 稍后再試
,就是基本可用的一種表現(xiàn)堂飞。
- Soft State灌旧,軟狀態(tài)。
對(duì)比數(shù)據(jù)庫(kù)中的 ACID 模型绰筛,要求操作的原子性枢泰,結(jié)果的一致性,就是一種 硬狀態(tài)
铝噩。而 軟狀態(tài)
是指衡蚂,允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并且不影響系統(tǒng)的整體可用性骏庸。比如:數(shù)據(jù)庫(kù)集群中的同步延遲問(wèn)題毛甲,我們可以接受這個(gè)延遲,多個(gè)機(jī)器間的數(shù)據(jù)短時(shí)間內(nèi)的不一致敞恋,就是一種 軟狀態(tài)
丽啡。
- Eventually Consistent谋右,最終一致硬猫。
最終一致
是指,數(shù)據(jù)不能一直是 軟狀態(tài)
,需要在一個(gè)能接受的時(shí)間范圍內(nèi)啸蜜,能夠達(dá)到一致性坑雅。還以數(shù)據(jù)庫(kù)集群為例,我們?cè)试S同步延遲衬横,但還是要能夠 在一定時(shí)間后裹粤,集群達(dá)到一致
,而這個(gè) 遲到的一致
就稱為 最終一致
蜂林。
5. Base 和 CAP 的關(guān)系
Base 是在 CAP 的基礎(chǔ)上演化而來(lái)的遥诉。CAP 指出了 一致性、可用性噪叙、分區(qū)容錯(cuò)性矮锈,這三者只能選擇兩者
,Base 是一種 AP 方案睁蕾,即:在分區(qū)容錯(cuò)性一定存在的前提下苞笨,通過(guò)將強(qiáng)一致性退化為最終一致性的犧牲,來(lái)最求更好的可用性
子眶。
很多分布式系統(tǒng)都在選擇 Base 理論作為架構(gòu)方式瀑凝,比如:NoSQL 和 微服務(wù),強(qiáng)調(diào)通過(guò)服務(wù)降級(jí)等方式保證基本可用臭杰,最求更高的可擴(kuò)展性粤咪,從而保證更好的可用性。而某些對(duì)數(shù)據(jù)有強(qiáng)一致性要求的應(yīng)用渴杆,如金融系統(tǒng)射窒,則應(yīng)該選擇 CP 思路的架構(gòu)方式。