我之前對(duì)分布式的理解(只是緣在此山中的淺顯認(rèn)識(shí)):
分布式=遠(yuǎn)程調(diào)用+多機(jī)服務(wù)侄非,通過增加機(jī)器形成集群可支撐更多的并發(fā)訪問量。實(shí)現(xiàn)多機(jī)服務(wù)就需要進(jìn)行ha和loadbalance策略劝评,等等徐伐。表現(xiàn)在web環(huán)境就是apache或者Nginx配置tomcat集群洼冻,或者基于某個(gè)開源rpc框架配置了一番瞧毙,能夠多機(jī)共同對(duì)外提供服務(wù)就是分布式系統(tǒng)了骤宣。
殊不知秦爆,這只是先入為主的主觀感受,就是把問題想當(dāng)然了憔披,因?yàn)槲覀兌荚陔S波逐流的用所謂的“分布式”等限,所以覺得分布式就應(yīng)該這樣。
而現(xiàn)在隨著知識(shí)的沉淀芬膝,對(duì)計(jì)算機(jī)底層知識(shí)的深入理解望门,才知道,通過增加機(jī)器形成集群雖然能支撐更多的并發(fā)訪問量(以前并未考慮是為什么锰霜,現(xiàn)在知道是受單機(jī)硬件和操作系統(tǒng)的限制筹误,解決了C10K問題),但是也會(huì)帶來其它問題癣缅,用CAP(這個(gè)理論也有一些人質(zhì)疑是偽命題)的理論來講就是厨剪,當(dāng)多機(jī)中有機(jī)器發(fā)生故障時(shí)哄酝,也就是P(分區(qū)容忍性(Partition tolerance))必然存在的情況下,如何進(jìn)行失效轉(zhuǎn)移丽惶,從而保證C(強(qiáng)一致性(Consistency))炫七、A(可用性(Availability))呢?
按照CAP理論钾唬,在分區(qū)網(wǎng)絡(luò)環(huán)境和操作系統(tǒng)一定會(huì)存在問題的情況下万哪,上面問題的答案是無解的。就是說P一定存在的情況下就是只能保證CA的其中一個(gè)抡秆。(否則的話問題退化為保證ACID(其中的C不同于CAP中的C)奕巍,目前主要有兩種方式實(shí)現(xiàn)ACID:第一種是Write ahead logging,也就是日志式的方式(現(xiàn)代數(shù)據(jù)庫均基于這種方式)儒士。第二種是Shadow paging的止。)
而我們?yōu)槭裁催€要繼續(xù)使用這種架構(gòu)呢?
其實(shí)對(duì)于大多數(shù)WEB應(yīng)用着撩,其實(shí)并不需要強(qiáng)一致性诅福,因此犧牲一致性而換取高可用性,是多數(shù)分布式架構(gòu)產(chǎn)品的方向拖叙。當(dāng)然氓润,犧牲一致性,并不是完全不管數(shù)據(jù)的一致性薯鳍,否則數(shù)據(jù)是混亂的咖气,那么系統(tǒng)可用性再高分布式再好也沒有了價(jià)值。犧牲一致性挖滤,只是不再要求像關(guān)系型數(shù)據(jù)庫中的強(qiáng)一致性崩溪,而是只要系統(tǒng)能達(dá)到最終一致性即可,考慮到客戶體驗(yàn)斩松,這個(gè)最終一致的時(shí)間窗口伶唯,要盡可能的對(duì)用戶透明,也就是需要保障“用戶感知到的一致性”砸民。通常是通過數(shù)據(jù)的多份異步復(fù)制來實(shí)現(xiàn)系統(tǒng)的高可用和數(shù)據(jù)的最終一致性的抵怎,“用戶感知到的一致性”的時(shí)間窗口則取決于數(shù)據(jù)復(fù)制到一致狀態(tài)的時(shí)間。
這就引發(fā)了目前的一個(gè)設(shè)計(jì)思想:
BASE思想
說起來很有趣岭参,BASE的英文意義是堿反惕,而ACID是酸。真的是水火不容啊演侯。
Basically Availble --基本可用
Soft-state --軟狀態(tài)/柔性事務(wù)
"Soft state" 可以理解為"無連接"的, 而 "Hard state" 是"面向連接"的
Eventual Consistency --最終一致性
最終一致性姿染, 也是 ACID 的最終目的。
BASE模型反ACID模型,完全不同ACID模型悬赏,犧牲高一致性狡汉,獲得可用性或可靠性: Basically Available基本可用。支持分區(qū)失敗(e.g. sharding碎片劃分?jǐn)?shù)據(jù)庫) Soft state軟狀態(tài) 狀態(tài)可以有一段時(shí)間不同步闽颇,異步盾戴。 Eventually consistent最終一致,最終數(shù)據(jù)是一致的就可以了兵多,而不是時(shí)時(shí)一致尖啡。
BASE思想的主要實(shí)現(xiàn)有
1.按功能劃分?jǐn)?shù)據(jù)庫
2.sharding碎片
BASE思想主要強(qiáng)調(diào)基本的可用性,如果你需要高可用性剩膘,也就是純粹的高性能衅斩,那么就要以一致性或容錯(cuò)性為犧牲,BASE思想的方案在性能上還是有潛力可挖的怠褐。
參考:分布式基礎(chǔ)(1):CAP原理畏梆、BASE思想和最終一致性