如何學(xué)習(xí)分布式系統(tǒng),分布式是什么些阅,這里有很好的解釋伞剑,很全(轉(zhuǎn))

我曾在網(wǎng)絡(luò)上搜索過(guò)”如何學(xué)習(xí)分布式系統(tǒng)“,也在知乎上關(guān)注了該話題市埋,但并沒(méi)有看到一個(gè)全面的黎泣、有指導(dǎo)意義的答案。本文的目標(biāo)是給打算全面學(xué)習(xí)分布式系統(tǒng)的自己缤谎、以及感興趣的讀者指明一條可行的路徑抒倚,使得之后的學(xué)習(xí)不再盲目。

不過(guò)坷澡,我并沒(méi)有越過(guò)這座山托呕,我只是站在山前,從前人留下的痕跡揣測(cè)山的全貌與溝壑频敛,臆想的成分居多项郊,還望各位大師指點(diǎn)迷津。

什么是分布式系統(tǒng)

分布式系統(tǒng)是由一組通過(guò)網(wǎng)絡(luò)進(jìn)行通信斟赚、為了完成共同的任務(wù)而協(xié)調(diào)工作的計(jì)算機(jī)節(jié)點(diǎn)組成的系統(tǒng)着降。分布式系統(tǒng)的出現(xiàn)是為了用廉價(jià)的、普通的機(jī)器完成單個(gè)計(jì)算機(jī)無(wú)法完成的計(jì)算拗军、存儲(chǔ)任務(wù)任洞。其目的是利用更多的機(jī)器蓄喇,處理更多的數(shù)據(jù)

首先需要明確的是交掏,只有當(dāng)單個(gè)節(jié)點(diǎn)的處理能力無(wú)法滿足日益增長(zhǎng)的計(jì)算妆偏、存儲(chǔ)任務(wù)的時(shí)候,且硬件的提升(加內(nèi)存盅弛、加磁盤(pán)钱骂、使用更好的CPU)高昂到得不償失的時(shí)候,應(yīng)用程序也不能進(jìn)一步優(yōu)化的時(shí)候挪鹏,我們才需要考慮分布式系統(tǒng)罐柳。因?yàn)椋植际较到y(tǒng)要解決的問(wèn)題本身就是和單機(jī)系統(tǒng)一樣的狰住,而由于分布式系統(tǒng)多節(jié)點(diǎn)、通過(guò)網(wǎng)絡(luò)通信的拓?fù)浣Y(jié)構(gòu)齿梁,會(huì)引入很多單機(jī)系統(tǒng)沒(méi)有的問(wèn)題催植,為了解決這些問(wèn)題又會(huì)引入更多的機(jī)制、協(xié)議勺择,帶來(lái)更多的問(wèn)題创南。。省核。

在很多文章中稿辙,主要講分布式系統(tǒng)分為分布式計(jì)算(computation)與分布式存儲(chǔ)(storage)。計(jì)算與存儲(chǔ)是相輔相成的气忠,計(jì)算需要數(shù)據(jù)邻储,要么來(lái)自實(shí)時(shí)數(shù)據(jù)(流數(shù)據(jù)),要么來(lái)自存儲(chǔ)的數(shù)據(jù)旧噪;而計(jì)算的結(jié)果也是需要存儲(chǔ)的吨娜。在操作系統(tǒng)中,對(duì)計(jì)算與存儲(chǔ)有非常詳盡的討論淘钟,分布式系統(tǒng)只不過(guò)將這些理論推廣到多個(gè)節(jié)點(diǎn)罷了宦赠。

那么分布式系統(tǒng)怎么將任務(wù)分發(fā)到這些計(jì)算機(jī)節(jié)點(diǎn)呢,很簡(jiǎn)單的思想米母,分而治之勾扭,即分片(partition)。對(duì)于計(jì)算铁瞒,那么就是對(duì)計(jì)算任務(wù)進(jìn)行切換妙色,每個(gè)節(jié)點(diǎn)算一些,最終匯總就行了精拟,這就是MapReduce的思想燎斩;對(duì)于存儲(chǔ)虱歪,更好理解一下,每個(gè)節(jié)點(diǎn)存一部分?jǐn)?shù)據(jù)就行了栅表。當(dāng)數(shù)據(jù)規(guī)模變大的時(shí)候笋鄙,Partition是唯一的選擇,同時(shí)也會(huì)帶來(lái)一些好處:

  1. 提升性能和并發(fā)怪瓶,操作被分發(fā)到不同的分片萧落,相互獨(dú)立
  2. 提升系統(tǒng)的可用性,即使部分分片不能用洗贰,其他分片不會(huì)受到影響

