10分鐘讀懂何為分布式嚎京、微服務和集群嗡贺!

先看兩張圖片

圖片發(fā)自簡書App


圖片發(fā)自簡書App

圖片發(fā)自簡書App


圖片發(fā)自簡書App

圖片發(fā)自簡書App

圖片發(fā)自簡書App




一、分布式

小馬正在經(jīng)營一個在線購物網(wǎng)站鞍帝,名叫TT貓诫睬,有商品管理、訂單管理帕涌、用戶管理摄凡、支付管理、購物車等模塊蚓曼,每個模塊部署到獨立的云服務主機亲澡。

現(xiàn)在,程序員小明同學瀏覽TT貓纫版,想買一款牛逼的cherry機械鍵盤來提升自己的工作效率床绪。于是他打開TT貓首頁、搜索商品、瀏覽詳情以及評論癞己、添加購物車膀斋、下單、支付等一系列操作痹雅。小明同學一氣呵成仰担,流暢地完成了購物,當然也花費了不少銀子绩社。

但系統(tǒng)又是如何進行這一系列操作惰匙,如下圖錯綜復雜的調(diào)用關系(自行忽略部分細節(jié))。用戶看不見铃将、摸不著项鬼,但整個下單過程卻行走在網(wǎng)絡之間。

TT貓把所有功能模塊分布部署在不同的地方劲阎,最終完成了用戶一系列的請求绘盟,這大概就是一個分布式系統(tǒng)吧。

圖片發(fā)自簡書App


二悯仙、微服務

博主認為微服務是一種架構(gòu)龄毡,也是在分布式范疇之內(nèi)的。多微才叫微?在分布式系統(tǒng)中锡垄,微服務更加強調(diào)單一職責沦零、輕量級通信(HTTP)、獨立性并且進程隔離货岭。好了路操,沒什么好說的了,實踐出真知千贯,建議大家多多了解 Spring-Cloud相關微服務組件屯仗。

TT貓,每年都會搞一些活動搔谴,比如女生最愛的光棍節(jié)(雙11)魁袜,夜深人靜的時候會瞬間涌入大量用戶,指不定就會把某個服務打趴下敦第。

這時候峰弹,問題來了用戶下單超時,或者直接500錯誤芜果,如何去解決?

圖片發(fā)自簡書App

三鞠呈、負載均衡集群

這種事情怎么可以在如此重要的活動中出現(xiàn)?其實馬爸爸提前購買了多臺服務器,工程師們已分別把各個業(yè)務功能模塊復制部署了多份师幕。

圖片發(fā)自簡書App

每個相同功能的模塊粟按,它們構(gòu)成了一個組诬滩,并以單一系統(tǒng)的模式加以管理。當妹子進行下單操作時灭将,實際上是跟一個集群組發(fā)生關系疼鸟,但系統(tǒng)會確保只跟其中一個發(fā)生了關系,具體跟誰庙曙,集群組有自己的調(diào)度算法空镜,不要擔心跟妹子發(fā)生不了關系。

舉個古代猥瑣而不淫蕩的例子吧捌朴,如果你生活在古代吴攒,年18,未婚砂蔽,高富帥洼怔,急需解決個人生理問題。故左驾,你來到了傳說中的風月場镣隶,咳咳,這個古代可是合法的诡右。這時候老鴇或者大茶壺過來招呼你了安岂,如果沒有特殊要求,你會被帶進一個屋里帆吻,里面有個風塵女子......

圖片發(fā)自簡書App


畫風一轉(zhuǎn)域那,有沒有閃瞎自己的程序員萬年鈦合金狗眼。你可以這么理解猜煮,老鴇就是負載均衡器次员,內(nèi)置調(diào)度算法,風塵女子就是集組其中的一個友瘤。

好了翠肘,言歸正傳,省略號自行腦補辫秧,小伙伴們看到這里可能會問了,平時生產(chǎn)環(huán)境中我們都用什么做負載均衡器?

財大氣粗的用硬件F5

不差錢的使用DNS負載均衡

技術牛逼的用LVS

苦逼的創(chuàng)業(yè)型小公司只能使用Nginx

