分布式與集群,還有RPC

單機(jī)結(jié)構(gòu)

我想大家最最最熟悉的就是單機(jī)結(jié)構(gòu)进萄,一個(gè)系統(tǒng)業(yè)務(wù)量很小的時(shí)候所有的代碼都放在一個(gè)項(xiàng)目中就好了,然后這個(gè)項(xiàng)目部署在一臺(tái)服務(wù)器上就好了锐峭。整個(gè)項(xiàng)目所有的服務(wù)都由這臺(tái)服務(wù)器提供中鼠。這就是單機(jī)結(jié)構(gòu)。

那么沿癞,單機(jī)結(jié)構(gòu)有啥缺點(diǎn)呢援雇?我想缺點(diǎn)是顯而易見的,單機(jī)的處理能力畢竟是有限的椎扬,當(dāng)你的業(yè)務(wù)增長(zhǎng)到一定程度的時(shí)候惫搏,單機(jī)的硬件資源將無法滿足你的業(yè)務(wù)需求。此時(shí)便出現(xiàn)了集群模式蚕涤,往下接著看筐赔。

集群結(jié)構(gòu)

單機(jī)處理到達(dá)瓶頸的時(shí)候,你就把單機(jī)復(fù)制幾份揖铜,這樣就構(gòu)成了一個(gè)“集群”茴丰。集群中每臺(tái)服務(wù)器就叫做這個(gè)集群的一個(gè)“節(jié)點(diǎn)”,所有節(jié)點(diǎn)構(gòu)成了一個(gè)集群。每個(gè)節(jié)點(diǎn)都提供相同的服務(wù)贿肩,那么這樣系統(tǒng)的處理能力就相當(dāng)于提升了好幾倍(有幾個(gè)節(jié)點(diǎn)就相當(dāng)于提升了這么多倍)峦椰。

但問題是用戶的請(qǐng)求究竟由哪個(gè)節(jié)點(diǎn)來處理呢?最好能夠讓此時(shí)此刻負(fù)載較小的節(jié)點(diǎn)來處理汰规,這樣使得每個(gè)節(jié)點(diǎn)的壓力都比較平均汤功。要實(shí)現(xiàn)這個(gè)功能,就需要在所有節(jié)點(diǎn)之前增加一個(gè)“調(diào)度者”的角色控轿,用戶的所有請(qǐng)求都先交給它冤竹,然后它根據(jù)當(dāng)前所有節(jié)點(diǎn)的負(fù)載情況,決定將這個(gè)請(qǐng)求交給哪個(gè)節(jié)點(diǎn)處理茬射。這個(gè)“調(diào)度者”有個(gè)牛逼了名字——負(fù)載均衡服務(wù)器鹦蠕。

集群結(jié)構(gòu)的好處就是系統(tǒng)擴(kuò)展非常容易。如果隨著你們系統(tǒng)業(yè)務(wù)的發(fā)展在抛,當(dāng)前的系統(tǒng)又支撐不住了钟病,那么給這個(gè)集群再增加節(jié)點(diǎn)就行了。但是刚梭,當(dāng)你的業(yè)務(wù)發(fā)展到一定程度的時(shí)候肠阱,你會(huì)發(fā)現(xiàn)一個(gè)問題——無論怎么增加節(jié)點(diǎn),貌似整個(gè)集群性能的提升效果并不明顯了朴读。這時(shí)候屹徘,你就需要使用微服務(wù)結(jié)構(gòu)了。

分布式結(jié)構(gòu)

先來對(duì)前面的知識(shí)點(diǎn)做個(gè)總結(jié)衅金。

從單機(jī)結(jié)構(gòu)到集群結(jié)構(gòu)噪伊,你的代碼基本無需要作任何修改,你要做的僅僅是多部署幾臺(tái)服務(wù)器氮唯,每臺(tái)服務(wù)器上運(yùn)行相同的代碼就行了鉴吹。但是,當(dāng)你要從集群結(jié)構(gòu)演進(jìn)到微服務(wù)結(jié)構(gòu)的時(shí)候惩琉,之前的那套代碼就需要發(fā)生較大的改動(dòng)了豆励。所以對(duì)于新系統(tǒng)我們建議,系統(tǒng)設(shè)計(jì)之初就采用微服務(wù)架構(gòu)瞒渠,這樣后期運(yùn)維的成本更低良蒸。但如果一套老系統(tǒng)需要升級(jí)成微服務(wù)結(jié)構(gòu)的話,那就得對(duì)代碼大動(dòng)干戈了伍玖。所以诚啃,對(duì)于老系統(tǒng)而言,究竟是繼續(xù)保持集群模式私沮,還是升級(jí)成微服務(wù)架構(gòu)始赎,這需要你們的架構(gòu)師深思熟慮和橙、權(quán)衡投入產(chǎn)出比。

OK造垛,下面開始介紹所謂的分布式結(jié)構(gòu)魔招。

分布式結(jié)構(gòu)就是將一個(gè)完整的系統(tǒng),按照業(yè)務(wù)功能五辽,拆分成一個(gè)個(gè)獨(dú)立的子系統(tǒng)办斑,在分布式結(jié)構(gòu)中,每個(gè)子系統(tǒng)就被稱為“服務(wù)”杆逗。這些子系統(tǒng)能夠獨(dú)立運(yùn)行在web容器中乡翅,它們之間通過RPC方式通信。