理想的情況下找岖,有分片就行了,但事實(shí)的情況卻不大理想敛滋。原因在于许布,分布式系統(tǒng)中有大量的節(jié)點(diǎn),且通過(guò)網(wǎng)絡(luò)通信绎晃。單個(gè)節(jié)點(diǎn)的故障(進(jìn)程crash蜜唾、斷電、磁盤(pán)損壞)是個(gè)小概率事件庶艾,但整個(gè)系統(tǒng)的故障率會(huì)隨節(jié)點(diǎn)的增加而指數(shù)級(jí)增加袁余,網(wǎng)絡(luò)通信也可能出現(xiàn)斷網(wǎng)、高延遲的情況咱揍。在這種一定會(huì)出現(xiàn)的“異秤卑瘢”情況下,分布式系統(tǒng)還是需要繼續(xù)穩(wěn)定的對(duì)外提供服務(wù)煤裙,即需要較強(qiáng)的容錯(cuò)性掩完。最簡(jiǎn)單的辦法,就是冗余或者復(fù)制集(Replication)积暖,即多個(gè)節(jié)點(diǎn)負(fù)責(zé)同一個(gè)任務(wù)藤为,最為常見(jiàn)的就是分布式存儲(chǔ)中,多個(gè)節(jié)點(diǎn)復(fù)雜存儲(chǔ)同一份數(shù)據(jù)夺刑,以此增強(qiáng)可用性與可靠性缅疟。同時(shí),Replication也會(huì)帶來(lái)性能的提升遍愿,比如數(shù)據(jù)的locality可以減少用戶的等待時(shí)間存淫。

下面這種來(lái)自Distributed systems for fun and profit 的圖形象生動(dòng)說(shuō)明了Partition與Replication是如何協(xié)作的。

如何學(xué)習(xí)分布式系統(tǒng)沼填,分布式是什么桅咆,這里有很好的解釋,很全

Partition和Replication是解決分布式系統(tǒng)問(wèn)題的一記組合拳坞笙,很多具體的問(wèn)題都可以用這個(gè)思路去解決岩饼。但這并不是銀彈荚虚,往往是為了解決一個(gè)問(wèn)題,會(huì)引入更多的問(wèn)題籍茧,比如為了可用性與可靠性保證版述,引用了冗余(復(fù)制集)。有了冗余寞冯,各個(gè)副本間的一致性問(wèn)題就變得很頭疼渴析,一致性在系統(tǒng)的角度和用戶的角度又有不同的等級(jí)劃分。如果要保證強(qiáng)一致性吮龄,那么會(huì)影響可用性與性能俭茧,在一些應(yīng)用(比如電商、搜索)是難以接受的漓帚。如果是最終一致性母债,那么就需要處理數(shù)據(jù)沖突的情況。CAP尝抖、FLP這些理論告訴我們场斑,在分布式系統(tǒng)中,沒(méi)有最佳的選擇牵署,都是需要權(quán)衡,做出最合適的選擇喧半。

分布式系統(tǒng)挑戰(zhàn)

分布式系統(tǒng)需要大量機(jī)器協(xié)作奴迅,面臨諸多的挑戰(zhàn):

第一,異構(gòu)的機(jī)器與網(wǎng)絡(luò):

分布式系統(tǒng)中的機(jī)器挺据,配置不一樣取具,其上運(yùn)行的服務(wù)也可能由不同的語(yǔ)言、架構(gòu)實(shí)現(xiàn)扁耐,因此處理能力也不一樣暇检;節(jié)點(diǎn)間通過(guò)網(wǎng)絡(luò)連接,而不同網(wǎng)絡(luò)運(yùn)營(yíng)商提供的網(wǎng)絡(luò)的帶寬婉称、延時(shí)块仆、丟包率又不一樣。怎么保證大家齊頭并進(jìn)王暗,共同完成目標(biāo)悔据,這四個(gè)不小的挑戰(zhàn)。

第二俗壹,普遍的節(jié)點(diǎn)故障:

