一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

關(guān)于大型ASP.NET應用系統(tǒng)的架構(gòu)—如何做到高性能高可伸縮性

  簡介

  前面一篇《關(guān)于大型ASP.NET應用系統(tǒng)的架構(gòu)-架構(gòu)的選擇》寫完之后,有一些同仁熱心回復,有的是提問題,同時希望能舉一些例子來說明;有的是提建議,希望下一篇寫得更詳細點;還有的同仁提出不同的觀點。感謝大家的參與。會繼續(xù)努力的。本文將針對Layer和Tier的區(qū)別做個辨析。并詳細介紹3 Tier / N Tier架構(gòu)中各Tier的開發(fā)。各Tier的分布式方式。以及為了達到高性能,低延遲,高可伸縮性,需要采取哪些方法和手段。

  關(guān)于“大型ASP.NET應用系統(tǒng) ”的概念

  意指能支持同時在線用戶數(shù)目很多的ASP.NET應用系統(tǒng)。同時在線用戶數(shù)目要達到多少才算大型。其實也沒有一個可以作為共識的定義,個人認為如果一個應用系統(tǒng)能做到7x24小時同時在線用戶數(shù)不少于5000的,應該可以稱為大型應用系統(tǒng)。例如:微軟的官網(wǎng)(www.microsoft.com),7x24小時都有來自全球的人訪問,有查閱MSDN的,有訪問微軟博客的,有看微軟產(chǎn)品信息的,有逛微軟論壇的,等等等等。同時訪問微軟官網(wǎng)的人太多了,遠多于5000。還有Myspace。 它有總數(shù)為幾千萬的用戶,它的同時在線用戶數(shù)也是相當驚人的。它之所以能服務眾多的用戶,是因其背后有一個龐大的系統(tǒng)來支撐。

  層Layer和排Tier的辨析

  這里針對上篇的評論,對層Layer和排Tier做個辨析。上篇提到了分層Layer的架構(gòu)只能部署在同一臺服務上,有同仁在評論里提出不同意見,說分層的架構(gòu)也可以部署到多臺服務器上的。層Layer是指應用程序各功能在邏輯上的分組,而排Tier表示了應用程序各功能是物理分部在多臺計算機上。層Layer很好理解,就是相同功能的類被邏輯上分到了一組,如:數(shù)據(jù)存取的類都放到了一塊,在同一個名稱空間下,在同一個程序集里,商務邏輯的類也是一樣進行分組,各組之間有統(tǒng)一的調(diào)用形式。如商務邏輯的類引用數(shù)據(jù)存取的類,調(diào)用其方法,取得返回結(jié)果。同時UI層可調(diào)用商務邏輯層的類。商務邏輯層的類既有服務UI層的功能,也有調(diào)用數(shù)據(jù)訪問層的功能。是個承上啟下的層。這些層都是按照功能來劃分的。層Layer是一種邏輯上的劃分。排Tier是特指物理的劃分,應用程序的各功能,分別被放在了不同的服務器上,如UI功能單獨占用一些服務器,商務邏輯功能占用另外的一些服務器。這兩種功能部件之間有服務器的邊界,那么就有專門負責分布式調(diào)用的功能部件。如果單從功能邏輯上看,排Tier中也是有層Layer的,只是比傳統(tǒng)層Layer的劃分多了一些用于分布式調(diào)用的層Layer。排Tier是各層Layer物理分離后,再加入一些負責分布式調(diào)用的層Layer才形成的。排Tier和層Layer是有著聯(lián)系的。從這個意義上說,排Tier是層Layer物理分離時的特例。有層Layer物理分離的情況下,可以稱之為分層的架構(gòu),但是實際上這并不準確,因為排Tier是專門為這個場景定義的。有物理分離,就叫排Tier更準確些。層Layer只要一做物理分離,就轉(zhuǎn)化成了排Tier。

  從部署角度試圖來區(qū)別分層Layer的架構(gòu)和3 排Tier / N 排Tier的架構(gòu)。因為物理分離的場景已經(jīng)被定義成排Tier,那么剩下的就只能是物理不分離的場景了。所以分層Layered架構(gòu)就特指部署在同一臺服務上的場景(即物理不分離),3 排Tier / N 排Tier架構(gòu)就特指各層Layer物理分離的場景。分層的架構(gòu)部署到多臺服務器上,理論上是可以的,但是光靠原有的層是不夠的,有了服務器的邊界之后,原來在同一個進程里面的方法調(diào)用就不再可行,必須新加一些層來做分布式的調(diào)用,才能讓原來的各層運行起來。等做完這一切,發(fā)現(xiàn)這個架構(gòu)再叫分層Layered的架構(gòu)就不合適了,必須得叫3 排Tier / N 排Tier架構(gòu)才合適。

  層Layer和排Tier之間有聯(lián)系,分層Layered的架構(gòu)和3排Tier / N 排Tier架構(gòu)可以互相轉(zhuǎn)化。

  整體映象

  從前面的描述中可以得知應用系統(tǒng)的每一排Tier都是由許多服務器來完成的。比如UI排Tier,可以是幾十個服務器,幾百個服務器,甚至是幾千個服務器。具體每一個排Tier所需服務器的數(shù)目根據(jù)實際的需要來配置。所謂實際的需要就是看這一排Tier服務器的硬件資源利用率。比如CPU, 內(nèi)存,磁盤讀寫等情況,如果相當高,就必須加入新的服務器部署該排Tier同樣的應用到新服務器上。讓新的服務器也能分擔些壓力。其實這就是要讓應用程序能支持高可伸縮性。在每一個排Tier之間有硬件負載均衡,再其后就是下一個排Tier的服務接口了。在其服務接口之后才是該排Tier的服務。

  除了高伸縮性之外,還有如何保證高性能。即應用程序必須是良好設計的。在每一個排Tier的內(nèi)部,可以采取一些措施讓應用程序的執(zhí)行效率達到最高。讓硬件的資源得到充分的利用。這有一些策略,如緩存。減少訪問數(shù)據(jù)庫的次數(shù),等等。以下是一個可伸縮的ASP.NET應用系統(tǒng)的整體映象圖:

