分布式系統(tǒng)進化史

一個成熟的大型分布式系統(tǒng)醇王,并不是在其開始時呢燥,就設(shè)計為這樣,而是在之后的不斷優(yōu)化寓娩,迭代而不斷的進化成熟的叛氨。

在一個系統(tǒng)剛開始運行時,可能用戶數(shù)棘伴,業(yè)務(wù)處理等都還比較簡單寞埠,因此由一臺服務(wù)器就能支撐起其正常的業(yè)務(wù)處理。其系統(tǒng)架構(gòu)模型可能如下所示:

  1. 單應(yīng)用架構(gòu)
image

其應(yīng)用服務(wù)和數(shù)據(jù)庫服務(wù)焊夸,都部署在同一臺服務(wù)器上仁连。此時應(yīng)用的實現(xiàn)簡單,能夠快速上線阱穗,為用戶提供服務(wù)饭冬。比如很簡單的可以使用Tomcat+Mysql部署在同一臺機器上使鹅,提供服務(wù)。

但是隨著用戶數(shù)量的增加昌抠,業(yè)務(wù)內(nèi)容的不斷增加患朱。其應(yīng)用服務(wù)器的響應(yīng)可能會慢慢變得遲緩,此時需要提升應(yīng)用服務(wù)器的負載能力扰魂,保證用戶的使用體驗麦乞。因此需要采用更好的系統(tǒng)架構(gòu)

  1. 應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器分離:

應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器的分離,使得應(yīng)用能夠獲得整個服務(wù)器的CPU資源來響應(yīng)用戶請求劝评。應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器的分離姐直,也大大減少了應(yīng)用的宕機風(fēng)險。此時我們開始關(guān)注服務(wù)器的管理了蒋畜。

image
  1. 應(yīng)用服務(wù)器集群:

隨著用戶量的繼續(xù)增加声畏,一臺應(yīng)用服務(wù)器可能不能滿足系統(tǒng)的需求,因此我們需要采用應(yīng)用服務(wù)器的集群架構(gòu)姻成。

image

通過將用戶的請求分流到不同的應(yīng)用服務(wù)器插龄,從而提高整個系統(tǒng)的負載能力,保證用戶的使用體驗科展。

但是當應(yīng)用服務(wù)器采用集群結(jié)構(gòu)后均牢,遇到了之前不存在的新問題,比如:

(1):用戶的請求由誰來決定才睹,分發(fā)給哪個服務(wù)器來處理(負載均衡問題)徘跪。

(2):用戶在使用網(wǎng)站的過程中,如何維護用戶session琅攘,保證不同的服務(wù)器響應(yīng)請求時垮庐,能保證用戶Session數(shù)據(jù)共享。

因此這個應(yīng)用集群架構(gòu)中坞琴,需要在應(yīng)用服務(wù)器之上哨查,新增一層進行負載均衡。

image

負載均衡器剧辐,可以分為軟負載和硬負載寒亥。

軟負載: Nginx或Apache等。

硬負載:F5等.

Session共享荧关,可通過配置Tomcat的session共享來解決护盈。但是由于Session在服務(wù)器間的復(fù)制,占用浪費帶寬比較嚴重羞酗,此時建議Tomcat的實例不能過多。

  1. 數(shù)據(jù)庫服務(wù)器讀寫分離:

在完成了應(yīng)用服務(wù)器的集群分布后紊服,此時的系統(tǒng)瓶頸就卡在數(shù)據(jù)庫服務(wù)這塊了檀轨。在對數(shù)據(jù)庫服務(wù)器進行分布式集群時胸竞,很容易碰到多個數(shù)據(jù)庫實例上的數(shù)據(jù)不一致的問題,因此一般我們會根據(jù)提供的應(yīng)用服務(wù)具體類型参萄,綜合考慮應(yīng)用提供的讀寫服務(wù)頻率等特點卫枝。可以考慮先把數(shù)據(jù)庫服務(wù)的讀寫進行分離讹挎。

image

此時校赤,系統(tǒng)遇到的問題是:

(1):主從服務(wù)器上的數(shù)據(jù)同步⊥怖#可以使用Mysql自帶的主從復(fù)制马篮。

(2):可以根據(jù)業(yè)務(wù)選擇對應(yīng)的數(shù)據(jù)庫中間件,屏蔽具體的數(shù)據(jù)庫訪問細節(jié)怜奖,如mycat等浑测。

  1. 使用搜索引擎,緩解數(shù)據(jù)庫讀庫壓力

    根據(jù)具體的業(yè)務(wù)類型歪玲,如果設(shè)計到很多模糊查詢迁央,而且數(shù)據(jù)量比較大,此時可以引入搜索引擎滥崩,如Elasticsearch岖圈。

image

