2019年互聯(lián)網(wǎng)架構(gòu)設(shè)計:高性能的后端

先簡略回顧一下抗愁。對于互聯(lián)網(wǎng)產(chǎn)品的高性能架構(gòu)設(shè)計通常包括以下幾個大方面:

  1. Web瀏覽器高性能設(shè)計
  2. App客戶端高性能設(shè)計
  3. 高性能的網(wǎng)絡(luò)和硬件
  4. 后臺服務(wù)高性能設(shè)計
image

后端服務(wù)一般指用戶直接看到的遠程服務(wù)纽哥,涉及到網(wǎng)絡(luò)硬件铐尚、邏輯計算搞莺、通信協(xié)議和數(shù)據(jù)存儲等部分主穗。下面我們將著重介紹高性能后臺服務(wù)的設(shè)計方法和策略温算。

一扣草、高性能的網(wǎng)絡(luò)和硬件

  1. 網(wǎng)絡(luò)硬件是提供實現(xiàn)高性能服務(wù)的先決條件,如果網(wǎng)絡(luò)硬件失敗氨鹏,再優(yōu)秀的團隊也是“巧婦難為無米之炊”欧募。互聯(lián)網(wǎng)產(chǎn)品在網(wǎng)絡(luò)硬件方面經(jīng)常需要使用的高性能方案有如下幾種:
  2. CDN加速技術(shù)仆抵。CDN加速將網(wǎng)站的內(nèi)容緩存在網(wǎng)絡(luò)邊緣(離用戶接入網(wǎng)絡(luò)最近的地方)跟继,然后在用戶訪問網(wǎng)站內(nèi)容的時候,通過調(diào)度系統(tǒng)將用戶的請求路由或者引導(dǎo)到離用戶接入網(wǎng)絡(luò)最近或者訪問效果最佳的緩存服務(wù)器上镣丑,由該緩存服務(wù)器為用戶提供內(nèi)容服務(wù)舔糖;相對于直接訪問源站,這種方式縮短了用戶和內(nèi)容之間的網(wǎng)絡(luò)距離莺匠,從而達到加速的效果金吗。
  3. 足夠的帶寬。帶寬應(yīng)該滿足在網(wǎng)站峰值的情況還能足夠快速的使用趣竣,所以網(wǎng)絡(luò)帶寬應(yīng)該大于峰值流量 = 峰值QPS * 平均請求大小摇庙。只有在保證帶寬的情況才能實現(xiàn)高性能服務(wù)。
  4. 服務(wù)器性能遥缕。服務(wù)器性能主要從CPU卫袒、內(nèi)存和磁盤三個方面來考慮,CPU核心數(shù)量能盡量多點通砍,內(nèi)存大小最好大一點玛臂,利用到磁盤存儲的話SSD會優(yōu)于機械磁盤。
  5. 硬件負載均衡設(shè)備封孙。對于有條件的團隊可以采購硬件負載均衡設(shè)備,加強后臺服務(wù)負載均衡的能力讽营,比如F5虎忌。

二、后臺服務(wù)高性能設(shè)計

后臺服務(wù)的高性能設(shè)計是互聯(lián)網(wǎng)產(chǎn)品高性能架構(gòu)設(shè)計中最重要的一環(huán)橱鹏,對服務(wù)整體性能起到?jīng)Q定性的作用膜蠢。我們來看看設(shè)計高性能后臺服務(wù)的方法:

1分布式緩存堪藐。

緩存的本質(zhì)是通過key-value形式的Hash表提升讀寫速度,一般情況是O(1)的讀寫速度挑围。讀寫量比較高礁竞,變化量不大的數(shù)據(jù)比較適合使用緩存。業(yè)內(nèi)比較成熟的分布式緩存系統(tǒng)有redis/memcache杉辙。在此我向大家推薦一個架構(gòu)學(xué)習(xí)交流圈模捂。交流學(xué)習(xí)企鵝圈號:948368769 里面會分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis蜘矢,Netty源碼分析狂男,高并發(fā)、高性能品腹、分布式岖食、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化舞吭、分布式架構(gòu)等這些成為架構(gòu)師必備的知識體系泡垃。還能領(lǐng)取免費的學(xué)習(xí)資源,目前受益良多

一般的緩存設(shè)計架構(gòu)如下:用戶第一次請求應(yīng)用程序時羡鸥,通過存儲服務(wù)直接讀取數(shù)據(jù)蔑穴,然后將數(shù)據(jù)存儲到緩存系統(tǒng)去,用戶第二次請求的時候就直接從緩存系統(tǒng)讀取兄春,從而提升讀取速度澎剥。

