如何提高伺服器併發處理能力

2021-08-19 14:15:54 字數 1651 閱讀 5252

以下內容為入門級介紹,意在對老技術作較全的總結而不是較深的研究。主要參考《構建高效能web站點》一書。

一台伺服器在單位時間裡能處理的請求越多,伺服器的能力越高,也就是伺服器併發處理能力越強

吞吐率,單位時間裡伺服器處理的最大請求數,單位req/s

從伺服器角度,實際併發使用者數的可以理解為伺服器當前維護的代表不同使用者的檔案描述符總數,也就是併發連線數。伺服器一般會限制同時服務的最多使用者數,比如apache的maxclents引數。

這裡再深入一下,對於伺服器來說,伺服器希望支援高吞吐率,對於使用者來說,使用者只希望等待最少的時間,顯然,雙方不能滿足,所以雙方利益的平衡點,就是我們希望的最大併發使用者數。

壓力測試

有乙個原理一定要先搞清楚,假如100個使用者同時向伺服器分別進行10個請求,與1個使用者向伺服器連續進行1000次請求,對伺服器的壓力是一樣嗎?實際上是不一樣的,因對每乙個使用者,連續傳送請求實際上是指傳送乙個請求並接收到響應資料後再傳送下乙個請求。這樣對於1個使用者向伺服器連續進行1000次請求, 任何時刻伺服器的網絡卡接收緩衝區中只有1個請求,而對於100個使用者同時向伺服器分別進行10個請求,伺服器的網絡卡接收緩衝區最多有100個等待處理的請求,顯然這時的伺服器壓力更大。

壓力測試前提考慮的條件

併發使用者數: 指在某一時刻同時向伺服器傳送請求的使用者總數(httpwatch)

使用者平均請求等待時間主要用於衡量伺服器在一定併發使用者數下,單個使用者的服務質量;而伺服器平均請求處理時間就是吞吐率的倒數,一般來說,使用者平均請求等待時間 = 伺服器平均請求處理時間 * 併發使用者數

我們將從遊戲伺服器發展的簡單歷程出發,鳥瞰一下目前大多數的遊戲伺服器架構。· 這裡盡可能的避免陷入細節的技術問題,而是從技術進化的結果狀態,反推原始問題是什麼。希望能通過這個過程,解釋清楚遊戲伺服器是在解決什麼問題,痛點到底在**。

當開發者們有了初步經驗以後,新作品的開發,自然而然的過渡到了如下的形式:

遊戲邏輯服務依然是在一台伺服器上,單程序(邏輯處理本身肯定是在乙個執行緒中,可以有子執行緒負責內網通訊)。但是我們自然的想到,儲存負載和網路連線負載可以從邏輯服上拆出來。· 由於連線伺服器本身沒有時序性,很容易做分布式的(其實大部分遊戲還是只用乙個連線服),儲存服務不要求高實時性,高峰期存檔間隔可以稍長一些,不會對遊戲服造成影響。

1、邏輯伺服器的負載均攤方法一:按照功能劃分多個伺服器程序

附:開房間式的網路遊戲· 開房間式的網路遊戲也是遊戲的乙個重要分支,英雄聯盟、dota、很多手遊例如皇室戰爭、王者榮耀等等。· 這種遊戲房間之間幾乎沒有互動,只有大廳內有互動,可以理解為原始形態的遊戲伺服器的平行擴充套件。· 房間式遊戲擴充套件難度較小,只是需要根據玩家數量動態擴充套件遊戲房間的數量、伺服器數量。很像**的架構。· 這種遊戲架構最最適合放在雲平台上,設計合理的話,它可能遇到的問題和大型**幾乎一模一樣。不需要特別的討論它們。· 只是,畢竟遊戲不都是開房間的玩法。·

· 1、真正的資料都在記憶體中,資料庫效能不那麼重要· 注:很多大型遊戲採用了共享記憶體,避免宕機時損失過大。· 2、單cpu效能比cpu數量重要的多。· 3、目前有很多遊戲,特別是手遊,使用redis讀寫代替記憶體讀寫,甚至也有用mongo的。· 4、開新服、舊區合服的情況,非常適合雲平台。

1、bigworld。理念過於超前,把併發性做到極致,開發友好度弱到極致,已廢。2、skynet。本人強烈推薦,誰學誰知道,除了必須要用lua語言,沒有什麼缺點。

參考blog:

1.

提高WCF服務併發能力的簡單處理辦法

步驟 1.把同樣的wcf服務,在多個埠上 啟動 即同時執行多個wcf的例項,但每個例項都監聽不同的埠 2.用svcutil.exe生成的 類,裡面有n多建構函式的過載版本,觀察一下類似下面的這個版本 public astroserviceclient string endpointconfigura...

伺服器併發處理架構

網路伺服器如何處理併發請求的模型稱之為多工體系結構。1.inetd模式 在大部分unix作業系統中,預設的多工體系結構是inetd應用程式。通用的網路伺服器體系結構inetd分為兩個部分 主服務程序和客戶服務程序。主服務程序通常用於等待客戶端的連線請求。一旦客戶端發起乙個請求,主伺服器將建立連線,同...

測試伺服器併發能力的工具webbench

webbench是乙個非常簡單的壓力測試工具,webbench最多可以模擬3萬個併發連線去測試 的負載能力。1 webbench安裝 2 webbench使用 webbench c 併發數 t 執行測試時間 url 3 測試結果 另外我想到的測試方法就是,自己寫shell指令碼,呼叫wget或者cu...