Linux高并發調優
一 高并發概念
1.1 高并發概念
高并發(High Concurrency)是互聯網分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時并行處理很多請求,
1.2 高并發相關指標
- 回應時間(Response Time)
- 系統對請求做出回應的時間,例如系統處理一個HTTP請求需要200ms,這個200ms就是系統的回應時間
- 吞吐量(Throughput)
- 單位時間內處理的請求數量
- 每秒查詢率QPS(Query Per Second)
- 每秒回應請求數,在互聯網領域,這個指標和吞吐量區分的沒有這么明顯
- 并發用戶數(User Concurrence)
- 同時承載正常使用系統功能的用戶數量,例如一個即時通訊系統,同時在線量一定程度上代表了系統的并發用戶數
1.3 高并發優化方面
- 單行程最大打開檔案數限制
- 內核TCP引數方面
- IO事件分配機制
二 提升系統的并發能力
2.1 垂直擴展
- 提升單機處理能力
- 增強單機硬體性能,例如:增加CPU核數如32核,升級更好的網卡如萬兆,升級更好的硬碟如SSD,擴充硬碟容量如2T,擴充系統記憶體如128G
- 提升單機架構性能,例如:使用Cache來減少IO次數,使用異步來增加單服務吞吐量,使用無鎖資料結構來減少回應時間
2.2 水平擴展
- 增加服務器數量,就能線性擴充系統性能
2.3 常見互聯網分層架構
(1)客戶端層:典型呼叫方是瀏覽器browser或者手機應用APP
(2)反向代理層:系統入口,反向代理
(3)站點應用層:實作核心應用邏輯,回傳html或者json
(4)服務層:如果實作了服務化,就有這一層
(5)資料-快取層:快取加速訪問存盤
(6)資料-資料庫層:資料庫固化資料存盤
2.4 水平擴展架構
-
反向代理層的水平擴展
-
當nginx成為瓶頸的時候,只要增加服務器數量,新增nginx服務的部署,增加一個外網ip,就能擴展反向代理層的性能,做到理論上的無限高并發
-
通過“DNS輪詢”實作的:dns-server對于一個域名配置了多個決議ip,每次DNS決議請求來訪問dns-server,會輪詢回傳這些ip
-
站點層的水平擴展
- 通過“nginx”實作的,通過修改nginx.conf,可以設定多個web后端
- 當web后端成為瓶頸的時候,只要增加服務器數量,新增web服務的部署,在nginx配置中配置上新的web后端,就能擴展站點層的性能,做到理論上的無限高并發
-
服務層的水平擴展
- 通過“服務連接池”實作的
- 站點層通過RPC-client呼叫下游的服務層RPC-server時,RPC-client中的連接池會建立與下游服務多個連接,當服務成為瓶頸的時候,只要增加服務器數量,新增服務部署,在RPC-client處建立新的下游服務連接,就能擴展服務層性能,做到理論上的無限高并發
-
資料層的水平擴展
-
資料層(快取,資料庫)涉及資料的水平擴展,將原本存盤在一臺服務器上的資料(快取,資料庫)水平拆分到不同服務器上去,以達到擴充系統性能的目的,
-
存盤一定范圍的資料
- user0庫,存盤uid范圍1-1kw
- user1庫,存盤uid范圍1kw-2kw
-
按照哈希水平拆分
- user0庫,存盤偶數uid資料
- user1庫,存盤奇數uid資料
-
三 單臺Linux服務器提升并發
3.1 iptables相關
-
關閉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
-
3.2 內核TCP引數
-
? 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 時間,
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/187007.html
標籤:其他