image

對于分布式緩存系統(tǒng)可以Set化部署,比如商品數(shù)據(jù)緩存到Set1赶舆,用戶數(shù)據(jù)緩存到Set2哑姚,或者一類用戶的數(shù)據(jù)緩存到Set1,另一類的用戶緩存到Set2芜茵,如下圖:

image

此外叙量,也可以按集群化部署,每一個緩存服務(wù)存儲的數(shù)據(jù)都是對等的九串,可以對外提供同等的服務(wù)绞佩,所以外部請求需要負載均衡到不同有緩存服務(wù)器,如下圖:

image

Set化部署的目的主要在于將不同類型的數(shù)據(jù)路由到不同的地方猪钮,好處就是可以減少不同業(yè)務(wù)數(shù)據(jù)的耦合品山,可以針對不同業(yè)務(wù)進行不同的優(yōu)化,從而提升整體性能烤低。集群式部署的目的在于肘交,提高緩存系統(tǒng)的對外服務(wù)能力,上層業(yè)務(wù)的路由策略簡單靈活扑馁,擴縮容比較容易涯呻。

2.服務(wù)分層

在經(jīng)典的三層(接入層凉驻、邏輯層和存儲層)后臺服務(wù)架構(gòu)中,三層的劃分的原則就是同層次的系統(tǒng)專注處理自己的事情复罐。接入層專注于處理前端和后臺服務(wù)的接入連通涝登、安全認證和數(shù)據(jù)轉(zhuǎn)發(fā)。邏輯層專注于處理不同業(yè)務(wù)的無狀態(tài)邏輯服務(wù)效诅。存儲層專注于處理業(yè)務(wù)數(shù)據(jù)的存儲胀滚。這樣分層的好處在于各個層次能夠依據(jù)業(yè)務(wù)特點專注于自己的事情,提高系統(tǒng)復(fù)用性填帽,降低業(yè)務(wù)間的耦合性蛛淋。在中小型網(wǎng)站中三層架構(gòu)的典型實現(xiàn)是Nginx(接入層)、Apache Web(邏輯層)篡腌、Mysql/Redis(存儲層)褐荷。

image

3.操作異步化

目前大型系統(tǒng)中普遍消息隊列來將調(diào)用異步化,不僅可以提升系統(tǒng)性能還可以提升系統(tǒng)的擴展性嘹悼。對于大量的數(shù)據(jù)庫寫請求叛甫,對于數(shù)據(jù)庫的壓力很大,同時也會造成數(shù)據(jù)庫響應(yīng)不及時杨伙∑浼啵可以考慮使用消息隊列,數(shù)據(jù)庫的寫請求可以直接寫入到消息隊列限匣,然后通過多線程或多進程從消息隊列中讀取數(shù)據(jù)慢慢寫入到數(shù)據(jù)庫抖苦。消息隊列服務(wù)器的處理速度會遠遠快于數(shù)據(jù)庫,所以用戶在寫入操作時會感覺到很快的寫入速度米死。

此外锌历,消息隊列對于請求不均衡的系統(tǒng),還具有削峰填谷的作用峦筒,將短時間內(nèi)的高峰請求究西,逐步平攤到更長的時間里去,從而避免短時間內(nèi)大量請求壓跨系統(tǒng)物喷。

image

4.服務(wù)拆分

服務(wù)拆分有多種說法卤材,比如大系統(tǒng)小做,分布式拆分峦失,分層結(jié)構(gòu)以及目前很流行的微服務(wù)化扇丛。不過服務(wù)拆分一般來說有以下原則:

  • a.高內(nèi)聚、低耦合: 將耦合性低的業(yè)務(wù)邏輯劃分為不同系統(tǒng)尉辑,將聚合性高的業(yè)務(wù)邏輯劃分為同一個系統(tǒng)晕拆。
  • b.單一職責(zé)原則:對于一個層次或者一個模塊應(yīng)該保持相對單一的職責(zé),專注于自己的服務(wù)材蹬。
  • c.故障隔離:不同系統(tǒng)必須相對獨立設(shè)計和運行实幕,能夠獨立處理自己的故障,而不至于影響全局堤器。
  • d.獨立運維和持續(xù)交互:對于不同的系統(tǒng)可以隨時迭代更新昆庇,而不至于影響其他服務(wù)。