雖然單個(gè)節(jié)點(diǎn)的故障概率較低科汗,但節(jié)點(diǎn)數(shù)目達(dá)到一定規(guī)模,出故障的概率就變高了绷雏。分布式系統(tǒng)需要保證故障發(fā)生的時(shí)候怖亭,系統(tǒng)仍然是可用的坤检,這就需要監(jiān)控節(jié)點(diǎn)的狀態(tài),在節(jié)點(diǎn)故障的情況下將該節(jié)點(diǎn)負(fù)責(zé)的計(jì)算缀蹄、存儲(chǔ)任務(wù)轉(zhuǎn)移到其他節(jié)點(diǎn)

第三,不可靠的網(wǎng)絡(luò):

節(jié)點(diǎn)間通過(guò)網(wǎng)絡(luò)通信缺前,而網(wǎng)絡(luò)是不可靠的⌒坡耄可能的網(wǎng)絡(luò)問(wèn)題包括:網(wǎng)絡(luò)分割、延時(shí)逝段、丟包、亂序奶躯。

相比單機(jī)過(guò)程調(diào)用帚桩,網(wǎng)絡(luò)通信最讓人頭疼的是超時(shí):節(jié)點(diǎn)A向節(jié)點(diǎn)B發(fā)出請(qǐng)求,在約定的時(shí)間內(nèi)沒(méi)有收到節(jié)點(diǎn)B的響應(yīng)嘹黔,那么B是否處理了請(qǐng)求账嚎,這個(gè)是不確定的,這個(gè)不確定會(huì)帶來(lái)諸多問(wèn)題儡蔓,最簡(jiǎn)單的郭蕉,是否要重試請(qǐng)求,節(jié)點(diǎn)B會(huì)不會(huì)多次處理同一個(gè)請(qǐng)求喂江。

總而言之召锈,分布式的挑戰(zhàn)來(lái)自不確定性,不確定計(jì)算機(jī)什么時(shí)候crash获询、斷電涨岁,不確定磁盤(pán)什么時(shí)候損壞,不確定每次網(wǎng)絡(luò)通信要延遲多久吉嚣,也不確定通信對(duì)端是否處理了發(fā)送的消息卵惦。而分布式的規(guī)模放大了這個(gè)不確定性,不確定性是令人討厭的瓦戚,所以有諸多的分布式理論沮尿、協(xié)議來(lái)保證在這種不確定性的情況下,系統(tǒng)還能繼續(xù)正常工作。

而且畜疾,很多在實(shí)際系統(tǒng)中出現(xiàn)的問(wèn)題赴邻,來(lái)源于設(shè)計(jì)時(shí)的盲目樂(lè)觀,覺(jué)得這個(gè)啡捶、那個(gè)應(yīng)該不會(huì)出問(wèn)題姥敛。Fallacies_of_distributed_computing很有意思,介紹了分布式系統(tǒng)新手可能的錯(cuò)誤的假設(shè):

The network is reliable.

Latency is zero.

Bandwidth is infinite.

The network is secure.

Topology doesn't change.

There is one administrator.

Transport cost is zero.

The network is homogeneous.

劉杰在《分布式系統(tǒng)原理介紹》中指出瞎暑,處理這些異常的最佳原則是:在設(shè)計(jì)彤敛、推導(dǎo)、驗(yàn)證分布式系統(tǒng)的協(xié)議了赌、流程時(shí),最重要的工作之一就是思考在執(zhí)行流程的每個(gè)步驟時(shí)一旦發(fā)生各種異常的情況下系統(tǒng)的處理方式及造成的影響墨榄。

分布式系統(tǒng)特性與衡量標(biāo)準(zhǔn)

透明性:使用分布式系統(tǒng)的用戶并不關(guān)心系統(tǒng)是怎么實(shí)現(xiàn)的,也不關(guān)心讀到的數(shù)據(jù)來(lái)自哪個(gè)節(jié)點(diǎn)勿她,對(duì)用戶而言袄秩,分布式系統(tǒng)的最高境界是用戶根本感知不到這是一個(gè)分布式系統(tǒng),在《Distributed Systems Principles and Paradigms》一書(shū)中之剧,作者是這么說(shuō)的:

A distributed system is a collection of independent computers that appears to its users as a single coherent system.

