如何提升系統(tǒng)的并發(fā)能力之水平擴(kuò)展

(1)客戶端層:典型調(diào)用方是瀏覽器browser或者手機(jī)應(yīng)用APP

(2)反向代理層:系統(tǒng)入口,反向代理

(3)站點(diǎn)應(yīng)用層:實(shí)現(xiàn)核心應(yīng)用邏輯,返回html或者json

(4)服務(wù)層:如果實(shí)現(xiàn)了服務(wù)化,就有這一層

(5)數(shù)據(jù)-緩存層:緩存加速訪問存儲(chǔ)

(6)數(shù)據(jù)-數(shù)據(jù)庫層:數(shù)據(jù)庫固化數(shù)據(jù)存儲(chǔ)


分層水平擴(kuò)展架構(gòu)實(shí)踐

反向代理層的水平擴(kuò)展


反向代理層的水平擴(kuò)展,是通過“DNS輪詢”實(shí)現(xiàn)的:dns-server對(duì)于一個(gè)域名配置了多個(gè)解析ip,每次DNS解析請(qǐng)求來訪問dns-server,會(huì)輪詢返回這些ip。

當(dāng)nginx成為瓶頸的時(shí)候,只要增加服務(wù)器數(shù)量,新增nginx服務(wù)的部署,增加一個(gè)外網(wǎng)ip,就能擴(kuò)展反向代理層的性能,做到理論上的無限高并發(fā)。

站點(diǎn)層的水平擴(kuò)展


站點(diǎn)層的水平擴(kuò)展,是通過“nginx”實(shí)現(xiàn)的。通過修改nginx.conf,可以設(shè)置多個(gè)web后端。

當(dāng)web后端成為瓶頸的時(shí)候,只要增加服務(wù)器數(shù)量,新增web服務(wù)的部署,在nginx配置中配置上新的web后端,就能擴(kuò)展站點(diǎn)層的性能,做到理論上的無限高并發(fā)

服務(wù)層的水平擴(kuò)展


服務(wù)層的水平擴(kuò)展,是通過“服務(wù)連接池”實(shí)現(xiàn)的。

站點(diǎn)層通過RPC-client調(diào)用下游的服務(wù)層RPC-server時(shí),RPC-client中的連接池會(huì)建立與下游服務(wù)多個(gè)連接,當(dāng)服務(wù)成為瓶頸的時(shí)候,只要增加服務(wù)器數(shù)量,新增服務(wù)部署,在RPC-client處建立新的下游服務(wù)連接,就能擴(kuò)展服務(wù)層性能,做到理論上的無限高并發(fā)。如果需要優(yōu)雅的進(jìn)行服務(wù)層自動(dòng)擴(kuò)容,這里可能需要配置中心里服務(wù)自動(dòng)發(fā)現(xiàn)功能的支持。

數(shù)據(jù)層的水平擴(kuò)展

在數(shù)據(jù)量很大的情況下,數(shù)據(jù)層(緩存,數(shù)據(jù)庫)涉及數(shù)據(jù)的水平擴(kuò)展,將原本存儲(chǔ)在一臺(tái)服務(wù)器上的數(shù)據(jù)(緩存,數(shù)據(jù)庫)水平拆分到不同服務(wù)器上去,以達(dá)到擴(kuò)充系統(tǒng)性能的目的

互聯(lián)網(wǎng)數(shù)據(jù)層常見的水平拆分方式有這么幾種,以數(shù)據(jù)庫為例:

按照范圍水平拆分


每一個(gè)數(shù)據(jù)服務(wù),存儲(chǔ)一定范圍的數(shù)據(jù),上圖為例:

user0庫,存儲(chǔ)uid范圍1-1kw

user1庫,存儲(chǔ)uid范圍1kw-2kw

這個(gè)方案的好處是:

(1)規(guī)則簡(jiǎn)單,service只需判斷一下uid范圍就能路由到對(duì)應(yīng)的存儲(chǔ)服務(wù);

(2)數(shù)據(jù)均衡性較好;

