Linux高併發概念

2021-10-16 01:49:55 字數 2186 閱讀 1207

高併發(high concurrency)是網際網路分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求

吞吐量(throughput)

每秒查詢率qps(query per second)

併發使用者數(user concurrence)

單程序最大開啟檔案數限制

核心tcp引數方面

io事件分配機制

(2)反向**層:系統入口,反向**

(3)站點應用層:實現核心應用邏輯,返回html或者json

(4)服務層:如果實現了服務化,就有這一層

(5)資料-快取層:快取加速訪問儲存

(6)資料-資料庫層:資料庫固化資料儲存

反向**層的水平擴充套件

當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資料

關閉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 時間。

高併發Qps Tps等概念

1 qps 伺服器每秒處理查詢次數,是一台伺服器每秒處理的查詢次數。使用者發起查詢請求到伺服器做出響應這算一次,一秒內使用者完成了50次查詢請求,那此時伺服器qps就是50。2 tps 伺服器每秒處理的事務數,乙個事物是使用者發起查詢請求到伺服器做出響應這算一次。在針對單介面,tps可以認為是等價於...

實戰Java高併發程式設計之概念

學習高併發你必須知道的幾個重要的概念 1.同步 synchronous 和非同步 asynchronous 同步和非同步是對方法的呼叫而言的 同步呼叫時,會等待呼叫的方法完成以後才能繼續執行這個方法。非同步呼叫的時候會瞬間的返回,但是並不是表示這個請求已經完成了,但是會在後台起乙個執行緒去執行接下來...

Linux 如何高併發socket TCP

測試程式是這樣的,在linux環境下,客戶端不斷地向伺服器發起tcp連線,在系統預設情況下 前提是你的系統沒有問題,並且沒有更該系統配置 當客戶端socket建立了1000多個後,會socket 失敗!原因在於,具體是說 單一程序同時開啟檔案數量 這裡可以理解乙個套接字就是乙個檔案 是有上限的!要受...