關於併發你真的了解嗎?(二)

2022-07-30 22:57:15 字數 3193 閱讀 2471

1.如果web伺服器cpu使用率很低但是又需要更高效的處理併發連線請求,您可以嘗試設定最大工作程序數。

iis作為windows平台下asp.net**發布的預設web伺服器,在效能上是提供了比較大的彈性和可伸縮性,通過應用程式池工作程序數的設定,可以支援從幾十到上萬併發數量的訪問。

在主流的主機上,每個應用程式池的單一工作程序,能夠大約承受30-50個左右的併發,如果超出此併發數量,可能會出現iis無法響應、或響應時間明顯變長的問題。通過合理設定應用程式池的最大工作程序數,可顯著提高iis應對高併發的能力,減少**響應時間。

2.建議使用 inproc 的session儲存機制

3.合理的資源**機制:大多數應用系統都存在工作時間使用量高、非工作時間使用量低的情況,針對這種現象,在系統非忙時應合理的釋放作業系統資源,因此,應合理設定應用程式池的【限制超時】和【**時間間隔】屬性。

4.程式優化(詳見《關於併發你真的了解嗎?(三)》)

5.資料庫操作優化(詳見《關於併發你真的了解嗎?(三)》)

1.對於多台伺服器來說,首先也要滿足單獨伺服器優化配置。上面有講述,這裡需要注意對於多伺服器session的儲存機制可以使用其他的方式下文有重點介紹。

2.您可能會遇到,某一台或者多台伺服器已經超過了併發處理量。而其他伺服器卻還有很富餘的併發處理能力的情況。

此種情況您可能需要分流操作,我知道的有三種分流:

2.1,集群 - 將併發請求分配到不同的伺服器上,可以是業務伺服器,也可以是資料庫伺服器。集群技術:多台伺服器應看作為乙個服務集群而不是單一的個體伺服器。群集技術是使單個伺服器實現物理和程式上的連線,並對伺服器之間的通訊進行協調,以使它們能夠執行共同的任務。即便某一台伺服器停止執行,乙個由程序臺呼叫的故障應急程式會自動將該伺服器的工作負荷轉移至另一台伺服器,以保證提供持續不斷的服務。除故障應急程式外,某些形似的群集也使用負載平衡功能,該功能可使計算負載在聯網的計算機間得以分配。

2.2,分布式 - 分布式是把單次請求的多項業務邏輯分配到多個伺服器上,這樣可以同步處理很多邏輯,一般使用與特別複雜的業務請求。分布式系統(distributed system)是建立在網路之上的軟體系統。正是因為軟體的特性,所以分布式系統具有高度的內聚性和透明性。因此,網路和分布式系統之間的區別更多的在於高層軟體(特別是作業系統),而不是硬體。內聚性是指每乙個資料庫分布節點高度自治,有本地的資料庫管理系統。透明性是指每乙個資料庫分布節點對使用者的應用來說都是透明的,看不出是本地還是遠端。在分布式資料庫系統中,使用者感覺不到資料是分布的,即使用者不須知道關係是否分割、有無副本、資料存於哪個站點以及事務在哪個站點上執行等。

2.3,cdn - 在網域名稱解析層面的分流,例如將華南地區的使用者請求分配到華南的伺服器,華中地區的使用者請求分配到華中的伺服器。

3.負載均衡裝置(網上很多文章,不過多介紹)

4.使用訊息佇列。佇列的使用除去了接收和傳送應用程式同時執行的要求。減少併發處理數量的占用

5.快取機制:將需要頻繁訪問的資源存放在快取中不僅可以降低資料庫壓力而且還可以提高訪問速度進而提高使用者體驗。適程度而定必要時可以考慮快取伺服器的搭建。

6.資料庫分庫分離活躍資料 :可以自定義規則來判定哪些訪問頻繁的資料或者重要訪問來訪問單獨庫,即「重要資料特殊對待」。從而減輕主庫壓力。並且可以提高使用者體驗。

7.降低響應時間(詳見《關於併發你真的了解嗎?(三)》

),總體分為降低程式執行時間,降低資料庫操作時間。要知道即使是毫秒級的程式執行速度差異,在足夠大的併發訪問量下。差距也是異常驚人的。