當然被丧,負載均衡器不止以上幾種盟戏,有興趣的同學自行谷歌了解。

《論知行》篇中說:知其然知其所以然甥桂,簡單說下這幾種負載均衡器到底是如何行走于網(wǎng)絡中的吧柿究,學過網(wǎng)絡的朋友大概都清楚七層網(wǎng)絡模型。

首先一張圖黄选,讓大家重溫一下大學基礎課程蝇摸。

圖片發(fā)自簡書App

在每一層都工作著不同的設備婶肩,比如財大氣粗,不差錢的國企使用的F5工作在4-7層貌夕,一般互聯(lián)網(wǎng)企業(yè)使用的LVS工作在傳輸層律歼,使用最廣泛的Nginx工作在應用層。

最后來聊一下DNS負載均衡啡专,雖然DNS最原始也是最簡單的方法险毁,但是DNS負載均衡的控制權(quán)在域名服務商手里,NDS存在多級解析们童,緩存A記錄的問題畔况,以及網(wǎng)站自身無法做更多的管理。這樣導致了一般中小公司很少使用慧库。

當然跷跪,自身實力夠硬,DNS負載均衡也是個不錯的選擇齐板。下圖是檢測TT貓域名的A記錄得到的部分信息吵瞻,僅供參考,自行領悟覆积。

圖片發(fā)自簡書App


四听皿、高可用集群

圖片發(fā)自簡書App


既然是集群,就不能夠出現(xiàn)單點故障宽档,如果大家關注云服務尉姨,可能會接觸到以下詞匯,“雙機熱備”吗冤,“兩地三中心”等等詞匯又厉。

雙機熱備是高可用的一種體現(xiàn)形式,如上圖所示椎瘟,生產(chǎn)環(huán)境中我們存在兩個負載均衡節(jié)點覆致,主節(jié)點處于激活狀態(tài),另一個節(jié)點處于備用狀態(tài)肺蔚,當主節(jié)點意外宕機煌妈,可以通過keepalived檢測并迅速切換到備用服務,保障業(yè)務正常運轉(zhuǎn)宣羊。至于兩地三中心璧诵,下圖可能會讓大家理解得更加透徹,圖片源于網(wǎng)絡仇冯。

五之宿、彈性云

小馬哥為了準備雙十一,購置了大量服務器苛坚,但活動一過比被,平時的用戶訪問量并不能滿足服務器的接客能力色难,導致大量服務器處于空窗期。

這還了得等缀,不能閑著啊枷莉,精明的小馬哥一拍腦袋,組建了TT云團隊项滑。通過多年的努力開發(fā)了按量付費云依沮、彈性IP、共享帶寬等等產(chǎn)品為中小企業(yè)開源節(jié)流枪狂。

六危喉、故障轉(zhuǎn)移

小明同學覺得這款鍵盤不錯,美滋滋的點擊購買按鈕州疾,突然跳到了登陸頁面辜限。

圖片發(fā)自簡書App

什么鬼,褲子我都脫了严蓖,你就給我看這個?普通用戶可能不會覺得有什么問題薄嫡,重新登陸一次就是了。但小明作為一只嚴謹?shù)某绦蛟晨藕肱靼灼渲械降装l(fā)生了什么毫深。

經(jīng)過仔細的查閱資料分析,小明得出了以下結(jié)論:

發(fā)生以上故障毒姨,小明以為自己下單的那臺服務掛機了哑蔫,請求被分發(fā)到另一臺服務上,但為什么會跳到登陸頁面呢?作為一名程序員弧呐,小明清楚的知道服務分為有狀態(tài)和無狀態(tài)的闸迷,盡管我們平時的HTTP請求是無狀態(tài)的,但是一般會通過cookie或者session來確定用戶狀態(tài)俘枫。

到這里腥沽,各位看官應該明白到底是個什么鬼了吧。就拿我們比較熟悉的Tomcat來說鸠蚪,我們的用戶信息一般存儲在session中今阳,而session存儲在Tomcat內(nèi)存中。瀏覽器通過cookie中的JSESSIONID來與服務器進行認證茅信。

