新聞中心
一、分布式
小馬正在經(jīng)營一個在線購物網(wǎng)站,名叫TT貓,有商品管理、訂單管理、用戶管理、支付管理、購物車等模塊,每個模塊部署到獨立的云服務主機。

現(xiàn)在,程序員小明同學瀏覽TT貓,想買一款牛逼的cherry機械鍵盤來提升自己的工作效率。于是他打開TT貓首頁、搜索商品、瀏覽詳情以及評論、添加購物車、下單、支付等一系列操作。小明同學一氣呵成,流暢地完成了購物,當然也花費了不少銀子。
但系統(tǒng)又是如何進行這一系列操作,如下圖錯綜復雜的調(diào)用關(guān)系(自行忽略部分細節(jié))。用戶看不見、摸不著,但整個下單過程卻行走在網(wǎng)絡之間。
TT貓把所有功能模塊分布部署在不同的地方,最終完成了用戶一系列的請求,這大概就是一個分布式系統(tǒng)吧。
二、微服務
博主認為微服務是一種架構(gòu),也是在分布式范疇之內(nèi)的。多微才叫微?在分布式系統(tǒng)中,微服務更加強調(diào)單一職責、輕量級通信(HTTP)、獨立性并且進程隔離。好了,沒什么好說的了,實踐出真知,建議大家多多了解 Spring-Cloud相關(guān)微服務組件。
TT貓,每年都會搞一些活動,比如女生最愛的光棍節(jié)(雙11),夜深人靜的時候會瞬間涌入大量用戶,指不定就會把某個服務打趴下。
這時候,問題來了用戶下單超時,或者直接500錯誤,如何去解決?
三、負載均衡集群
這種事情怎么可以在如此重要的活動中出現(xiàn)?其實馬爸爸提前購買了多臺服務器,工程師們已分別把各個業(yè)務功能模塊復制部署了多份。
每個相同功能的模塊,它們構(gòu)成了一個組,并以單一系統(tǒng)的模式加以管理。當妹子進行下單操作時,實際上是跟一個集群組發(fā)生關(guān)系,但系統(tǒng)會確保只跟其中一個發(fā)生了關(guān)系,具體跟誰,集群組有自己的調(diào)度算法,不要擔心跟妹子發(fā)生不了關(guān)系。
舉個古代猥瑣而不淫蕩的例子吧,如果你生活在古代,年18,未婚,高富帥,急需解決個人生理問題。故,你來到了傳說中的風月場,咳咳,這個古代可是合法的。這時候老鴇或者大茶壺過來招呼你了,如果沒有特殊要求,你會被帶進一個屋里,里面有個風塵女子……
畫風一轉(zhuǎn),有沒有閃瞎自己的程序員萬年鈦合金狗眼。你可以這么理解,老鴇就是負載均衡器,內(nèi)置調(diào)度算法,風塵女子就是集組其中的一個。
好了,言歸正傳,省略號自行腦補,小伙伴們看到這里可能會問了,平時生產(chǎn)環(huán)境中我們都用什么做負載均衡器?
-
財大氣粗的用硬件F5
-
不差錢的使用DNS負載均衡
-
技術(shù)牛逼的用LVS
-
苦逼的創(chuàng)業(yè)型小公司只能使用Nginx
當然,負載均衡器不止以上幾種,有興趣的同學自行谷歌了解。
《論知行》篇中說:知其然知其所以然,簡單說下這幾種負載均衡器到底是如何行走于網(wǎng)絡中的吧,學過網(wǎng)絡的朋友大概都清楚七層網(wǎng)絡模型。
首先一張圖,讓大家重溫一下大學基礎(chǔ)課程。
有沒有瞬間課堂書本的感覺,不過癮?再來一張TCP/IP五層模型。
在每一層都工作著不同的設(shè)備,比如財大氣粗,不差錢的國企使用的F5工作在4-7層,一般互聯(lián)網(wǎng)企業(yè)使用的LVS工作在傳輸層,使用最廣泛的Nginx工作在應用層。
最后來聊一下DNS負載均衡,雖然DNS最原始也是最簡單的方法,但是DNS負載均衡的控制權(quán)在域名服務商手里,NDS存在多級解析,緩存A記錄的問題,以及網(wǎng)站自身無法做更多的管理。這樣導致了一般中小公司很少使用。
當然,自身實力夠硬,DNS負載均衡也是個不錯的選擇。下圖是檢測TT貓域名的A記錄得到的部分信息,僅供參考,自行領(lǐng)悟。
四、高可用集群
既然是集群,就不能夠出現(xiàn)單點故障,如果大家關(guā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)移
小明同學覺得這款鍵盤不錯,美滋滋的點擊購買按鈕,突然跳到了登陸頁面。
什么鬼,褲子我都脫了,你就給我看這個?普通用戶可能不會覺得有什么問題,重新登陸一次就是了。但小明作為一只嚴謹?shù)某绦蛟?,他想弄明白其中到底發(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)(我不說話,我就笑笑)
最終,工程師們采用第二種方案,使用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)負載均衡。
如下圖所示,各個地域的四層負載均衡實際上是由多臺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è)務。
分享文章:詳解分布式、微服務和集群
分享網(wǎng)址:http://www.dlmjj.cn/article/cocjdie.html


咨詢
建站咨詢
