高併發(High Concurrency)是互聯網分佈式系統架構設計中必須考慮的因素之一,它一般是指,經過設計保證系統可以同時並行處理不少請求。html
(1)客戶端層:典型調用方是瀏覽器browser或者手機應用APPlinux
(2)反向代理層:系統入口,反向代理nginx
(3)站點應用層:實現核心應用邏輯,返回html或者jsonweb
(4)服務層:若是實現了服務化,就有這一層數據庫
(5)數據-緩存層:緩存加速訪問存儲json
(6)數據-數據庫層:數據庫固化數據存儲vim
反向代理層的水平擴展後端
當nginx成爲瓶頸的時候,只要增長服務器數量,新增nginx服務的部署,增長一個外網ip,就能擴展反向代理層的性能,作到理論上的無限高併發瀏覽器
經過「DNS輪詢」實現的:dns-server對於一個域名配置了多個解析ip,每次DNS解析請求來訪問dns-server,會輪詢返回這些ip緩存
站點層的水平擴展
服務層的水平擴展
數據層的水平擴展
數據層(緩存,數據庫)涉及數據的水平擴展,將本來存儲在一臺服務器上的數據(緩存,數據庫)水平拆分到不一樣服務器上去,以達到擴充系統性能的目的。
存儲必定範圍的數據
按照哈希水平拆分
關閉iptables防火牆,阻止kernel加載iptables模塊
單進程最大打開文件數限制(默認單個進程最大打開1024個文件)
ulimit –n 65535
修改Linux系統對用戶的打開文件數的軟限制和硬限制
vim /etc/security/limits.conf * soft nofile 65535 #'*'表示修改全部用戶的限制 * hard nofile 65535
#用戶完成系統登陸後讀取/etc/security/limits.conf文件 vim /etc/pam.d/login sessionrequired /lib/security/pam_limits.so
TIME_WAIT狀態
TCP鏈接斷開後,會以TIME_WAIT狀態保留必定的時間,而後纔會釋放端口。當併發請求過多的時候,就會產生大量的TIME_WAIT狀態的鏈接,沒法及時斷開的話,會佔用大量的端口資源和服務器資源
#查看TIME_WAIT狀態鏈接 netstat -n | grep tcp | grep TIME_WAIT |wc -l
# vim /etc/sysctl.conf net.ipv4.tcp_syncookies= 1 #表示開啓SYNCookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少許SYN攻擊,默認爲0,表示關閉; net.ipv4.tcp_tw_reuse= 1 #表示開啓重用。容許將TIME-WAITsockets從新用於新的TCP鏈接,默認爲0,表示關閉; net.ipv4.tcp_tw_recycle= 1 #表示開啓TCP鏈接中TIME-WAITsockets的快速回收,默認爲0,表示關閉; net.ipv4.tcp_fin_timeout= 30 #修改系統默認的TIMEOUT 時間。