高并發(fā)架構(gòu)設(shè)計經(jīng)驗
點個關(guān)注??跟騰訊工程師學(xué)技術(shù)


高并發(fā)的說明和背景
高并發(fā)解決的核心問題是在同一時間上有大量的請求過來,然后我們的系統(tǒng)要怎么抗住這些請求帶來的壓力。比如在線直播服務(wù),同時有上百萬甚至上千萬人觀看。比如秒殺品,同時有大量用戶涌入。
高并發(fā)架構(gòu)設(shè)計經(jīng)驗
(一)基礎(chǔ)設(shè)施層:這個是最基礎(chǔ)的依賴,主要是一些服務(wù)的部署。針對大公司而言,一般都有成熟的系統(tǒng)和基礎(chǔ)設(shè)施來承載,可能針對業(yè)務(wù)開發(fā)的同學(xué)來看,平時關(guān)注的的細節(jié)并不深入,但是不妨礙我們從全局角度來剖析高并發(fā)的設(shè)計。
(三)服務(wù)應(yīng)用層:這個主要是針對我們寫的代碼來進行優(yōu)化改進。從代碼架構(gòu)、代碼性能等方便去抗并發(fā)。
(一)基礎(chǔ)設(shè)施層
部署:多 IDC + 異地多活
多 IDC 部署。比如服務(wù)同時在廣州、上海兩地部署。這個依賴我們的服務(wù)是無狀態(tài)的。
其他的參考下異地多活架構(gòu)等相關(guān)部署。
監(jiān)控:可觀測性
(二)服務(wù)端架構(gòu)層
系統(tǒng)分層設(shè)計:分層、分割、分布式
架構(gòu)分層
應(yīng)用層:網(wǎng)站首頁,用戶中心,商品中心,購物車,紅包業(yè)務(wù),活動中心等,負責具體業(yè)務(wù)和視圖展示 服務(wù)層:訂單服務(wù),用戶管理服務(wù),紅包服務(wù),商品服務(wù)等,為應(yīng)用層提供服務(wù)支持 數(shù)據(jù)層:關(guān)系數(shù)據(jù)庫,nosql數(shù)據(jù)庫 等,提供數(shù)據(jù)存儲查詢服務(wù)
將系統(tǒng)在橫向維度上切分成幾個部分,每一層的功能職責要足夠單一,然后通過上層對下層的依賴和調(diào)度組成一個完整的系統(tǒng) 比如把電商系統(tǒng)分成:應(yīng)用層,服務(wù)層,數(shù)據(jù)層。(具體分多少個層次根據(jù)自己的業(yè)務(wù)場景)
業(yè)務(wù)分割
在縱向方面對業(yè)務(wù)進行切分,將一塊相對復(fù)雜的業(yè)務(wù)分割成不同的模塊單元,對應(yīng)的是模塊的劃分,通過合理的模塊劃分,使得每個模塊都能可以滿足 高內(nèi)聚低耦合 的設(shè)計要求,這樣不同的模塊可以分布式部署,也能提高并發(fā)處理能力和功能擴展 比如用戶中心可以分割成:賬戶信息模塊,訂單列表模塊,充值模塊,優(yōu)惠券模塊等
分布式
分布式應(yīng)用和服務(wù),將分層或者分割后的業(yè)務(wù)分布式部署,獨立的應(yīng)用服務(wù)器,數(shù)據(jù)庫,緩存服務(wù)器,當業(yè)務(wù)達到一定用戶量的時候,再進行服務(wù)器均衡負載,數(shù)據(jù)庫,緩存主從集群
集群架構(gòu)設(shè)計:應(yīng)用集群、數(shù)據(jù)集群
應(yīng)用服務(wù)器集群
nginx 反向代理 slb LVS …
數(shù)據(jù)集群(關(guān)系/nosql數(shù)據(jù)庫)
主從分離,一主多從 數(shù)據(jù)讀寫分離
數(shù)據(jù)庫設(shè)計:讀寫分離+分庫分表+冷熱分離
讀寫分離。互聯(lián)網(wǎng)系統(tǒng)大多數(shù)都是讀多寫少,因此讀寫分離可以幫助主庫抗量。一般我們都是一主多從的架構(gòu),可以抗量,也可以保證數(shù)據(jù)不丟。分庫分表只能解決 QPS 高,但是無法解決 TPS 高,比如寫入的量足夠大的話(TPS 高),就得讀寫分離。 分庫分表。數(shù)據(jù)存儲量大的時候,就需要通過分庫分表來存儲。先分,避免后期要拆,后期拆的話,就面臨洗數(shù)據(jù)的問題,就需要采用雙寫模式來搞定。
分庫分表模式雖然能顯著提升數(shù)據(jù)庫的容量,但會增加系統(tǒng)復(fù)雜性,而且由于只能支持少數(shù)的幾個維度讀寫,從某種意義上來說對業(yè)務(wù)系統(tǒng)也是一種限制,因此在設(shè)計分庫分表方案的時候需要結(jié)合具體業(yè)務(wù)場景,更全面地考慮。
冷熱分離。針對業(yè)務(wù)場景而言,如果數(shù)據(jù)有冷熱之分的話,可以將歷史冷數(shù)據(jù)與當前熱數(shù)據(jù)分開存儲,這樣可以減輕當前熱數(shù)據(jù)的存儲量,可以提高性能。
緩存設(shè)計:多級緩存架構(gòu)和本地緩存
首先要考慮的,就是必須在數(shù)據(jù)庫之上,增加一層分布式緩存,比如 Redis 或者 Memcached。
這里需要考慮一下緩存和數(shù)據(jù)庫一致性的問題。
其次需要考慮的是多級緩存架構(gòu)。分幾級緩存設(shè)計,同時設(shè)計熱點緩存架構(gòu)。
在分布式緩存之上,還可以加一個本地緩存,來緩存最熱的數(shù)據(jù) 采用多個分布式緩存來搭建多級緩存。
消息隊列設(shè)計:MQ 抗量和削峰
服務(wù)治理設(shè)計:超時、熔斷、降級、限流等
資源隔離設(shè)計:SET 部署
多線程、線程同步、協(xié)程
異步化
預(yù)處理:預(yù)加載、預(yù)熱
點擊下方空白 ▼ 查看明日開發(fā)者黃歷

評論
圖片
表情

