什么是高并發(fā)
高并發(fā)是互聯(lián)網(wǎng)分布式系統(tǒng)架構(gòu)設(shè)計中必須考慮的因素之一,它通常是指,通過設(shè)計保證系統(tǒng)能夠同時處理很多請求。高并發(fā)相關(guān)的一些指標有響應(yīng)時間、吞吐量、每秒查詢率QPS、并發(fā)用戶數(shù)等。
- 響應(yīng)時間: 系統(tǒng)對請求做出響應(yīng)的時間。例如系統(tǒng)處理一個HTTP請求需要200ms,這個200ms就是系統(tǒng)的響應(yīng)時間。
- 吞吐量: 單位時間內(nèi)(年月日時分秒)處理的請求數(shù)量。
- QPS: 每秒響應(yīng)請求數(shù)。
- 并發(fā)用戶數(shù): 同時承載正常使用系統(tǒng)功能的用戶數(shù)量。例如一個即時通訊系統(tǒng),同時在線量一定程度上代表了系統(tǒng)的并發(fā)用戶數(shù)。
如何提升系統(tǒng)的并發(fā)能力
互聯(lián)網(wǎng)分布式架構(gòu)設(shè)計,提高系統(tǒng)并發(fā)能力的方式,方法論上主要有兩種:垂直擴展(Scale Up),水平擴展(Scale Out)
垂直擴展
提升單機處理能力。垂直擴展的方式又分為兩種:
- 增強單機硬件性能。例如:增加CPU核數(shù)如32核,升級更好的網(wǎng)卡如萬兆,升級更好的硬盤如SSD,擴充硬盤容量如2T,擴充系統(tǒng)內(nèi)存如128G;
- 提升單機架構(gòu)性能。例如:使用Cache來減少IO次數(shù),使用異步來增加單服務(wù)吞吐量,使用無鎖數(shù)據(jù)結(jié)構(gòu)來減少響應(yīng)時間;
水平擴展
只要增加服務(wù)器數(shù)量,就能線性擴充系統(tǒng)性能。水平擴展對系統(tǒng)架構(gòu)設(shè)計是有要求的。
典型的互聯(lián)網(wǎng)封層架構(gòu)
- 客戶端層: 典型調(diào)用方是瀏覽器或手機App
- 反向代理層: 系統(tǒng)入口(Ingress)、反向代理(Nginx)
- 站點應(yīng)用層: 實現(xiàn)核心應(yīng)用邏輯,返回html、JSON
- 服務(wù)層: 微服務(wù)體現(xiàn)在這一層
- 數(shù)據(jù)緩存層: 緩存加速訪問緩存
- 數(shù)據(jù)庫層: 數(shù)據(jù)庫持久化數(shù)據(jù)存儲
水平擴展分層架構(gòu)
反向代理層的水平擴展
反向代理層的水平擴展,是通過DNS輪詢實現(xiàn)的:DNS Server對于一個域名配置了多個解析IP,每次DNS解析請求來訪問DNS Server,會輪詢這些IP。
當Nginx成為瓶頸的時候,只要添加服務(wù)器的數(shù)量,新增Nginx服務(wù)器的部署,增加一個外網(wǎng)IP,就能擴展反向代理層的性能,做到理論上的無限高并發(fā)。
站點應(yīng)用層的水平擴展
站點層的水平擴展,是通過Nginx實現(xiàn)的。通過修改nginx.conf,可以設(shè)置多個Web后端。
當Web后端成為瓶頸時,只要增加服務(wù)器的數(shù)量,新增Web服務(wù)器的部署,在Nginx配置中配置上新的web后端,就能擴展站點層的性能,做到理論上的無限高并發(fā)。
服務(wù)層的水平擴展
數(shù)據(jù)層的水平擴展
在數(shù)據(jù)量很大的情況下,數(shù)據(jù)層(緩存,數(shù)據(jù)庫)涉及數(shù)據(jù)的水平擴展,將原本存儲于一臺服務(wù)器的上的數(shù)據(jù)水平拆分到不同服務(wù)器上,已達到擴充系統(tǒng)性能的目的。
按照范圍水平拆分
按照哈希水平拆分
水平拆分與主從同步
這里需要注意的是,通過水平拆分來擴充系統(tǒng)性能,與主從同步讀寫分離來擴充數(shù)據(jù)庫性能的方式有本質(zhì)的不同
注意: 緩存層的水平拆分和數(shù)據(jù)庫層的水平拆分類似,也是以范圍拆分和哈希拆分的方式居多