The big picture  一個在互聯(lián)網(wǎng)上的用戶的請求的處理過程是這樣的:

  1. 首先經(jīng)硬件負載均衡處理,選定一個Web服務器來響應這個請求,然后將該請求交給該服務器

  2. 此Web服務器執(zhí)行所請求的頁面,該頁面的后端代碼先查詢緩存服務器,即調(diào)用緩存服務接口查詢是否已經(jīng)有緩存,如果有,就直接返回緩存的結(jié)果。

  3. 如果緩存里沒有就調(diào)用商務邏輯服務接口,進而調(diào)用商務邏輯服務。商務邏輯服務執(zhí)行時,如果需要訪問數(shù)據(jù)庫,會先檢查緩存中是否有緩存的數(shù)據(jù)庫內(nèi)容,如果有,就會用緩存的數(shù)據(jù)庫內(nèi)容來進行商務邏輯的計算。如果沒有緩存,就會調(diào)用數(shù)據(jù)訪問接口以存取數(shù)據(jù)。

  4. 類似地,數(shù)據(jù)訪問服務也會查看緩存,然后根據(jù)所要求的數(shù)據(jù)內(nèi)容去訪問相應的數(shù)據(jù)庫,如果是只讀的請求,數(shù)據(jù)訪問服務可以將數(shù)據(jù)庫訪問請求發(fā)給做日志復制的數(shù)據(jù)庫服務器。如果是寫的請求,可以發(fā)給主數(shù)據(jù)庫服務器

  5. 數(shù)據(jù)庫服務器執(zhí)行應用的Sql請求,返回結(jié)果。再由數(shù)據(jù)服務返回給商務邏輯服務。

  6. 商務邏輯服務再返回給Web服務器,由Web服務器生成頁面內(nèi)容返回給互聯(lián)網(wǎng)上的用戶。

  以上過程與分層Layered的架構(gòu)類似,只是比分層Layered的架構(gòu)多經(jīng)過了幾個服務接口。如果沒有這些服務接口,因為UI排Tier,商務邏輯排Tier,數(shù)據(jù)訪問排Tier是在不同的服務器上的,它們根本就不能直接對話。因為它們是在不同的.NET VM中的。它們必須得借助與這些服務接口才能互相之間進行調(diào)用。這些服務接口具體的組成技術(shù)可以是WCF,也可以是.NET remoting,等。應該說目前最好的選擇是WCF。

  UI排Tier

  關(guān)于SessionState的技術(shù)方案

  為了讓應用程序具有可伸縮性,必須讓每一排Tier都有負載均衡的特性,也就是要做到用戶的請求由任何一個同一排Tier中的服務器來處理都不會有任何問題。關(guān)于用戶的Session的處理就必須有一個妥善的解決方案。有不少人不贊同采用SessionState,覺得SessionState對ASP.NET應用的性能影響比較大。還有人寫文章說同一個SessionID的AcquireRequestState會在頁面代碼前獲得對Session對象的鎖,因此容易有較大的延遲,對性能影響不小。另外的人認為Session占用服務器的內(nèi)存比較多,同時需要一些CPU資源來將Session中的對象序列化和反序列化。所以一種比較普遍的觀點是不采用ASP.NET本身提供的Session機制。其實采用SessionState和不采用SessionState都各有特點。了解其特點后再做權(quán)衡取舍才比較合適。

完全不采用SesstionState

  完全不采用SesstionState是在Web.config中寫上<sessionState mode=”Off”/>     或者   <Pages enableSessionState=”Off”/>來禁止SessionState。那整個應用的所有頁面都不會用SessionState。其實這不全面,http請求處理周期里還有一個系統(tǒng)默認的httpmodule在處理SessionState。還須在Web.config加一句:

<httpModules>
<remove name="Session" />
</httpModules>

NET技術(shù)關(guān)于大型ASP.NET應用系統(tǒng)的架構(gòu)—如何做到高性能高可伸縮性,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本韩国三级在线 | 久夜tv | 我色网 | 一级特黄毛片 | 亚洲欧洲国产经精品香蕉网 | 欧美人禽杂交狂配在线观看视频 | 国产成人青草视频 | 亚洲欧美7777 | 国产亚洲精品sese在线播放 | 777色淫网站女女免费 | 欧美图片在线观看 | 伊人久久大香线蕉综合热线 | 狠狠色丁香久久综合五月 | 精品日韩欧美一区二区三区 | 国产精品大全国产精品 | 激情综合在线 | 国内色综合精品视频在线 | 亚洲成a人一区二区三区 | 玖玖操| www我要色综合com | 国产午夜精品久久久久九九 | 免费欧美一级 | 中文字幕一级毛片 | 四虎新网站 | 激情视频图片小说 | 久久99国产亚洲高清 | 国产成人亚洲精品91专区高清 | 九九九精品在线观看 | 欧美日本高清视频在线观看 | 色视频在线免费看 | a丫久久久久久一级毛片 | 国产精品久久久久久福利69堂 | 日本一区二区三区免费观看 | 精品无码久久久久久国产 | 中文字幕在线观看一区二区三区 | 国产成人精品微拍视频 | 国产成人精品一区二区免费 | 国内精品久久久久影院不卡 | 亚洲欧美在线免费 | 久久免费精品视频 | 色婷婷.com |