8.asp.net的session共享

asp.net提供了五種session儲存機制:

(1)off 設定為不使用session功能 效能 無

(2)inproc 置為將session儲存在程序內,就是asp中的儲存方式 效能 最好 

(3)stateserver 設定為將session儲存在獨立的狀態服務中。 效能損失10-15% 一般用於伺服器集群使用

(4)sqlserver 設定將session儲存在sql server中。效能損失10-20%

(5)custom 自定製的儲存方案 效能 由實現方式決定(一般自定義方式編寫不難,但是好的效能方案很難)

在asp.net程式的web.config配置檔案中對session的儲存方式進行設定。如果不顯示指定session的儲存方式,預設使用inproc的方式儲存,即session由提供服務的工作程序儲存。

為了提高iis對高併發的支援,可以增加應用程式池的工作程序數,iis會根據內建的排程演算法,將使用者的請求在多個工作程序間動態分配,如果搭建了伺服器集群和負載均衡,則使用者請求會在多台機器的多個工作程序間進行動態分配。在上述情況下,如果session的儲存方式依然為inproc,則使用者請求在多個工作程序間切換時可能出現session丟失的情況,導致請求失敗或出錯。

為解決上述為,需要將session的儲存方式設定為共享即stateserver」、「sqlserver」或「custom」方式。這三種方法中,「sqlserver」方式需要安裝獨立的sqlserver資料庫,「custom」方式需要自行實現相應的session儲存與檢索過程,部署起來相對複雜,相對上述兩種方式,「stateserver」方式在功能性和可實施性上最好,因此重點介紹此種session共享機制。

1、 確定stateserver伺服器。如果只有一台web伺服器,可指定當前伺服器為stateserver伺服器。如果存在多台伺服器集群,可指定集群中的一台符合較輕的伺服器作為stateserver伺服器。

2、 修改登錄檔,允許遠端訪問stateserver服務。 

埠預設為42424,可根據需要進行修改,下文均以42424為例。

3、 開啟【管理工具】-【服務】,找到「asp.net state service」,點選右鍵,選擇【屬性】

在彈出的【屬性】視窗中,將【啟動方式】改為「自動」,然後點選【啟動】按紐啟動服務

4、 開啟待修改**主目錄下的web.config配置檔案,搜尋找到「」配置節點,如果不存在配置節點,則在「」節點下新建「」配置節點,並將節點屬性修改為:

其中「tcpip=*」後的主機ip位址和埠可根據實際情況修改。修改完後儲存配置檔案即可。

1、 session中儲存的自定義物件必須顯示標記為可序列化「[serializable]」。如果未顯示標記為可序列化,則在訪問頁面時會報錯。

2、 stateserver伺服器必須為windows server作業系統,如windows server 2003或windows server 2008。

高併發,你真的了解嗎?

摘要 本文介紹高併發系統的度量指標,講述高併發系統的設計思路,再梳理高併發的關鍵技術,最後結合作者的經驗做一些延伸 當前,數位化在給企業帶來業務創新,推動企業高速發展的同時,也給企業的it軟體系統帶來了嚴峻的挑戰。面對流量高峰,不同的企業是如何通過技術手段解決高併發難題的呢?0 引言 軟體系統有三個...

你真的了解Java嗎?

三目運算子規則 如果第二個和第三個運算元具有相同的型別,那麼它就是條件表示式的類 型。換句話說,你可以通過繞過混合型別的計算來避免 煩。如果乙個運算元的型別是 t,t 表示 byte short 或 char,而另乙個運算元是乙個 int 型別的常量表示式,它的值是可以用型別 t 表示的,那麼條件表...

你真的了解restful api嗎?

在以前,乙個 的完成總是 all in one 頁面,資料,渲染全部在服務端完成,這樣做的最大的弊端是後期維護,擴充套件極其痛苦,開發人員必須同時具備前後端知識。於是慢慢的後來興起了前後端分離的思想 後端負責資料編造,而前端則負責資料渲染,前端靜態頁面呼叫指定api獲取到有固定格式的資料,再將資料展...