天天看點

高性能ASP.NET系統架構設計

大型動态應用系統平台主要是針對于大流量、高并發網站建立的底層系統架構。大型網站的運作需要一個可靠、安全、可擴充、易維護的應用系統平台做為支撐,以保證網站應用的平穩運作。

大型動态應用系統又可分為幾個子系統:

Web前端系統、負載均衡系統、資料庫叢集系統、緩存系統、分布式存儲系統、分布式伺服器管理系統、代碼分發系統

1、web前端系統 

高性能ASP.NET系統架構設計

為了達到不同應用的伺服器共享、避免單點故障、集中管理、統一配置等目的,不以應用劃分服 務器,而是将所有伺服器做統一使用,每台伺服器都可以對多個應用提供服務,當某些應用通路量升高時,通過增加伺服器節點達到整個伺服器叢集的性能提高,同時使他應用也會受益。

該Web前端系統基于IIS/ASP.NET等的虛拟主機平台,提供PHP程式運作環境。伺服器對開發人員是透明的,不需要開發人員介入伺服器管理。

 2、負載均衡系統

高性能ASP.NET系統架構設計

負載均衡系統分為硬體和軟體兩種。硬體負載均衡效率高,但是價格貴,比如F5等。軟體負載均衡系統價格較低或者免費,效率較硬體負載均衡系統低,不過對于流量一般或稍大些網站來講也足夠使用,比如lvs,nginx。大多數網站都是硬體、軟體負載均衡系統并用。

3、資料庫叢集系統

高性能ASP.NET系統架構設計

由于Web前端采用了負載均衡叢集結構提高了服務的有效性和擴充性,是以資料庫必須也是高可靠的才能保證整個服務體系的高可靠性,如何建構一個高可靠的、可以提供大規模并發處理的資料庫體系?

我們可以采用如上圖所示的方案:

1)使用SQL資料庫,考慮到Web應用的資料庫讀多寫少的特點,我們主要對讀資料庫做了優化,提供專用的讀資料庫和寫資料庫,在應用程式中實作讀操作和寫操作分别通路不同的資料庫。

2)使用同步機制實作快速将主庫(寫庫)的資料庫複制到從庫(讀庫)。一個主庫對應多個從庫,主庫資料實時同步到從庫。

3)寫資料庫有多台,每台都可以提供多個應用共同使用,這樣可以解決寫庫的性能瓶頸問題和單點故障問題。

4)讀資料庫有多台,通過負載均衡裝置實作負載均衡,進而達到讀資料庫的高性能、高可靠和高可擴充性。

5)資料庫伺服器和應用伺服器分離。

6)從資料庫使用BigIP做負載均衡。 

4、緩存系統

高性能ASP.NET系統架構設計

緩存分為檔案緩存、記憶體緩存、資料庫緩存。在大型Web應用中使用最多且效率最高的是記憶體緩存。最常用的記憶體緩存工具是Memcachd。使用正确的緩存系統可以達到實作以下目标:

1、使用緩存系統可以提高通路效率,提高伺服器吞吐能力,改善使用者體驗。

2、減輕對資料庫及存儲集伺服器的通路壓力。

3、Memcached伺服器有多台,避免單點故障,提供高可靠性和可擴充性,提高性能。 

5、分布式存儲系統

高性能ASP.NET系統架構設計

Web系統平台中的存儲需求有下面兩個特點:

1) 存儲量很大,經常會達到單台伺服器無法提供的規模,比如相冊、視訊等應用。是以需要專業的大規模存儲系統。

2) 負載均衡cluster中的每個節點都有可能通路任何一個資料對象,每個節點對資料的處理也能被其他節點共享,是以這些節點要操作的資料從邏輯上看隻能是一個整體,不是各自獨立的資料資源。

是以高性能的分布式存儲系統對于大型網站應用來說是非常重要的一環。(這個地方需要加入對某個分布式存儲系統的簡單介紹。)

6、分布式伺服器管理系統

高性能ASP.NET系統架構設計

随着網站通路流量的不斷增加,大多的網絡服務都是以負載均衡叢集的方式對外提供服務,随之叢集規模的擴大,原來基于單機的伺服器管理模式已經不能夠滿足我們的需求,新的需求必須能夠集中式的、分組的、批量的、自動化的對伺服器進行管理,能夠批量化的執行計劃任務。 

在分布式伺服器管理系統軟體中有一些比較優秀的軟體,其中比較理想的一個是Cfengine。它可以對伺服器進行分組,不同的分組可以分别定制系統配置檔案、計劃任務等配置。

它是基于C/S 結構的,所有的伺服器配置和管理腳本程式都儲存在Cfengine Server上,而被管理的伺服器運作着 Cfengine Client程式,Cfengine Client通過SSL加密的連接配接定期的向伺服器端發送請求以擷取最新的配置檔案和管理指令、腳本程式、更新檔安裝等任務。

有了Cfengine 這種集中式的伺服器管理工具,我們就可以高效的實作大規模的伺服器叢集管理,被管理伺服器和 Cfengine Server可以分布在任何位置,隻要網絡可以連通就能實作快速自動化的管理。

7、代碼分發系統

高性能ASP.NET系統架構設計

随着網站通路流量的不斷增加,大多的網絡服務都是以負載均衡叢集的方式對外提供服務,随之叢集規模的擴大,為了滿足叢集環境下程式代碼的批量分發和更新,我們還需要一個程式代碼釋出系統。

這個釋出系統可以幫我們實作下面的目标:

1) 生産環境的伺服器以虛拟主機方式提供服務,不需要開發人員介入維護和直接操作,提供釋出系統可以實作不需要登陸伺服器就能把程式分發到目标伺服器。