引入了搜索引擎,則需要額外的工作钙皮,如維護索引的構(gòu)建蜂科,數(shù)據(jù)同步到搜索引擎等。

  1. 引入緩存機制

    隨著用戶請求數(shù)量的增加株灸,有一些熱點數(shù)據(jù)崇摄,可能會不斷的被用戶訪問,此時慌烧,可以把這些數(shù)據(jù)放進內(nèi)存中逐抑,既避免訪問數(shù)據(jù)庫,又能加速響應(yīng)用戶請求屹蚊。此時可以開始使用緩存技術(shù)厕氨,比如Redis,Memcache等。

    使用緩存機制汹粤,能夠緩存讀庫壓力命斧,提升應(yīng)用性能,與讀庫相比嘱兼,從緩存中讀取數(shù)據(jù)国葬,也能夠更快的響應(yīng)用戶請求。

    在有些使用場景中,可能需要使用一些數(shù)據(jù)汇四,這些數(shù)據(jù)放在內(nèi)存中不太合適接奈,而放到數(shù)據(jù)庫中又太麻煩,此時可以考慮使用NoSql產(chǎn)品通孽,來代替?zhèn)鹘y(tǒng)的關(guān)系型數(shù)據(jù)庫序宦,保持這些數(shù)據(jù)。

image

在分布式系統(tǒng)中背苦,使用NoSql時互捌,也需要考慮緩存是否支持分布式集群。

  1. 數(shù)據(jù)庫的水平/垂直拆分

    隨著業(yè)務(wù)量和數(shù)據(jù)量的持續(xù)增加行剂,由于所有的數(shù)據(jù)都在同一個數(shù)據(jù)庫中秕噪,數(shù)據(jù)庫表非常多且雜,有些一個表中的數(shù)據(jù)記錄已經(jīng)達到了很大的數(shù)量硼讽。盡管采取了讀寫分離巢价,緩存機制等,但是單個數(shù)據(jù)庫中的并發(fā)連接數(shù)有一個上限固阁,因此對數(shù)據(jù)庫的訪問依然會成為一個瓶頸壤躲。

image

因此需要考慮對數(shù)據(jù)庫進行拆分。

垂直拆分:把不同的業(yè)務(wù)數(shù)據(jù)拆分到不同的數(shù)據(jù)庫中备燃。

水平拆分:把同一張表中的數(shù)據(jù)碉克,拆分到不同的數(shù)據(jù)庫中,水平拆分的原因是某些表中的數(shù)據(jù)量記錄太大并齐,達到了單個數(shù)據(jù)庫的瓶頸漏麦。
  1. 應(yīng)用的拆分

隨著業(yè)務(wù)越來越多,整個應(yīng)用越來越復(fù)雜况褪,工程規(guī)模也越來越大撕贞。此時的管理維護工作量會越來越復(fù)雜〔舛猓可以考慮根據(jù)領(lǐng)域模型捏膨,對系統(tǒng)進行拆分

image

對應(yīng)用進行拆分后,可能有一些基本的操作食侮,在每個子系統(tǒng)中号涯,都會使用到,比如訪問用戶數(shù)據(jù)等锯七,此時可以把這些相同的操作链快,抽象出來,通過提供服務(wù)的方式眉尸,提供給各個子系統(tǒng)使用域蜗。

因此此時遇到的一些新問題是巨双,多個子系統(tǒng)之間如何進行遠程通信。比如通過RPC技術(shù)(dubbo,webservice,hession,heep,RMI等)地消,解決遠程通信問題炉峰。

在系統(tǒng)不斷進化時,整個系統(tǒng)也變得越來越復(fù)雜脉执,管理難度越來越大,同時也會不斷的出現(xiàn)新的技術(shù)戒劫,來解決不斷出現(xiàn)的新問題半夷,如微服務(wù),Docker容器技術(shù)迅细,容器編排等巫橄。

最重要的是,根據(jù)應(yīng)用的實際情況茵典,如用戶量湘换,并發(fā)數(shù),數(shù)據(jù)量等采用最合適的架構(gòu)统阿。

Memo

本文轉(zhuǎn)載于互聯(lián)網(wǎng)彩倚,出處不明,如有侵權(quán)扶平,請聯(lián)系刪除

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帆离,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子结澄,更是在濱河造成了極大的恐慌哥谷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麻献,死亡現(xiàn)場離奇詭異们妥,居然都是意外死亡,警方通過查閱死者的電腦和手機勉吻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門监婶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人餐曼,你說我怎么就攤上這事压储。” “怎么了源譬?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵集惋,是天一觀的道長。 經(jīng)常有香客問我踩娘,道長刮刑,這世上最難降的妖魔是什么喉祭? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮雷绢,結(jié)果婚禮上泛烙,老公的妹妹穿的比我還像新娘。我一直安慰自己翘紊,他們只是感情好蔽氨,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著帆疟,像睡著了一般鹉究。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上自赔,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音柳琢,去河邊找鬼绍妨。 笑死,一個胖子當著我的面吹牛柬脸,可吹牛的內(nèi)容都是我干的他去。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼肖粮,長吁一口氣:“原來是場噩夢啊……” “哼孤页!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涩馆,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤行施,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后魂那,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛾号,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年涯雅,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲜结。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡活逆,死狀恐怖精刷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蔗候,我是刑警寧澤怒允,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站锈遥,受9級特大地震影響纫事,放射性物質(zhì)發(fā)生泄漏勘畔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一丽惶、第九天 我趴在偏房一處隱蔽的房頂上張望炫七。 院中可真熱鬧,春花似錦钾唬、人聲如沸万哪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壤圃。三九已至,卻和暖如春琅轧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背踊挠。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工乍桂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人效床。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓睹酌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剩檀。 傳聞我的和親對象是個殘疾皇子憋沿,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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