(3)比較容易擴(kuò)展,可以隨時(shí)加一個(gè)uid[2kw,3kw]的數(shù)據(jù)服務(wù);

不足是:

(1)??????請(qǐng)求的負(fù)載不一定均衡,一般來說,新注冊(cè)的用戶會(huì)比老用戶更活躍,大range的服務(wù)請(qǐng)求壓力會(huì)更大;

按照哈希水平拆分


每一個(gè)數(shù)據(jù)庫,存儲(chǔ)某個(gè)key值hash后的部分?jǐn)?shù)據(jù),上圖為例:

user0庫,存儲(chǔ)偶數(shù)uid數(shù)據(jù)

user1庫,存儲(chǔ)奇數(shù)uid數(shù)據(jù)

這個(gè)方案的好處是:

(1)規(guī)則簡(jiǎn)單,service只需對(duì)uid進(jìn)行hash能路由到對(duì)應(yīng)的存儲(chǔ)服務(wù);

(2)數(shù)據(jù)均衡性較好;

(3)請(qǐng)求均勻性較好;

不足是:

(1)不容易擴(kuò)展,擴(kuò)展一個(gè)數(shù)據(jù)服務(wù),hash方法改變時(shí)候,可能需要進(jìn)行數(shù)據(jù)遷移;

這里需要注意的是,通過水平拆分來擴(kuò)充系統(tǒng)性能,與主從同步讀寫分離來擴(kuò)充數(shù)據(jù)庫性能的方式有本質(zhì)的不同。

通過水平拆分?jǐn)U展數(shù)據(jù)庫性能:

(1)每個(gè)服務(wù)器上存儲(chǔ)的數(shù)據(jù)量是總量的1/n,所以單機(jī)的性能也會(huì)有提升;

(2)n個(gè)服務(wù)器上的數(shù)據(jù)沒有交集,那個(gè)服務(wù)器上數(shù)據(jù)的并集是數(shù)據(jù)的全集;

(3)數(shù)據(jù)水平拆分到了n個(gè)服務(wù)器上,理論上讀性能擴(kuò)充了n倍,寫性能也擴(kuò)充了n倍(其實(shí)遠(yuǎn)不止n倍,因?yàn)閱螜C(jī)的數(shù)據(jù)量變?yōu)榱嗽瓉淼?/n);

通過主從同步讀寫分離擴(kuò)展數(shù)據(jù)庫性能:

(1)每個(gè)服務(wù)器上存儲(chǔ)的數(shù)據(jù)量是和總量相同;

(2)n個(gè)服務(wù)器上的數(shù)據(jù)都一樣,都是全集;

(3)理論上讀性能擴(kuò)充了n倍,寫仍然是單點(diǎn),寫性能不變;

緩存層的水平拆分和數(shù)據(jù)庫層的水平拆分類似,也是以范圍拆分和哈希拆分的方式居多,就不再展開。

下周更新

如何計(jì)算系統(tǒng)用戶并發(fā)數(shù),系統(tǒng)最大并發(fā)數(shù)?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,305評(píng)論 2 89
  • 需要原文的可以留下郵箱我給你發(fā),這里的文章少了很多圖,懶得網(wǎng)上粘啦 1數(shù)據(jù)庫基礎(chǔ) 1.1數(shù)據(jù)庫定義 1)數(shù)據(jù)庫(D...
    極簡(jiǎn)純粹_閱讀 7,909評(píng)論 0 46
  • 一、什么是高并發(fā) 高并發(fā)(High Concurrency)是互聯(lián)網(wǎng)分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常...
    duzhongli閱讀 22,338評(píng)論 0 16
  • 持續(xù)分享157天,20171217,張紅。 快就是慢,慢就是快。 一直以來,孩子的英語成績特別的差,追根究...
    啊呦a7_94閱讀 199評(píng)論 0 0
  • 秋日傍晚的曦光 落得一地的焦黃 滿眼的秋波 隨著風(fēng)的節(jié)奏輕微的晃了晃, 有些為了美的生命 呼吸著剩下不多的陽光 有...
    木子芍藥閱讀 405評(píng)論 0 2

友情鏈接更多精彩內(nèi)容