伺服器設計經驗總結

2021-04-01 05:42:18 字數 1353 閱讀 5860

伺服器設計經驗總結

在完成我的支援sock4, sock4a, sock5的**伺服器後,寫下的總結。

現在它在公司的linux伺服器(處於乙個校園網)上7*24小時的執行

伺服器通訊設計的三種經典架構

(1)one thread/request:對於每個服務請求使用乙個執行緒來處理。在高併發狀態下這種方法需要啟動大量的執行緒,並且可能需要比較多的同步機制

(2)只使用乙個執行緒來處理所有的請求,這種架構設計要求對服務處理的每個步驟都必須是非阻塞,而且能在極短的時間內完成。否則在高併發情況下不能提供好的服務響應質量。

(3)非同步i/o: 利用os提供的非同步i/o機制(比如windows上的完成埠),可以非阻塞的呼叫通訊函式(revc, send, accept, connect),以後可以檢查呼叫的完成狀態及返回值等。這樣可以避免大量的的執行緒占用資源,也免去了執行緒中有可能需要的同步

效能一般設計中容易出現的影響效能的幾個方面

(1)頻繁的啟動執行緒來處理請求會極大地影響效能。

可以寫乙個程式不停的啟動執行緒,來觀察執行緒的啟動是需要很長時間的(每秒只能啟動幾十個執行緒)

可以採用執行緒池的方法來解決這個問題,在程式啟動時預先啟動若干執行緒,置於掛起狀態,在需要使用執行緒的時候恢復執行緒的執行狀態

(2)頻繁的動態分配記憶體

每次動態分配記憶體都需要搜尋記錄heap使用狀況的鍊錶,找到合適大小的記憶體塊。這是乙個耗時的過程,而且在許多次的動態分配以後,會形成大量的記憶體碎片。可以在程式啟動時預分配一定數量的記憶體塊。在執行過程中程式管理。

(3)同步

同步需要消耗較多的系統資源(特別是程序間的同步),頻繁的同步也會拖慢伺服器的處理和響應速度.

可靠性伺服器除了要求能提供快速的響應,還要求能夠長時間7*24小時的執行。

在複雜的網路環境下,這就不只是要求伺服器軟體具有高的**質量,同時對抗攻擊能力也有要求

(1)針對應用協議層的攻擊

能夠在不影響效能的情況下處理不符合應用協議的請求和資料。這就要求伺服器對收到的資料做嚴格的有效性檢查。

(2)針對網路層,傳輸層的攻擊

這樣的攻擊例如:dos攻擊。或者攻擊者不停的向伺服器建立大量後就不做任何請求,這樣就大量消耗了伺服器資源,降低了伺服器的服務質量和效率。可以採用"訪問控制"的方法來解決這類問題。這樣的策略可以如下所示:

a.只允許乙個ip位址列表中的訪問

b.限制每個ip能同時併發訪問的數量

注意:上面提到的dos, 是從字面上的意思理解的deny of service. 而不是特定的針對tcp協議中的連線握手而採用的攻擊方式

server在向client提供服務時,總是有乙個容量限制的,比如能併發響應1000個請求,如果有人惡意的併發1000個以上的請求,別人就無法使用了。我在這裡也把它看成dos。

svn伺服器搭建經驗總結

從最近幾天的實驗來看,svn subversion version 1.6.12 r955767 可以很好的執行在widnows和linux下。例如 windows2003環境 ubuntu 11.10 server環境 1 從安裝速度上來看,ubuntu下似乎要比windows下安裝快 如果操作熟...

服務降級經驗總結

服務降級,當伺服器壓力劇增的情況下,根據當前業務情況及流量對一些服務和頁面有策略的降級,以此釋放伺服器資源以保證核心任務的正常執行。服務降級方式 服務介面拒絕服務 無使用者特定資訊,頁面能訪問,但是新增刪除提示伺服器繁忙。頁面內容也可在varnish或cdn內獲取。頁面拒絕服務 頁面提示由於服務繁忙...

伺服器虛擬機器啟動失敗經驗總結

由於公司機房於凌晨意外停電,導致機房伺服器全部意外重啟,但是我們的伺服器上都是執行著多個虛擬機器,於是早上一上班就趕緊逐個啟動虛擬機器,以往經驗都是很快就全部重啟好的,but天有不測風雲,今天的兩個虛擬機器始終啟動失敗,客戶那邊一直在催著系統為什麼還未恢復,真是急啊!根據提示資訊,度娘了半天,也沒乙...