ASP.NET Web Game 架构设计1--服务器基本结构
ASP.NET Web Game 架構(gòu)設(shè)計(jì)1--服務(wù)器基本結(jié)構(gòu)
?
1.???? 基本結(jié)構(gòu)圖
?
?
?
?
2.????? 系統(tǒng)組成與角色
??? 整個(gè)系統(tǒng)大體上分為三個(gè)部分:1.網(wǎng)頁(yè)客戶(hù)端。2.IIS Web服務(wù)器。3.數(shù)據(jù)庫(kù)及邏輯服務(wù)器。其中Web服務(wù)器不處理任何邏輯,它的作用只有兩點(diǎn):1.承載用戶(hù)。2.中轉(zhuǎn)數(shù)據(jù),利用ADO.NET Data Service以及調(diào)用其他的WCF,使得Web服務(wù)器成為一個(gè)數(shù)據(jù)代理服務(wù)器。
?? 經(jīng)過(guò)失敗經(jīng)驗(yàn)的論證,讓IIS承載過(guò)多的邏輯,絕對(duì)是一個(gè)爛想法,應(yīng)用系統(tǒng)應(yīng)該在一開(kāi)始設(shè)計(jì)的時(shí)候就徹底屏蔽這種方案,從上面圖中也不難看出來(lái),邏輯的處理應(yīng)該是一部分放在網(wǎng)頁(yè)中使用JS來(lái)實(shí)現(xiàn),另外一部分放在應(yīng)用系統(tǒng)的邏輯服務(wù)器上實(shí)現(xiàn)的。
??? 另外,如果簡(jiǎn)單的將網(wǎng)頁(yè)部署到IIS上,性能指標(biāo)總上不去,典型的體現(xiàn)在要么內(nèi)存占用很高,CPU上不去,要么是CPU上去了,內(nèi)存又占用的太小,這樣很難將服務(wù)器的能力發(fā)揮到極致。為了應(yīng)對(duì)這個(gè)問(wèn)題,一個(gè)非常理想的方案是使用IIS中的WebGarden技術(shù),可以啟動(dòng)多個(gè)w3wp.exe,即多個(gè)IIS服務(wù)進(jìn)程。這樣作的好處是將CPU資源以及內(nèi)存資源均勻的分配到多個(gè)服務(wù)進(jìn)程上去,以提升服務(wù)器資源的利用效率。但是,這同樣也帶來(lái)了一些問(wèn)題,因?yàn)橐獙⑼粋€(gè)網(wǎng)站的資源分配到多個(gè)進(jìn)程,這樣內(nèi)存就無(wú)法共享,再加上HTTP協(xié)議本身就是短連接,所以每次客戶(hù)端發(fā)出請(qǐng)求的時(shí)候,都有可能被不同的服務(wù)進(jìn)程所接收,這樣就是導(dǎo)致Session無(wú)法使用,很頭疼吧。為了應(yīng)對(duì)這個(gè)問(wèn)題,我們又需要去配置應(yīng)用程序的狀態(tài)服務(wù)器,說(shuō)白了,就是將Session統(tǒng)一存儲(chǔ)到一個(gè)服務(wù)器上,通常是將其以二進(jìn)制方式存儲(chǔ)到SQL Server中。當(dāng)然,這時(shí)要求存儲(chǔ)在Session中的數(shù)據(jù)必須是可以串行化的。
??? 上面說(shuō)的,可以提高服務(wù)器的利用效率以外,在IIS上配置WebGarden還有什么優(yōu)點(diǎn)呢?從上面的說(shuō)明中不難看出,因?yàn)闋顟B(tài)是存儲(chǔ)在統(tǒng)一的SQL Server中的,所以用戶(hù)狀態(tài)是與網(wǎng)站配置到哪一臺(tái)Web服務(wù)器是無(wú)關(guān)的。因此,我們可以大量添加Web服務(wù)器,同時(shí),位于不同Web服務(wù)器上的用戶(hù)可以共享相同的SQL Server狀態(tài)管理,這樣可以大大提高在同服、同世界的用戶(hù)數(shù)量。
??? Web服務(wù)器,我們?cè)賮?lái)看一下應(yīng)用程序的邏輯服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器。這兩個(gè)服務(wù)器通常在運(yùn)營(yíng)成本有限的情況下,是放在同一臺(tái)服務(wù)器上的(當(dāng)然,能分開(kāi)是最好的)。應(yīng)用程序服務(wù)器一般會(huì)在 某一個(gè)時(shí)間間隔下出現(xiàn)一個(gè)CPU使用的高峰,內(nèi)存占用一般都很小,而對(duì)于SQL Server來(lái)講,因?yàn)橐峁┐罅康木彺?#xff0c;所以對(duì)于內(nèi)存的消耗是比較大的。
?? 輯服務(wù)程序,是整個(gè)系統(tǒng)最容易出現(xiàn)性能瓶頸的地方,可以使用C++或者C#來(lái)編寫(xiě),然后提供一個(gè)WCF(TCP方式的)的外部接口,以便Web服務(wù)器調(diào)用。值得重點(diǎn)強(qiáng)調(diào)的,無(wú)論是利用C++還是C#來(lái)編寫(xiě)該程序,都一定要考慮好資源釋放問(wèn)題(Java,C#開(kāi)發(fā)人員更應(yīng)該注意這一點(diǎn),千萬(wàn)別想著什么垃圾自動(dòng)回收,很多資源是回收不了的),包括數(shù)據(jù)庫(kù)連接的釋放,數(shù)據(jù)結(jié)構(gòu)(臨時(shí)數(shù)據(jù)的儲(chǔ)存體)的釋放,以及無(wú)用線(xiàn)程的釋放。
?????? 這次先聊到這里,在后面的BLog中我們會(huì)對(duì)整個(gè)構(gòu)架中的每一個(gè)技術(shù)點(diǎn)進(jìn)行詳細(xì)說(shuō)明的。如何大家需要技術(shù)支援,請(qǐng)給我發(fā)Email:warensoft@foxmail.com
?
轉(zhuǎn)載于:https://www.cnblogs.com/warensoft/archive/2010/03/26/1697293.html
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Web Game 架构设计1--服务器基本结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Day_03-函数和模块的使用
- 下一篇: https://enhancer.io