可擴(kuò)展性:分布式系統(tǒng)的根本目標(biāo)就是為了處理單個(gè)計(jì)算機(jī)無(wú)法處理的任務(wù)背稼,當(dāng)任務(wù)增加的時(shí)候雇庙,分布式系統(tǒng)的處理能力需要隨之增加灶伊。簡(jiǎn)單來(lái)說(shuō)聘萨,要比較方便的通過(guò)增加機(jī)器來(lái)應(yīng)對(duì)數(shù)據(jù)量的增長(zhǎng)米辐,同時(shí)翘贮,當(dāng)任務(wù)規(guī)睦暌常縮減的時(shí)候,可以撤掉一些多余的機(jī)器址遇,達(dá)到動(dòng)態(tài)伸縮的效果

可用性與可靠性:一般來(lái)說(shuō)倔约,分布式系統(tǒng)是需要長(zhǎng)時(shí)間甚至7*24小時(shí)提供服務(wù)的浸剩【钜可用性是指系統(tǒng)在各種情況對(duì)外提供服務(wù)的能力畦木,簡(jiǎn)單來(lái)說(shuō)十籍,可以通過(guò)不可用時(shí)間與正常服務(wù)時(shí)間的必知來(lái)衡量勾栗;而可靠性而是指計(jì)算結(jié)果正確、存儲(chǔ)的數(shù)據(jù)不丟失砸讳。

高性能:不管是單機(jī)還是分布式系統(tǒng)簿寂,大家都非常關(guān)注性能宿亡。不同的系統(tǒng)對(duì)性能的衡量指標(biāo)是不同的,最常見(jiàn)的:高并發(fā)克胳,單位時(shí)間內(nèi)處理的任務(wù)越多越好圈匆;低延遲:每個(gè)任務(wù)的平均時(shí)間越少越好。這個(gè)其實(shí)跟操作系統(tǒng)CPU的調(diào)度策略很像

一致性:分布式系統(tǒng)為了提高可用性可靠性笆搓,一般會(huì)引入冗余(復(fù)制集)砚作。那么如何保證這些節(jié)點(diǎn)上的狀態(tài)一致葫录,這就是分布式系統(tǒng)不得不面對(duì)的一致性問(wèn)題。一致性有很多等級(jí)骇扇,一致性越強(qiáng),對(duì)用戶越友好少孝,但會(huì)制約系統(tǒng)的可用性稍走;一致性等級(jí)越低柴底,用戶就需要兼容數(shù)據(jù)不一致的情況柄驻,但系統(tǒng)的可用性、并發(fā)性很高很多抑钟。

組件在塔、理論拨黔、協(xié)議

假設(shè)這是一個(gè)對(duì)外提供服務(wù)的大型分布式系統(tǒng)蓉驹,用戶連接到系統(tǒng)态兴,做一些操作疟位,產(chǎn)生一些需要存儲(chǔ)的數(shù)據(jù),那么在這個(gè)過(guò)程中正勒,會(huì)遇到哪些組件章贞、理論與協(xié)議呢

用一個(gè)請(qǐng)求串起來(lái)

用戶使用Web鸭限、APP败京、SDK梦染,通過(guò)HTTP、TCP連接到系統(tǒng)泛粹。在分布式系統(tǒng)中戚扳,為了高并發(fā)帽借、高可用砍艾,一般都是多個(gè)節(jié)點(diǎn)提供相同的服務(wù)脆荷。那么蜓谋,第一個(gè)問(wèn)題就是具體選擇哪個(gè)節(jié)點(diǎn)來(lái)提供服務(wù)炭分,這個(gè)就是負(fù)載均衡(load balance)捧毛。負(fù)載均衡的思想很簡(jiǎn)單,但使用非常廣泛师痕,在分布式系統(tǒng)、大型網(wǎng)站的方方面面都有使用因篇,或者說(shuō)惜犀,只要涉及到多個(gè)節(jié)點(diǎn)提供同質(zhì)的服務(wù)狠裹,就需要負(fù)載均衡涛菠。

通過(guò)負(fù)載均衡找到一個(gè)節(jié)點(diǎn),接下來(lái)就是真正處理用戶的請(qǐng)求礁叔,請(qǐng)求有可能簡(jiǎn)單琅关,也有可能很復(fù)雜涣易。簡(jiǎn)單的請(qǐng)求新症,比如讀取數(shù)據(jù)徒爹,那么很可能是有緩存的隆嗅,即分布式緩存胖喳,如果緩存沒(méi)有命中禀晓,那么需要去數(shù)據(jù)庫(kù)拉取數(shù)據(jù)粹懒。對(duì)于復(fù)雜的請(qǐng)求凫乖,可能會(huì)調(diào)用到系統(tǒng)中其他的服務(wù)帽芽。