對于服務(wù)拆分主要有縱向拆分和水平拆分兩種方法闸溃。三層架構(gòu)就是典型的縱向拆分模式整吆,第2)點有所闡述。對于不同的業(yè)務(wù)模塊辉川,針對業(yè)務(wù)邏輯和存儲服務(wù)可以按水平拆分的方法將拆分為不同的系統(tǒng)表蝙。比如商品系統(tǒng)邏輯層、訂單系統(tǒng)邏輯層乓旗、商品系統(tǒng)存儲層府蛇、訂單系統(tǒng)存儲層。在此我向大家推薦一個架構(gòu)學(xué)習(xí)交流圈屿愚。交流學(xué)習(xí)企鵝圈號:948368769 里面會分享一些資深架構(gòu)師錄制的視頻錄像:有Spring汇跨,MyBatis,Netty源碼分析妆距,高并發(fā)穷遂、高性能、分布式娱据、微服務(wù)架構(gòu)的原理蚪黑,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識體系中剩。還能領(lǐng)取免費的學(xué)習(xí)資源忌穿,目前受益良多

5分布式集群化

分布式集群化是指將不同的業(yè)務(wù)用集群化的方式部署到不同的機器上去,對于每一個業(yè)務(wù)都具備大規(guī)模集群化的能力咽安,從而提升系統(tǒng)的擴展性和高性能伴网。

image

對于無狀態(tài)化的被調(diào)服務(wù)A,在基于負載均衡的技術(shù)下妆棒,可以通過集群化部署成倍的提升服務(wù)性能澡腾,比如A1服務(wù)的性能是1萬請求每秒,那么部署3臺A服務(wù)機器糕珊,那么A服務(wù)的性能就是3萬請求每秒了动分。

6.代碼優(yōu)化

對于IO操作的請求可以采用基于狀態(tài)機的異步化編程。如下圖的請求需要業(yè)務(wù)系統(tǒng)調(diào)用三個接口才能返回響應(yīng)數(shù)據(jù)红选,當(dāng)業(yè)務(wù)系統(tǒng)收到請求時澜公,將給該請求分配一個seqid,該seqid在接口響應(yīng)中也應(yīng)該原封返回,然后并發(fā)三個IO接口的請求包坟乾,將該seqid對應(yīng)的請求上下文保存到timer中迹辐,然后去并發(fā)處理其他請求,從而極大的提升系統(tǒng)性能甚侣。

image

此外明吩,高性能的編程模型還有多線程模型、多進程模型殷费、多協(xié)程模型和事件驅(qū)動模型印荔。

對于數(shù)據(jù)結(jié)構(gòu)的設(shè)計可以采用高效的數(shù)據(jù)結(jié)構(gòu),比如典型的key-value緩存系統(tǒng)就是基于hash的基本原理來實現(xiàn)的详羡,hash表的查詢效率是O(1)仍律,效率極快。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末实柠,一起剝皮案震驚了整個濱河市水泉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌主到,老刑警劉巖茶行,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異登钥,居然都是意外死亡畔师,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門牧牢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來看锉,“玉大人,你說我怎么就攤上這事塔鳍〔常” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵轮纫,是天一觀的道長腔寡。 經(jīng)常有香客問我,道長掌唾,這世上最難降的妖魔是什么放前? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮糯彬,結(jié)果婚禮上凭语,老公的妹妹穿的比我還像新娘。我一直安慰自己撩扒,他們只是感情好似扔,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般炒辉。 火紅的嫁衣襯著肌膚如雪豪墅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天辆脸,我揣著相機與錄音但校,去河邊找鬼。 笑死啡氢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的术裸。 我是一名探鬼主播倘是,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼袭艺!你這毒婦竟也來了搀崭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤猾编,失蹤者是張志新(化名)和其女友劉穎瘤睹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體答倡,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡轰传,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘪撇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片获茬。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖倔既,靈堂內(nèi)的尸體忽然破棺而出恕曲,到底是詐尸還是另有隱情,我是刑警寧澤渤涌,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布佩谣,位于F島的核電站,受9級特大地震影響实蓬,放射性物質(zhì)發(fā)生泄漏茸俭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一瞳秽、第九天 我趴在偏房一處隱蔽的房頂上張望瓣履。 院中可真熱鬧,春花似錦练俐、人聲如沸袖迎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽燕锥。三九已至辜贵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間归形,已是汗流浹背托慨。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暇榴,地道東北人厚棵。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蔼紧,于是被迫代替她去往敵國和親婆硬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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