舉個(gè)例子罪郊,假設(shè)需要開發(fā)一個(gè)在線商城蠕蚜。按照微服務(wù)的思想,我們需要按照功能模塊拆分成多個(gè)獨(dú)立的服務(wù)悔橄,如:用戶服務(wù)靶累、產(chǎn)品服務(wù)、訂單服務(wù)癣疟、后臺(tái)管理服務(wù)挣柬、數(shù)據(jù)分析服務(wù)等等。這一個(gè)個(gè)服務(wù)都是一個(gè)個(gè)獨(dú)立的項(xiàng)目睛挚,可以獨(dú)立運(yùn)行邪蛔。如果服務(wù)之間有依賴關(guān)系,那么通過RPC方式調(diào)用扎狱。

這樣的好處有很多:

· 系統(tǒng)之間的耦合度大大降低侧到,可以獨(dú)立開發(fā)、獨(dú)立部署委乌、獨(dú)立測(cè)試,系統(tǒng)與系統(tǒng)之間的邊界非常明確荣回,排錯(cuò)也變得相當(dāng)容易遭贸,開發(fā)效率大大提升。

· 系統(tǒng)之間的耦合度降低心软,從而系統(tǒng)更易于擴(kuò)展壕吹。我們可以針對(duì)性地?cái)U(kuò)展某些服務(wù)。假設(shè)這個(gè)商城要搞一次大促删铃,下單量可能會(huì)大大提升耳贬,因此我們可以針對(duì)性地提升訂單系統(tǒng)、產(chǎn)品系統(tǒng)的節(jié)點(diǎn)數(shù)量猎唁,而對(duì)于后臺(tái)管理系統(tǒng)咒劲、數(shù)據(jù)分析系統(tǒng)而言,節(jié)點(diǎn)數(shù)量維持原有水平即可。

· 服務(wù)的復(fù)用性更高腐魂。比如帐偎,當(dāng)我們將用戶系統(tǒng)作為單獨(dú)的服務(wù)后,該公司所有的產(chǎn)品都可以使用該系統(tǒng)作為用戶系統(tǒng)蛔屹,無需重復(fù)開發(fā)削樊。

集群是個(gè)物理形態(tài),分布式是個(gè)工作方式兔毒。

只要是一堆機(jī)器漫贞,就可以叫集群,他們是不是一起協(xié)作著干活育叁,這個(gè)誰也不知道迅脐;一個(gè)程序或系統(tǒng),只要運(yùn)行在不同的機(jī)器上擂红,就可以叫分布式仪际,嗯,C/S架構(gòu)也可以叫分布式昵骤。

集群一般是物理集中树碱、統(tǒng)一管理的,而分布式系統(tǒng)則不強(qiáng)調(diào)這一點(diǎn)变秦。

所以成榜,集群可能運(yùn)行著一個(gè)或多個(gè)分布式系統(tǒng),也可能根本沒有運(yùn)行分布式系統(tǒng)蹦玫;分布式系統(tǒng)可能運(yùn)行在一個(gè)集群上赎婚,也可能運(yùn)行在不屬于一個(gè)集群的多臺(tái)(2臺(tái)也算多臺(tái))機(jī)器上。

RPC

RPC是指遠(yuǎn)程過程調(diào)用樱溉,也就是說兩服務(wù)器A,B用部暑在A服想要調(diào)用B服務(wù)器上應(yīng)用提供的函數(shù)/方內(nèi)存空間挣输,不能直接調(diào)用,要通過網(wǎng)絡(luò)來表達(dá)調(diào)用的語義和傳達(dá)調(diào)用的數(shù)據(jù)福贞。


Java Netty 是在TCP(Socket)層對(duì)nio進(jìn)行封裝的框架撩嚼,在RPC框架中可用于解決網(wǎng)絡(luò)傳輸問題。

現(xiàn)在流行的微服務(wù)框架(dubbo挖帘、spring cloud等)完丽,實(shí)際上就是各種各樣的RPC框架。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拇舀,一起剝皮案震驚了整個(gè)濱河市逻族,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌骄崩,老刑警劉巖聘鳞,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件薄辅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡搁痛,警方通過查閱死者的電腦和手機(jī)长搀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸡典,“玉大人源请,你說我怎么就攤上這事〕箍觯” “怎么了谁尸?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)纽甘。 經(jīng)常有香客問我良蛮,道長(zhǎng),這世上最難降的妖魔是什么悍赢? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任决瞳,我火速辦了婚禮,結(jié)果婚禮上左权,老公的妹妹穿的比我還像新娘皮胡。我一直安慰自己,他們只是感情好赏迟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布屡贺。 她就那樣靜靜地躺著,像睡著了一般锌杀。 火紅的嫁衣襯著肌膚如雪甩栈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天糕再,我揣著相機(jī)與錄音量没,去河邊找鬼。 笑死突想,一個(gè)胖子當(dāng)著我的面吹牛殴蹄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒿柳,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼饶套,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼漩蟆!你這毒婦竟也來了垒探?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤怠李,失蹤者是張志新(化名)和其女友劉穎圾叼,沒想到半個(gè)月后蛤克,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夷蚊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年构挤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惕鼓。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筋现,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出箱歧,到底是詐尸還是另有隱情矾飞,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布呀邢,位于F島的核電站洒沦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏价淌。R本人自食惡果不足惜申眼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蝉衣。 院中可真熱鬧括尸,春花似錦、人聲如沸买乃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剪验。三九已至肴焊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間功戚,已是汗流浹背娶眷。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啸臀,地道東北人届宠。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像乘粒,于是被迫代替她去往敵國(guó)和親豌注。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354