承上导街,假設(shè)服務(wù)A需要調(diào)用服務(wù)B的服務(wù)搬瑰,首先兩個(gè)節(jié)點(diǎn)需要通信控硼,網(wǎng)絡(luò)通信都是建立在TCP/IP協(xié)議的基礎(chǔ)上翼悴,但是,每個(gè)應(yīng)用都手寫(xiě)socket是一件冗雜鹦赎、低效的事情钙姊,因此需要應(yīng)用層的封裝挚冤,因此有了HTTP、FTP等各種應(yīng)用層協(xié)議。當(dāng)系統(tǒng)愈加復(fù)雜锡宋,提供大量的http接口也是一件困難的事情栅螟。因此,有了更進(jìn)一步的抽象步绸,那就是RPC(remote produce call)瓤介,是的遠(yuǎn)程調(diào)用就跟本地過(guò)程調(diào)用一樣方便刑桑,屏蔽了網(wǎng)絡(luò)通信等諸多細(xì)節(jié),增加新的接口也更加方便梁肿。

一個(gè)請(qǐng)求可能包含諸多操作吩蔑,即在服務(wù)A上做一些操作烛芬,然后在服務(wù)B上做另一些操作。比如簡(jiǎn)化版的網(wǎng)絡(luò)購(gòu)物宏蛉,在訂單服務(wù)上發(fā)貨遣臼,在賬戶服務(wù)上扣款。這兩個(gè)操作需要保證原子性拾并,要么都成功揍堰,要么都不操作。這就涉及到分布式事務(wù)的問(wèn)題嗅义,分布式事務(wù)是從應(yīng)用層面保證一致性:某種守恒關(guān)系屏歹。

上面說(shuō)道一個(gè)請(qǐng)求包含多個(gè)操作,其實(shí)就是涉及到多個(gè)服務(wù)之碗,分布式系統(tǒng)中有大量的服務(wù)蝙眶,每個(gè)服務(wù)又是多個(gè)節(jié)點(diǎn)組成。那么一個(gè)服務(wù)怎么找到另一個(gè)服務(wù)(的某個(gè)節(jié)點(diǎn)呢)褪那?通信是需要地址的式塌,怎么獲取這個(gè)地址尾菇,最簡(jiǎn)單的辦法就是配置文件寫(xiě)死链沼,或者寫(xiě)入到數(shù)據(jù)庫(kù),但這些方法在節(jié)點(diǎn)數(shù)據(jù)巨大、節(jié)點(diǎn)動(dòng)態(tài)增刪的時(shí)候都不大方便奖恰,這個(gè)時(shí)候就需要服務(wù)注冊(cè)與發(fā)現(xiàn):提供服務(wù)的節(jié)點(diǎn)向一個(gè)協(xié)調(diào)中心注冊(cè)自己的地址揩尸,使用服務(wù)的節(jié)點(diǎn)去協(xié)調(diào)中心拉取地址勇边。

從上可以看見(jiàn),協(xié)調(diào)中心提供了中心化的服務(wù):以一組節(jié)點(diǎn)提供類似單點(diǎn)的服務(wù)怕享,使用非常廣泛奠伪,比如命令服務(wù)、分布式鎖。協(xié)調(diào)中心最出名的就是chubby炊甲,zookeeper牵囤。

回到用戶請(qǐng)求這個(gè)點(diǎn),請(qǐng)求操作會(huì)產(chǎn)生一些數(shù)據(jù)、日志,通常為信息,其他一些系統(tǒng)可能會(huì)對(duì)這些消息感興趣,比如個(gè)性化推薦狞膘、監(jiān)控等辅愿,這里就抽象出了兩個(gè)概念馍忽,消息的生產(chǎn)者與消費(fèi)者。那么生產(chǎn)者怎么講消息發(fā)送給消費(fèi)者呢,RPC并不是一個(gè)很好的選擇,因?yàn)镽PC肯定得指定消息發(fā)給誰(shuí)饲宿,但實(shí)際的情況是生產(chǎn)者并不清楚、也不關(guān)心誰(shuí)會(huì)消費(fèi)這個(gè)消息,這個(gè)時(shí)候消息隊(duì)列就出馬了。簡(jiǎn)單來(lái)說(shuō),生產(chǎn)者只用往消息隊(duì)列里面發(fā)就行了豪治,隊(duì)列會(huì)將消息按主題(topic)分發(fā)給關(guān)注這個(gè)主題的消費(fèi)者花吟。消息隊(duì)列起到了異步處理、應(yīng)用解耦的作用。

