什么是分布式系統(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)存屠列、加磁盤、使用更好的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)沒有的問(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帝蒿、斷電、磁盤損壞)是個(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ù)芜飘,最為常見的就是分布式存儲(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é)作的奔浅。
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)中,沒有最佳的選擇试溯,都是需要權(quá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)沒有收到節(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序厉、斷電,不確定磁盤什么時(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è)觀顽耳,覺得這個(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》一書中,作者是這么說(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)是不同的淮阐,最常見的:高并發(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ā)性很高很多幕垦。
?針對(duì)上面的技術(shù)我特意整理了一下丢氢,有很多技術(shù)不是靠幾句話能講清楚,所以干脆找朋友錄制了一些視頻先改,很多問(wèn)題其實(shí)答案很簡(jiǎn)單疚察,但是背后的思考和邏輯不簡(jiǎn)單,要做到知其然還要知其所以然仇奶。如果想學(xué)習(xí)Java工程化貌嫡、高性能及分布式、深入淺出该溯。微服務(wù)岛抄、Spring,MyBatis狈茉,Netty源碼分析的朋友可以加我的Java進(jìn)階群:582505643夫椭,群里有阿里大牛直播講解技術(shù),以及Java大型互聯(lián)網(wǎng)技術(shù)的視頻免費(fèi)分享給大家氯庆。
假設(shè)這是一個(gè)對(duì)外提供服務(wù)的大型分布式系統(tǒng),用戶連接到系統(tǒng)仁讨,做一些操作羽莺,產(chǎn)生一些需要存儲(chǔ)的數(shù)據(jù),那么在這個(gè)過(guò)程中洞豁,會(huì)遇到哪些組件禽翼、理論與協(xié)議呢
用戶使用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ù)喉钢,那么很可能是有緩存的姆打,即分布式緩存,如果緩存沒有命中出牧,那么需要去數(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)用都手寫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é)互婿,增加新的接口也更加方便。
針對(duì)上面的技術(shù)我特意整理了一下辽狈,有很多技術(shù)不是靠幾句話能講清楚慈参,所以干脆找朋友錄制了一些視頻,很多問(wèn)題其實(shí)答案很簡(jiǎn)單刮萌,但是背后的思考和邏輯不簡(jiǎn)單驮配,要做到知其然還要知其所以然蓖宦。如果想學(xué)習(xí)Java工程化黍氮、高性能及分布式、深入淺出剩辟。微服務(wù)元扔、Spring躯保,MyBatis,Netty源碼分析的朋友可以加我的Java進(jìn)階群:582505643澎语,群里有阿里大牛直播講解技術(shù)途事,以及Java大型互聯(lián)網(wǎng)技術(shù)的視頻免費(fèi)分享給大家。
一個(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)單的辦法就是配置文件寫死,或者寫入到數(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)中心拉取地址。
從上可以看見蜘渣,協(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è)不大精確的架構(gòu)圖挽唉,盡量還原分布式系統(tǒng)的組成部分(不過(guò)只能體現(xiàn)出技術(shù),不好體現(xiàn)出理論)
那么對(duì)于上面的各種技術(shù)與理論筷狼,業(yè)界有哪些實(shí)現(xiàn)呢瓶籽,下面進(jìn)行簡(jiǎn)單羅列。
當(dāng)然埂材,下面的這些實(shí)現(xiàn)塑顺,小部分我用過(guò),知其所以然;大部分聽說(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是阿里開源的Java語(yǔ)言開發(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ǔ)言寫的回铛,看到這個(gè)語(yǔ)言還是很牛逼的
dbproxy:
cobar也是阿里開源的狗准,在阿里系中使用也非常廣泛,是關(guān)系型數(shù)據(jù)庫(kù)的sharding + replica 代理
db:
mysql勺届、oracle驶俊、MongoDB、HBase
搜索:
elasticsearch免姿、solr
日志:
rsyslog饼酿、elk、flume
關(guān)于分布式架構(gòu)大概會(huì)總結(jié)到
概念與實(shí)現(xiàn)
那么對(duì)于上面的各種技術(shù)與理論胚膊,業(yè)界有哪些實(shí)現(xiàn)呢故俐,下面進(jìn)行簡(jiǎn)單羅列。
當(dāng)然紊婉,下面的這些實(shí)現(xiàn)药版,小部分我用過(guò),知其所以然喻犁;大部分聽說(shuō)過(guò)槽片,知其然;還有一部分之前聞所未聞肢础,分類也不一定正確还栓,只是從其他文章抄過(guò)來(lái)的。羅列在這里传轰,以便日后或深或淺的學(xué)習(xí)剩盒。