新聞中心
3分鐘讀懂何為分布式、微服務(wù)和集群!
作者:張志朋 2017-11-08 09:57:00
服務(wù)器
分布式 微服務(wù)是一種架構(gòu),也是在分布式范疇之內(nèi)的。多微才叫微?在分布式系統(tǒng)中,微服務(wù)更加強(qiáng)調(diào)單一職責(zé)、輕量級(jí)通信(HTTP)、獨(dú)立性并且進(jìn)程隔離。好了,沒(méi)什么好說(shuō)的了,實(shí)踐出真知,建議大家多多了解 Spring-Cloud相關(guān)微服務(wù)組件。

10余年的寶應(yīng)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整寶應(yīng)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“寶應(yīng)網(wǎng)站設(shè)計(jì)”,“寶應(yīng)網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
一、分布式
小馬正在經(jīng)營(yíng)一個(gè)在線購(gòu)物網(wǎng)站,名叫TT貓,有商品管理、訂單管理、用戶管理、支付管理、購(gòu)物車等模塊,每個(gè)模塊部署到獨(dú)立的云服務(wù)主機(jī)。
現(xiàn)在,程序員小明同學(xué)瀏覽TT貓,想買一款牛逼的cherry機(jī)械鍵盤(pán)來(lái)提升自己的工作效率。于是他打開(kāi)TT貓首頁(yè)、搜索商品、瀏覽詳情以及評(píng)論、添加購(gòu)物車、下單、支付等一系列操作。小明同學(xué)一氣呵成,流暢地完成了購(gòu)物,當(dāng)然也花費(fèi)了不少銀子。
但系統(tǒng)又是如何進(jìn)行這一系列操作,如下圖錯(cuò)綜復(fù)雜的調(diào)用關(guān)系(自行忽略部分細(xì)節(jié))。用戶看不見(jiàn)、摸不著,但整個(gè)下單過(guò)程卻行走在網(wǎng)絡(luò)之間。
TT貓把所有功能模塊分布部署在不同的地方,最終完成了用戶一系列的請(qǐng)求,這大概就是一個(gè)分布式系統(tǒng)吧。
二、微服務(wù)
博主認(rèn)為微服務(wù)是一種架構(gòu),也是在分布式范疇之內(nèi)的。多微才叫微?在分布式系統(tǒng)中,微服務(wù)更加強(qiáng)調(diào)單一職責(zé)、輕量級(jí)通信(HTTP)、獨(dú)立性并且進(jìn)程隔離。好了,沒(méi)什么好說(shuō)的了,實(shí)踐出真知,建議大家多多了解 Spring-Cloud相關(guān)微服務(wù)組件。
TT貓,每年都會(huì)搞一些活動(dòng),比如女生最愛(ài)的光棍節(jié)(雙11),夜深人靜的時(shí)候會(huì)瞬間涌入大量用戶,指不定就會(huì)把某個(gè)服務(wù)打趴下。
這時(shí)候,問(wèn)題來(lái)了用戶下單超時(shí),或者直接500錯(cuò)誤,如何去解決?
三、負(fù)載均衡集群
這種事情怎么可以在如此重要的活動(dòng)中出現(xiàn)?其實(shí)馬爸爸提前購(gòu)買了多臺(tái)服務(wù)器,工程師們已分別把各個(gè)業(yè)務(wù)功能模塊復(fù)制部署了多份。
每個(gè)相同功能的模塊,它們構(gòu)成了一個(gè)組,并以單一系統(tǒng)的模式加以管理。當(dāng)妹子進(jìn)行下單操作時(shí),實(shí)際上是跟一個(gè)集群組發(fā)生關(guān)系,但系統(tǒng)會(huì)確保只跟其中一個(gè)發(fā)生了關(guān)系,具體跟誰(shuí),集群組有自己的調(diào)度算法,不要擔(dān)心跟妹子發(fā)生不了關(guān)系。
舉個(gè)古代猥瑣而不淫蕩的例子吧,如果你生活在古代,年18,未婚,高富帥,急需解決個(gè)人生理問(wèn)題。故,你來(lái)到了傳說(shuō)中的風(fēng)月場(chǎng),咳咳,這個(gè)古代可是合法的。這時(shí)候老鴇或者大茶壺過(guò)來(lái)招呼你了,如果沒(méi)有特殊要求,你會(huì)被帶進(jìn)一個(gè)屋里,里面有個(gè)風(fēng)塵女子......
畫(huà)風(fēng)一轉(zhuǎn),有沒(méi)有閃瞎自己的程序員萬(wàn)年鈦合金狗眼。你可以這么理解,老鴇就是負(fù)載均衡器,內(nèi)置調(diào)度算法,風(fēng)塵女子就是集組其中的一個(gè)。
好了,言歸正傳,省略號(hào)自行腦補(bǔ),小伙伴們看到這里可能會(huì)問(wèn)了,平時(shí)生產(chǎn)環(huán)境中我們都用什么做負(fù)載均衡器?
財(cái)大氣粗的用硬件F5
不差錢(qián)的使用DNS負(fù)載均衡
技術(shù)牛逼的用LVS
苦逼的創(chuàng)業(yè)型小公司只能使用Nginx
當(dāng)然,負(fù)載均衡器不止以上幾種,有興趣的同學(xué)自行谷歌了解。
《論知行》篇中說(shuō):知其然知其所以然,簡(jiǎn)單說(shuō)下這幾種負(fù)載均衡器到底是如何行走于網(wǎng)絡(luò)中的吧,學(xué)過(guò)網(wǎng)絡(luò)的朋友大概都清楚七層網(wǎng)絡(luò)模型。
首先一張圖,讓大家重溫一下大學(xué)基礎(chǔ)課程。
有沒(méi)有瞬間課堂書(shū)本的感覺(jué),不過(guò)癮?再來(lái)一張TCP/IP五層模型。
在每一層都工作著不同的設(shè)備,比如財(cái)大氣粗,不差錢(qián)的國(guó)企使用的F5工作在4-7層,一般互聯(lián)網(wǎng)企業(yè)使用的LVS工作在傳輸層,使用最廣泛的Nginx工作在應(yīng)用層。
最后來(lái)聊一下DNS負(fù)載均衡,雖然DNS最原始也是最簡(jiǎn)單的方法,但是DNS負(fù)載均衡的控制權(quán)在域名服務(wù)商手里,NDS存在多級(jí)解析,緩存A記錄的問(wèn)題,以及網(wǎng)站自身無(wú)法做更多的管理。這樣導(dǎo)致了一般中小公司很少使用。
當(dāng)然,自身實(shí)力夠硬,DNS負(fù)載均衡也是個(gè)不錯(cuò)的選擇。下圖是檢測(cè)TT貓域名的A記錄得到的部分信息,僅供參考,自行領(lǐng)悟。
四、高可用集群
既然是集群,就不能夠出現(xiàn)單點(diǎn)故障,如果大家關(guān)注云服務(wù),可能會(huì)接觸到以下詞匯,“雙機(jī)熱備”,“兩地三中心”等等詞匯。
雙機(jī)熱備是高可用的一種體現(xiàn)形式,如上圖所示,生產(chǎn)環(huán)境中我們存在兩個(gè)負(fù)載均衡節(jié)點(diǎn),主節(jié)點(diǎn)處于激活狀態(tài),另一個(gè)節(jié)點(diǎn)處于備用狀態(tài),當(dāng)主節(jié)點(diǎn)意外宕機(jī),可以通過(guò)keepalived檢測(cè)并迅速切換到備用服務(wù),保障業(yè)務(wù)正常運(yùn)轉(zhuǎn)。至于兩地三中心,下圖可能會(huì)讓大家理解得更加透徹,圖片源于網(wǎng)絡(luò)。
五、彈性云
小馬哥為了準(zhǔn)備雙十一,購(gòu)置了大量服務(wù)器,但活動(dòng)一過(guò),平時(shí)的用戶訪問(wèn)量并不能滿足服務(wù)器的接客能力,導(dǎo)致大量服務(wù)器處于空窗期。
這還了得,不能閑著啊,精明的小馬哥一拍腦袋,組建了TT云團(tuán)隊(duì)。通過(guò)多年的努力開(kāi)發(fā)了按量付費(fèi)云、彈性IP、共享帶寬等等產(chǎn)品為中小企業(yè)開(kāi)源節(jié)流。
六、故障轉(zhuǎn)移
小明同學(xué)覺(jué)得這款鍵盤(pán)不錯(cuò),美滋滋的點(diǎn)擊購(gòu)買按鈕,突然跳到了登陸頁(yè)面。
什么鬼,褲子我都脫了,你就給我看這個(gè)?普通用戶可能不會(huì)覺(jué)得有什么問(wèn)題,重新登陸一次就是了。但小明作為一只嚴(yán)謹(jǐn)?shù)某绦蛟常肱靼灼渲械降装l(fā)生了什么。
經(jīng)過(guò)仔細(xì)的查閱資料分析,小明得出了以下結(jié)論:
發(fā)生以上故障,小明以為自己下單的那臺(tái)服務(wù)掛機(jī)了,請(qǐng)求被分發(fā)到另一臺(tái)服務(wù)上,但為什么會(huì)跳到登陸頁(yè)面呢?作為一名程序員,小明清楚的知道服務(wù)分為有狀態(tài)和無(wú)狀態(tài)的,盡管我們平時(shí)的HTTP請(qǐng)求是無(wú)狀態(tài)的,但是一般會(huì)通過(guò)cookie或者session來(lái)確定用戶狀態(tài)。
到這里,各位看官應(yīng)該明白到底是個(gè)什么鬼了吧。就拿我們比較熟悉的Tomcat來(lái)說(shuō),我們的用戶信息一般存儲(chǔ)在session中,而session存儲(chǔ)在Tomcat內(nèi)存中。瀏覽器通過(guò)cookie中的JSESSIONID來(lái)與服務(wù)器進(jìn)行認(rèn)證。
然而服務(wù)器掛了,下單請(qǐng)求被分發(fā)到另一臺(tái)服務(wù),自然小明再也找不到他的session了。
小明同學(xué)把問(wèn)題反饋給了TT貓,小馬哥一看這還得了,集群都做了還差這點(diǎn),于是趕緊叫工程師們拿出解決方案。
工程師最終提出了兩種方案:
服務(wù)器用戶狀態(tài)復(fù)制(成本大,需要軟硬件支持,有延遲,存在失敗的風(fēng)險(xiǎn))
統(tǒng)一存儲(chǔ)用戶狀態(tài)(我不說(shuō)話,我就笑笑)
最終,工程師們采用第二種方案,使用Redis存儲(chǔ)用戶狀態(tài)數(shù)據(jù)。
知識(shí)補(bǔ)充
最近接觸并使用了阿里云的負(fù)載均衡SLB ,大體了解了一下TT貓的負(fù)載均衡實(shí)現(xiàn),以下架構(gòu)實(shí)現(xiàn)源于TT貓。
負(fù)載均衡采用集群部署,可實(shí)現(xiàn)會(huì)話同步,以消除服務(wù)器單點(diǎn)故障,提升冗余,保證服務(wù)的穩(wěn)定性。阿里云當(dāng)前提供四層(TCP協(xié)議和UDP協(xié)議)和七層(HTTP和HTTPS協(xié)議)的負(fù)載均衡服務(wù)。
四層采用開(kāi)源軟件LVS(Linux Virtual Server)+ keepalived的方式實(shí)現(xiàn)負(fù)載均衡。
七層采用Tengine實(shí)現(xiàn)負(fù)載均衡。
如下圖所示,各個(gè)地域的四層負(fù)載均衡實(shí)際上是由多臺(tái)LVS機(jī)器部署成一個(gè)LVS集群來(lái)運(yùn)行的。采用集群部署模式極大地保證了異常情況下負(fù)載均衡服務(wù)的可用性、穩(wěn)定性與可擴(kuò)展性。
LVS集群內(nèi)的每臺(tái)LVS都會(huì)進(jìn)行會(huì)話,通過(guò)組播報(bào)文同步到該集群內(nèi)的其它LVS機(jī)器上,從而實(shí)現(xiàn)LVS集群內(nèi)各臺(tái)機(jī)器間的會(huì)話同步。如下圖所示,當(dāng)客戶端向服務(wù)端傳輸三個(gè)數(shù)據(jù)包后,在LVS1上建立的會(huì)話A開(kāi)始同步到其它LVS機(jī)器上。圖中實(shí)線表示現(xiàn)有的連接,圖中虛線表示當(dāng)LVS1出現(xiàn)故障或進(jìn)行維護(hù)時(shí),這部分流量會(huì)走到一臺(tái)可以正常運(yùn)行的機(jī)器LVS2上。因而負(fù)載均衡集群支持熱升級(jí),并且在機(jī)器故障和集群維護(hù)時(shí)最大程度對(duì)用戶透明,不影響用戶業(yè)務(wù)。
當(dāng)前文章:3分鐘讀懂何為分布式、微服務(wù)和集群!
當(dāng)前網(wǎng)址:http://fisionsoft.com.cn/article/djecccj.html


咨詢
建站咨詢