上面提到贬派,用戶操作會(huì)產(chǎn)生一些數(shù)據(jù)镐躲,這些數(shù)據(jù)忠實(shí)記錄了用戶的操作習(xí)慣、喜好佳镜,是各行各業(yè)最寶貴的財(cái)富。比如各種推薦腕侄、廣告投放分预、自動(dòng)識(shí)別。這就催生了分布式計(jì)算平臺(tái)晴裹,比如Hadoop钮追,Storm等,用來(lái)處理這些海量的數(shù)據(jù)鞠绰。

最后翁巍,用戶的操作完成之后,用戶的數(shù)據(jù)需要持久化卜壕,但數(shù)據(jù)量很大被冒,大到按個(gè)節(jié)點(diǎn)無(wú)法存儲(chǔ)军掂,那么這個(gè)時(shí)候就需要分布式存儲(chǔ):將數(shù)據(jù)進(jìn)行劃分放在不同的節(jié)點(diǎn)上,同時(shí)昨悼,為了防止數(shù)據(jù)的丟失蝗锥,每一份數(shù)據(jù)會(huì)保存多分。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)是單點(diǎn)存儲(chǔ)率触,為了在應(yīng)用層透明的情況下分庫(kù)分表终议,會(huì)引用額外的代理層。而對(duì)于NoSql葱蝗,一般天然支持分布式穴张。

一個(gè)簡(jiǎn)化的架構(gòu)圖

下面用一個(gè)不大精確的架構(gòu)圖,盡量還原分布式系統(tǒng)的組成部分(不過(guò)只能體現(xiàn)出技術(shù)两曼,不好體現(xiàn)出理論)

如何學(xué)習(xí)分布式系統(tǒng)皂甘,分布式是什么,這里有很好的解釋悼凑,很全

概念與實(shí)現(xiàn)

那么對(duì)于上面的各種技術(shù)與理論偿枕,業(yè)界有哪些實(shí)現(xiàn)呢,下面進(jìn)行簡(jiǎn)單羅列户辫。

當(dāng)然渐夸,下面的這些實(shí)現(xiàn),小部分我用過(guò)渔欢,知其所以然墓塌;大部分聽(tīng)說(shuō)過(guò),知其然奥额;還有一部分之前聞所未聞苫幢,分類也不一定正確,只是從其他文章抄過(guò)來(lái)的披坏。羅列在這里态坦,以便日后或深或淺的學(xué)習(xí)盐数。

  • 負(fù)載均衡:

Nginx:高性能棒拂、高并發(fā)的web服務(wù)器;功能包括負(fù)載均衡玫氢、反向代理帚屉、靜態(tài)內(nèi)容緩存、訪問(wèn)控制漾峡;工作在應(yīng)用層

LVS: Linux virtual server攻旦,基于集群技術(shù)和Linux操作系統(tǒng)實(shí)現(xiàn)一個(gè)高性能、高可用的服務(wù)器生逸;工作在網(wǎng)絡(luò)層

  • webserver:

Java:Tomcat牢屋,Apache且预,Jboss

Python:gunicorn、uwsgi烙无、twisted锋谐、webpy、tornado

  • service:

SOA截酷、微服務(wù)涮拗、spring boot,django

  • 容器:

docker迂苛,kubernetes

  • cache:

memcache三热、redis等

  • 協(xié)調(diào)中心:

zookeeper、etcd等

zookeeper使用了Paxos協(xié)議Paxos是強(qiáng)一致性三幻,高可用的去中心化分布式就漾。zookeeper的使用場(chǎng)景非常廣泛,之后細(xì)講念搬。

  • rpc框架:

grpc从藤、dubbo、brpc

dubbo是阿里開(kāi)源的Java語(yǔ)言開(kāi)發(fā)的高性能RPC框架锁蠕,在阿里系的諸多架構(gòu)中夷野,都使用了dubbo + spring boot

  • 消息隊(duì)列:

kafka、rabbitMQ荣倾、rocketMQ悯搔、QSP

消息隊(duì)列的應(yīng)用場(chǎng)景:異步處理、應(yīng)用解耦舌仍、流量削鋒和消息通訊

  • 實(shí)時(shí)數(shù)據(jù)平臺(tái):