然而服務器掛了酣栈,下單請求被分發(fā)到另一臺服務,自然小明再也找不到他的session了汹押。

小明同學把問題反饋給了TT貓,小馬哥一看這還得了起便,集群都做了還差這點棚贾,于是趕緊叫工程師們拿出解決方案窖维。

工程師最終提出了兩種方案:

服務器用戶狀態(tài)復制(成本大,需要軟硬件支持妙痹,有延遲铸史,存在失敗的風險)

統(tǒng)一存儲用戶狀態(tài)(我不說話,我就笑笑)

圖片發(fā)自簡書App


最終怯伊,工程師們采用第二種方案琳轿,使用Redis存儲用戶狀態(tài)數(shù)據(jù)。

知識補充

最近接觸并使用了阿里云的負載均衡SLB 耿芹,大體了解了一下TT貓的負載均衡實現(xiàn)崭篡,以下架構(gòu)實現(xiàn)源于TT貓。

負載均衡采用集群部署吧秕,可實現(xiàn)會話同步琉闪,以消除服務器單點故障,提升冗余砸彬,保證服務的穩(wěn)定性颠毙。阿里云當前提供四層(TCP協(xié)議和UDP協(xié)議)和七層(HTTP和HTTPS協(xié)議)的負載均衡服務。

四層采用開源軟件LVS(Linux Virtual Server)+ keepalived的方式實現(xiàn)負載均衡砂碉。

七層采用Tengine實現(xiàn)負載均衡蛀蜜。

圖片發(fā)自簡書App


如下圖所示,各個地域的四層負載均衡實際上是由多臺LVS機器部署成一個LVS集群來運行的增蹭。采用集群部署模式極大地保證了異常情況下負載均衡服務的可用性滴某、穩(wěn)定性與可擴展性。

LVS集群內(nèi)的每臺LVS都會進行會話沪铭,通過組播報文同步到該集群內(nèi)的其它LVS機器上壮池,從而實現(xiàn)LVS集群內(nèi)各臺機器間的會話同步。如下圖所示杀怠,當客戶端向服務端傳輸三個數(shù)據(jù)包后椰憋,在LVS1上建立的會話A開始同步到其它LVS機器上。圖中實線表示現(xiàn)有的連接赔退,圖中虛線表示當LVS1出現(xiàn)故障或進行維護時橙依,這部分流量會走到一臺可以正常運行的機器LVS2上。因而負載均衡集群支持熱升級硕旗,并且在機器故障和集群維護時最大程度對用戶透明窗骑,不影響用戶業(yè)務。

圖片發(fā)自簡書App
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漆枚,一起剝皮案震驚了整個濱河市创译,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌墙基,老刑警劉巖软族,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刷喜,死亡現(xiàn)場離奇詭異,居然都是意外死亡立砸,警方通過查閱死者的電腦和手機掖疮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颗祝,“玉大人浊闪,你說我怎么就攤上這事÷荽粒” “怎么了搁宾?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長温峭。 經(jīng)常有香客問我猛铅,道長,這世上最難降的妖魔是什么凤藏? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任奸忽,我火速辦了婚禮,結(jié)果婚禮上揖庄,老公的妹妹穿的比我還像新娘栗菜。我一直安慰自己,他們只是感情好蹄梢,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布疙筹。 她就那樣靜靜地躺著,像睡著了一般禁炒。 火紅的嫁衣襯著肌膚如雪而咆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天幕袱,我揣著相機與錄音暴备,去河邊找鬼。 笑死们豌,一個胖子當著我的面吹牛涯捻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播望迎,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼障癌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辩尊?” 一聲冷哼從身側(cè)響起涛浙,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝗拿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晾捏,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年哀托,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劳秋。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡仓手,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出玻淑,到底是詐尸還是另有隱情嗽冒,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響绍昂,放射性物質(zhì)發(fā)生泄漏洽糟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一锦亦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦阳准、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至括儒,卻和暖如春绕沈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帮寻。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工乍狐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人规婆。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓澜躺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抒蚜。 傳聞我的和親對象是個殘疾皇子掘鄙,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

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