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