什么是服務器並發處理能力
一台服務器在單位時間里能處理的請求越多,服務器的能力越高,也就是服務器並發處理能力越強。
服務器的本質工作就是,爭取以最快的速度將內核緩沖區中的用戶請求數據一個不剩地都拿出來,然后盡快處理,再將響應數據放到一塊又能夠與發送數據的緩沖區中,接着處理下一撥請求。
而服務器並發處理能力,可以通過吞吐率來觀察,吞吐率,單位時間里服務器處理的最大請求數,單位req/s。可以利用Jmeter工具進行測試服務器服務器並發處理能力。
例如服務器的性能,web程序的並發能力,代碼,數據庫等等,這里以一個Web程序為例,說明一下提高服務器處理並發能力的
服務性能提高
服務器之所以可以同時處理多個請求,在於操作系統通過多執行流體系設計使得多個任務可以輪流使用系統資源,這些資源包括CPU,內存以及I/O. 這里的I/O主要指磁盤I/O, 和網絡I/O。
服務器的性能也可能是性能的瓶頸,這個時候,就需要更好的服務器。比如單核CPU提高到多核,內存也需要增加。
web程序的並發能力
web程序員並發能力,web在相同時間內處理更多的請求,多線程處理最為關鍵。比如SpringBoot默認使用Tomcat,而tomcat的默認線程為200,即在同一時刻,只能處理200個請求,而其他需要排隊等待,在服務器性能足夠好的情況,就需要將Tomcat的處理線程增加到合適的大小。
線程的增加,需要經過性能測試,才能知道多少合適,線程的切換也是需要資源和時間的,因此不能無限擴大。
多個web同時處理。通過對web的集群,讓web處理的並發增加。如圖:

使用nginx作為轉發,web服務器集群是的處理的請求數增加。
代碼
1. 優化代碼處理的速度,一空間換時間,對於執行的慢的程序,可以通過消耗內存(即構造新的數據結構)來進行優化。
2. 利用池化技術復用,池化技術能夠減少資源對象的創建次數,提高程序的性能,特別是在高並發下這種提高更加明顯。簡單點來說,就是提前保存大量的資源,以備不時之需。線程的創建是非常耗時和消耗資源的,通過池化池化技術解決這一點。
3. 減少使用不必要的鎖。服務器處理大量並發請求時,多個請求處理任務時存在一些資源搶占競爭,這時一般采用“鎖”機制來控制資源的占用,當一個任務占用資源時,我們鎖住資源,這時其它任務都在等待鎖的釋放,這個現象稱為鎖競爭。
通過鎖競爭的本質,我們要意識到盡量減少並發請求對於共享資源的競爭。比如在允許情況下關閉服務器訪問日志,這可以大大減少在鎖等待時的延遲時間。要最大程度減少無辜的等待時間。
數據庫
數據庫往往成為程序的瓶頸,程序多數都需要查詢數據庫,而數據庫的查詢插入都是有一定性質,特別是在數據量特別大的時候。
1. SQL優化以提升SQL執行效率;優化那些查詢慢的語句,並通過創建索引等手段來優化。
2. 數據庫讀寫分離避免讀、寫鎖帶來的性能開銷;Mysql實現主動,主插入操作,而查詢使用從數據庫。