storm妒貌、akka

  • 離線數(shù)據(jù)平臺(tái):

hadoop、spark

PS: apark铸豁、akka灌曙、kafka都是scala語(yǔ)言寫(xiě)的,看到這個(gè)語(yǔ)言還是很牛逼的

  • dbproxy:

cobar也是阿里開(kāi)源的节芥,在阿里系中使用也非常廣泛在刺,是關(guān)系型數(shù)據(jù)庫(kù)的sharding + replica 代理

  • db:

mysql、oracle头镊、MongoDB蚣驼、HBase

  • 搜索:

elasticsearch、solr

  • 日志:

rsyslog相艇、elk颖杏、flume

總結(jié)

寫(xiě)這篇文章,我曾在網(wǎng)絡(luò)上搜索過(guò)“如何學(xué)習(xí)分布式系統(tǒng)”坛芽,但實(shí)話說(shuō)留储,沒(méi)有很認(rèn)同的答案翼抠。也許,這確實(shí)是一個(gè)難以回答的問(wèn)題获讳。于是机久,我想自己寫(xiě)出一個(gè)答案,但寫(xiě)完這篇文章赔嚎,感覺(jué)自己的回答也很混亂膘盖,也沒(méi)有說(shuō)清楚,不過(guò)對(duì)我自己還是有一些指導(dǎo)意義的尤误,比如侠畔,理清了分布式系統(tǒng)中會(huì)遇到的各種技術(shù)、理論损晤、協(xié)議软棺,以及通過(guò)一個(gè)例子展示他們是如何協(xié)作的,接下來(lái)就是各個(gè)擊破了尤勋。

網(wǎng)上的諸多回答喘落,上來(lái)就是看各種論文,google三大件最冰、paxos什么的瘦棋,個(gè)人覺(jué)得不是很實(shí)用。更好的過(guò)程暖哨,是先有一個(gè)整體的把握赌朋,然后自己思考會(huì)有什么問(wèn)題,帶著問(wèn)題去尋求答案篇裁,在尋求答案的時(shí)候再去看論文沛慢。

另外,也有很多人提到达布,掌握好計(jì)算機(jī)基礎(chǔ)知識(shí)团甲,如操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)黍聂,對(duì)學(xué)習(xí)分布式系統(tǒng)是大有裨益的躺苦,這一點(diǎn)我很贊同。分布式系統(tǒng)解決問(wèn)題的思路是早就有的分冈,很多都是前人研究透的問(wèn)題圾另,思想都是相同的霸株。比如函數(shù)式編程中的map reduce之于Hadoop的MapReduce雕沉,比如磁盤(pán)存儲(chǔ)的raid之于Partition與Replication,比如IPC之于消息隊(duì)列去件。

轉(zhuǎn)載自:https://www.toutiao.com/a6612455047697531395/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1539740796&app=news_article&utm_source=weixin&iid=46538844863&utm_medium=toutiao_android&group_id=6612455047697531395

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坡椒,一起剝皮案震驚了整個(gè)濱河市扰路,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌倔叼,老刑警劉巖汗唱,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異丈攒,居然都是意外死亡哩罪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)巡验,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)际插,“玉大人,你說(shuō)我怎么就攤上這事显设】虺冢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵捕捂,是天一觀的道長(zhǎng)瑟枫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)指攒,這世上最難降的妖魔是什么慷妙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮允悦,結(jié)果婚禮上景殷,老公的妹妹穿的比我還像新娘。我一直安慰自己澡屡,他們只是感情好猿挚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著驶鹉,像睡著了一般绩蜻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上室埋,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天办绝,我揣著相機(jī)與錄音,去河邊找鬼姚淆。 笑死孕蝉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腌逢。 我是一名探鬼主播降淮,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搏讶!你這毒婦竟也來(lái)了佳鳖?” 一聲冷哼從身側(cè)響起霍殴,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎系吩,沒(méi)想到半個(gè)月后来庭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡穿挨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年月弛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片科盛。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尊搬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出土涝,到底是詐尸還是另有隱情佛寿,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布但壮,位于F島的核電站冀泻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蜡饵。R本人自食惡果不足惜弹渔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溯祸。 院中可真熱鬧肢专,春花似錦、人聲如沸焦辅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)筷登。三九已至剃根,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間前方,已是汗流浹背狈醉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惠险,地道東北人苗傅。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像班巩,于是被迫代替她去往敵國(guó)和親渣慕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容