什么是高并發(fā)
高并發(fā)是互聯(lián)網(wǎng)分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指,通過(guò)設(shè)計(jì)保證系統(tǒng)能夠同時(shí)處理很多請(qǐng)求。高并發(fā)相關(guān)的一些指標(biāo)有響應(yīng)時(shí)間、吞吐量、每秒查詢率QPS、并發(fā)用戶數(shù)等。
- 響應(yīng)時(shí)間: 系統(tǒng)對(duì)請(qǐng)求做出響應(yīng)的時(shí)間。例如系統(tǒng)處理一個(gè)HTTP請(qǐng)求需要200ms,這個(gè)200ms就是系統(tǒng)的響應(yīng)時(shí)間。
- 吞吐量: 單位時(shí)間內(nèi)(年月日時(shí)分秒)處理的請(qǐng)求數(shù)量。
- QPS: 每秒響應(yīng)請(qǐng)求數(shù)。
- 并發(fā)用戶數(shù): 同時(shí)承載正常使用系統(tǒng)功能的用戶數(shù)量。例如一個(gè)即時(shí)通訊系統(tǒng),同時(shí)在線量一定程度上代表了系統(tǒng)的并發(fā)用戶數(shù)。
如何提升系統(tǒng)的并發(fā)能力
互聯(lián)網(wǎng)分布式架構(gòu)設(shè)計(jì),提高系統(tǒng)并發(fā)能力的方式,方法論上主要有兩種:垂直擴(kuò)展(Scale Up),水平擴(kuò)展(Scale Out)
垂直擴(kuò)展
提升單機(jī)處理能力。垂直擴(kuò)展的方式又分為兩種:
- 增強(qiáng)單機(jī)硬件性能。例如:增加CPU核數(shù)如32核,升級(jí)更好的網(wǎng)卡如萬(wàn)兆,升級(jí)更好的硬盤(pán)如SSD,擴(kuò)充硬盤(pán)容量如2T,擴(kuò)充系統(tǒng)內(nèi)存如128G;
- 提升單機(jī)架構(gòu)性能。例如:使用Cache來(lái)減少I(mǎi)O次數(shù),使用異步來(lái)增加單服務(wù)吞吐量,使用無(wú)鎖數(shù)據(jù)結(jié)構(gòu)來(lái)減少響應(yīng)時(shí)間;
水平擴(kuò)展
只要增加服務(wù)器數(shù)量,就能線性擴(kuò)充系統(tǒng)性能。水平擴(kuò)展對(duì)系統(tǒng)架構(gòu)設(shè)計(jì)是有要求的。
典型的互聯(lián)網(wǎng)封層架構(gòu)

- 客戶端層: 典型調(diào)用方是瀏覽器或手機(jī)App
- 反向代理層: 系統(tǒng)入口(Ingress)、反向代理(Nginx)
- 站點(diǎn)應(yīng)用層: 實(shí)現(xiàn)核心應(yīng)用邏輯,返回html、JSON
- 服務(wù)層: 微服務(wù)體現(xiàn)在這一層
- 數(shù)據(jù)緩存層: 緩存加速訪問(wèn)緩存
- 數(shù)據(jù)庫(kù)層: 數(shù)據(jù)庫(kù)持久化數(shù)據(jù)存儲(chǔ)
水平擴(kuò)展分層架構(gòu)
反向代理層的水平擴(kuò)展

反向代理層的水平擴(kuò)展,是通過(guò)DNS輪詢實(shí)現(xiàn)的:DNS Server對(duì)于一個(gè)域名配置了多個(gè)解析IP,每次DNS解析請(qǐng)求來(lái)訪問(wèn)DNS Server,會(huì)輪詢這些IP。
當(dāng)Nginx成為瓶頸的時(shí)候,只要添加服務(wù)器的數(shù)量,新增Nginx服務(wù)器的部署,增加一個(gè)外網(wǎng)IP,就能擴(kuò)展反向代理層的性能,做到理論上的無(wú)限高并發(fā)。
站點(diǎn)應(yīng)用層的水平擴(kuò)展

站點(diǎn)層的水平擴(kuò)展,是通過(guò)Nginx實(shí)現(xiàn)的。通過(guò)修改nginx.conf,可以設(shè)置多個(gè)Web后端。
當(dāng)Web后端成為瓶頸時(shí),只要增加服務(wù)器的數(shù)量,新增Web服務(wù)器的部署,在Nginx配置中配置上新的web后端,就能擴(kuò)展站點(diǎn)層的性能,做到理論上的無(wú)限高并發(fā)。
服務(wù)層的水平擴(kuò)展


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


按照哈希水平拆分


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

注意: 緩存層的水平拆分和數(shù)據(jù)庫(kù)層的水平拆分類似,也是以范圍拆分和哈希拆分的方式居多