書(shū)簽制作手工搜索引擎優(yōu)化工作
文章目錄
- 介紹
- 目標(biāo)
- 正文
- CAP
- Consistency
- Availability
- Partition tolerance
- BASE
- Basically Available
- Soft State
- Eventually Consistent
- ACID
- atomicity
- consistency
- isolation
- durability
- 參考文檔
介紹
分布式系統(tǒng)面臨的場(chǎng)景往往是眾口難調(diào),“這也要,那也要”,最后可能啥都得不到,這就是分布式系統(tǒng)的常態(tài),沒(méi)有靈丹妙藥都是妥協(xié)和退無(wú)可退;
其實(shí)類(lèi)似金融中的不可能三角(固定匯率、自由市場(chǎng)、獨(dú)立貨幣政策不能都得到),仔細(xì)思考會(huì)發(fā)現(xiàn)非常有趣;
目標(biāo)
溫習(xí)分布式系統(tǒng)的基礎(chǔ)理論,尤其是常見(jiàn)的設(shè)計(jì)思想和理論,溫故而知新。
正文
分布式系統(tǒng)的基礎(chǔ)理論有CAP、BASE;本文主要介紹它們,以及做下diff,順帶對(duì)比ACID;
CAP
強(qiáng)一致性和可用性都比較好理解,最不好理解的就是分區(qū)容錯(cuò)性;
分區(qū)容錯(cuò)更多說(shuō)的是一種系統(tǒng)(出現(xiàn)分區(qū)時(shí))該如何繼續(xù)下去;也就是常說(shuō)的保證了P的時(shí)候,此時(shí)關(guān)注A還是C;
目前大多數(shù)互聯(lián)網(wǎng)公司,包括個(gè)人工作過(guò)的公司基本都是AP,畢竟給老板畫(huà)餅,定OKR的時(shí)候都是SLA xx個(gè)9,目前沒(méi)見(jiàn)過(guò)人說(shuō)為了一致性系統(tǒng)全年停服一半以上時(shí)間,沒(méi)有可用性其他都沒(méi)有意義,用戶就是上帝;聽(tīng)說(shuō)金融系統(tǒng)CP較多,但是細(xì)琢磨也夠嗆,畢竟數(shù)據(jù)進(jìn)來(lái)了可以通過(guò)日志做清洗,停服沒(méi)用戶、流量進(jìn)來(lái),公司都活不下去談其他似乎也不合理(參考鐵路的搶票系統(tǒng));
曾經(jīng)在國(guó)內(nèi)top級(jí)的電商公司做分布式存儲(chǔ),為了保證可用性,在流量最大的那幾天默認(rèn)是忽視一致性的, “池塘先修大點(diǎn),魚(yú)進(jìn)來(lái)了就跑不了,不行我們?cè)傧滤茊h”,通過(guò)日志的形式把所有流量都兜住,然后擴(kuò)容上大規(guī)模計(jì)算集群異步做流量回放,降噪、聚合、匯總保證最終一致性,熔斷、降低更是聞所未聞,畢竟沒(méi)人會(huì)承認(rèn)自己服務(wù)扛不住了,要在雙11掉鏈子(畢竟在誓師大會(huì)上親眼見(jiàn)過(guò)老板們賭咒發(fā)誓承諾100%沒(méi)問(wèn)題);迫于現(xiàn)實(shí)的無(wú)奈實(shí)踐了BASE理論,想來(lái)也是”得道多助,天助我也“。
Consistency
(強(qiáng))一致性 注意國(guó)內(nèi)翻譯的原因往往忽略了強(qiáng)一致性,而是翻譯為一致性;
指的是請(qǐng)求分布式系統(tǒng)任意一節(jié)點(diǎn)拿到的數(shù)據(jù)都是一致且是最新版本的;也就意味著所有節(jié)點(diǎn)上的數(shù)據(jù)都是完全一致(版本也一致,且是最新的),節(jié)點(diǎn)/數(shù)據(jù)不存在中間狀態(tài);
Availability
可用性
指的是每次請(qǐng)求收到的響應(yīng)都是非異常;
Partition tolerance
分區(qū)容錯(cuò)性
指的是當(dāng)通信故障時(shí),系統(tǒng)發(fā)生了分區(qū),此時(shí)系統(tǒng)能否繼續(xù)運(yùn)行,按照何種方式對(duì)外提供服務(wù)(A還是C);
BASE
現(xiàn)有的,或者說(shuō)大多數(shù)系統(tǒng)基本都是BASE的最佳實(shí)踐者,系統(tǒng)的第一目標(biāo)是可用,一致性可通過(guò)其他手段“慢慢”實(shí)現(xiàn),或者說(shuō)當(dāng)系統(tǒng)可以承擔(dān)一定時(shí)間內(nèi)的數(shù)據(jù)不一致造成的損失那么就沒(méi)有必要花費(fèi)更多成本去實(shí)現(xiàn)強(qiáng)一致性;
比如消息隊(duì)列領(lǐng)域Kafka通過(guò)Zookeeper實(shí)現(xiàn)強(qiáng)一致性約束,導(dǎo)致服務(wù)可用性相較于RocketMQ等差了很多,反觀RocketMQ等對(duì)于強(qiáng)一致性的約束更為寬泛,甚至變成可配置項(xiàng),如果要求走強(qiáng)一致性那么就需要開(kāi)啟同步刷盤(pán)且ALLACK,否則可以通過(guò)異步等方式提高可用性,降低一致性,按需索取;
最終一致性的范例就是Consul(協(xié)議Gossip),原理類(lèi)似八卦,一傳十,十傳百,理論上總歸所有人都能知道;
Basically Available
基本可用
參考CAP的可用性
Soft State
軟狀態(tài)
數(shù)據(jù)的狀態(tài)不是不可修改的,允許數(shù)據(jù)/節(jié)點(diǎn)存在中間狀態(tài);
Eventually Consistent
最終一致性
數(shù)據(jù)/節(jié)點(diǎn)經(jīng)過(guò)一定時(shí)間后,從中間狀態(tài)最終變成一致,實(shí)現(xiàn)所有數(shù)據(jù)/節(jié)點(diǎn)的狀態(tài)一致;
ACID
atomicity
原子性(atomicity,或稱不可分割性)
consistency
一致性(consistency)
isolation
隔離性(isolation,又稱獨(dú)立性)
durability
持久性(durability)
參考文檔
數(shù)據(jù)密集型應(yīng)用系統(tǒng)