第一篇:垂直行業(yè)網(wǎng)站服務器架構方案
服務器架構
一、目前架構:
114.113.229.66massterHadoop114.113.229.72V1web114.113.229.73V2webmysql主JobsHbase114.113.229.67slaveHadoopHadoop-data114.113.229.68tomcatV1 搜索tomcatSolrSolr Home索引搜索服務編輯后臺114.113.229.69slaveHadoopHadoop-data114.113.229.70slaveHadoopHadoop-dataMongoDBHbase114.113.229.71slaveHadoopHadoop-dataMongoDBHbase114.113.229.74slaveHadoopHadoop-dataMongoDBHbasemysql從 爬蟲使用6臺,其中3臺同時放了MongoDB服務,1臺同時放了搜索服務和編輯后臺服務,直接導致服務器不能專職使用互相影響,大部分服務器CPU一直在高負荷運作,67為我們的搜索服務器,其中編輯后臺和爬蟲服務會影響到搜索服務的運行,一旦cpu負荷到100%,那么搜索指令將不會被執(zhí)行,直接表現(xiàn)為搜索任何關鍵詞或分類都無結果。
缺點:服務器不能發(fā)揮出應用的性能。
二、基本架構:需要9臺服務器
114.113.229.66massterHadoopJobsHbase114.113.229.71V2webmysqlMail114.113.229.67slaveHadoopHadoop-datatomcat編輯后臺114.113.229.69slaveHadoopHadoop-dataCPS/API114.113.229.72slaveHadoopHadoop-dataHbase114.113.229.73slaveHadoopHadoop-dataHbase114.113.229.74slaveHadoopHadoop-dataHbase114.113.229.68SolrSolr Home索引搜索服務114.113.229.70MongoDB
? 一臺WEB主機;支持500人同時在線,每天約百萬PV。? 一臺搜索SOLR主機;支持 400W 以下數(shù)據(jù)量。
? 爬蟲HADOOP共6臺;能做到全部商城數(shù)據(jù)更新2天更新一次,主流5個綜合商城每天更新一次(京東除外)
? CPS和API搭建在hadoop集群內(nèi); ? 一臺獨立MongoDb;
以上架構缺點:沒有容災性,宕機會丟失數(shù)據(jù),尤其是WEB/MYSQL服務器、搜索服務器和MongoDB服務器這3臺機器是支撐我們前端服務的,一旦一臺主機宕機網(wǎng)站就無法正常使用。
三、最佳架構:需要18臺服務器
114.113.229.73WEB主webmysqlMail114.113.229.72WEB從webmysqlMail114.113.229.74massterHadoopJobs114.113.229.*搜索SolrSolr Home114.113.229.*搜索SolrSolr HomeAPI114.113.229.*搜索主SolrSolr Home索引搜索服務114.113.229.67slaveHadoopHadoop-datatomcat編輯后臺114.113.229.69slaveHadoopHadoop-data114.113.229.*slaveHadoopHadoop-data114.113.229.*slaveHadoopHadoop-data搜索服務搜索服務114.113.229.66slaveHadoop114.113.229.70數(shù)據(jù)庫從MongoDB114.113.229.71數(shù)據(jù)庫從MongoDB114.113.229.68數(shù)據(jù)庫主MongoDBHadoop-data114.113.229.*slaveHadoopHadoop-data114.113.229.*slaveHadoopHadoop-data114.113.229.*slaveHadoopHadoop-data114.113.229.*CPSCPS
? 爬蟲服務器Hadoop:9臺(配置需求不高)架構可以隨時擴容。滿足所有80家商城數(shù)據(jù)更新每天可以更新一次,部分綜合商城可以做到每天更新2次(京東除外)
? 數(shù)據(jù)庫服務器MongoDB:3臺主從(配置需求比較高)架構可以隨時擴容。
? 搜索服務器SOLR/編輯后臺:3臺主從(配置需求比較高)架構可以隨時擴容。搜索服務器Solr服務將支持 千萬級以上數(shù)據(jù)量,并可以隨時根據(jù)服務器壓力擴容。? CPS: 1臺,能滿足初期CPS接入流量,可以隨時擴容。? Web/Mysql:2臺主從(配置需求比較高)架構可以隨時擴容。
以上架構優(yōu)點:具有數(shù)據(jù)容災性,任意一個節(jié)點的服務器宕機,不影響在線服務。
第二篇:游戲服務器架構
星辰小屋004km.cn了,如果你要是想用自己的就把sa賬戶的密碼修改成自己的不過要修改五去文件
導入備份數(shù)據(jù)庫
星辰小屋004km.cn
星辰小屋004km.cn
星辰小屋004km.cn
星辰小屋004km.cn
再導入這個(方法和上面同樣)
星辰小屋004km.cn
多了兩個數(shù)據(jù)庫,這就是游戲的數(shù)據(jù)庫
星辰小屋004km.cn
現(xiàn)在數(shù)據(jù)庫完了,可以為自己注冊個賬號來測試了
服務器做好
了,現(xiàn)
在來
安
裝
客
戶
端
星辰小屋004km.cn
現(xiàn)在只要把服務器的服務開啟客戶端就可能進入游戲了
我沒有全部開啟因我只是做測試,一個人玩就開這么多就行了,要是多人玩就全開
星辰小屋004km.cn
開啟服務時在winows2003中正規(guī)服務器1線到3線可能開啟不了,解決方法:我的電腦-屬性-高級-設置
實驗結果:
星辰小屋004km.cn
在一臺機子上我用的兩個虛機太卡了所以我就不進入游戲了,有興趣的把郵箱留下我可以把服務器軟件發(fā)給你
第三篇:電子商務網(wǎng)站服務器系統(tǒng)架設方案
電子商務網(wǎng)站服務器系統(tǒng)架設方案
目前最熱門的互聯(lián)網(wǎng)應用應用主要是建立電子商務網(wǎng)站。很多中小型企業(yè)的技術人員或者打算以網(wǎng)站、盈利的個人團體組織都經(jīng)常提出這么一個疑問:究竟什么樣的配置可以支持多大的流量?
其實這個問題不可能有準確答案,因為每個網(wǎng)站使用的Web系統(tǒng)都不一樣,有些喜歡用IIS+ASP,有些則是用Apache+PHP,這在腳本的執(zhí)行效率上本身就存在很大的差異,另外,網(wǎng)頁系統(tǒng)編寫的復雜程度和優(yōu)化程度也極大的影響著服務器能夠承載的訪問人數(shù),大部分的新聞資訊、下載類網(wǎng)站都已經(jīng)使用了靜態(tài)頁面來減少Web系統(tǒng)對服務器處理能力的依賴,但是仍然有不少例如論壇、網(wǎng)上商城一類的系統(tǒng)需要大量動態(tài)代碼的支持,所以籠統(tǒng)的去談論一個服務器能夠支持多少訪問量是沒有實際意義的,還是需要具體的去分析。互聯(lián)先鋒基于5年來為電子商務客戶提供的初期架設方案分享給大家,采用香港機房服務器,國際帶寬,大陸電信網(wǎng)通和網(wǎng)通訪速度都快,比雙線效果更好,而且國外及港澳臺訪問也很快,非常適合國內(nèi)及國際性的網(wǎng)站,并且不用備案,域名可以直接綁定。互聯(lián)先鋒是國內(nèi)優(yōu)秀海外IDC服務商,是服務最優(yōu)秀的海外主機品牌。
服務器配置
處理器:一顆四核至強3220 2.4GHz
內(nèi)存:4GB DDR2 800
硬盤:1000G SATA
主板:英特爾S3200SH
帶寬:獨享2M國際出口帶寬(大流量用戶需購買更大獨享國際帶寬)
流量:不限流量
IP數(shù):1個
機房:香港新世界電訊
硬件:采用性價比極高的至強四核服務器,質(zhì)量和穩(wěn)定性極好。
環(huán)境:新世界機房線路對世界各地均穩(wěn)定正常,ping值小,丟包率低,非常適合做網(wǎng)絡電話??蛻羧耗酥林袊鴩鴥?nèi)、日本、菲律賓、南非、泰國等亞洲范圍。
第四篇:[zz]游戲服務器架構探討(上)
[zz]游戲服務器架構探討(上)2008-10-31 1116這里討論的游戲服務器架構大概是目前國內(nèi)乃至世界上的網(wǎng)游通用的一種架構了:
httpbbs.gameres.comshowthread.aspthreadid=93775 作者:qinglan
有段時間沒有研究技術了,這次正好看到了新版的mangos,較之以前我看的版本有了比較大的完善,于是再次瀏覽了下他的代碼,也借此機會整理下我在游戲服務器開發(fā)方面的一些心得,與大家探討。
另外由于為避免與公司引起一些不必要的糾紛,我所描述的全都是通過google能夠找到的資料,所以也可以認為我下面的內(nèi)容都是網(wǎng)上所找資料的整理合集。在平時的開發(fā)中我也搜索過相關的中文網(wǎng)頁,很少有講游戲服務器相關技術的,大家的討論主要還是集中在3D相關技術,所以也希望我將開始的這幾篇文章能夠起到拋磚引玉的作用,潛水的兄弟們也都上來透透氣。
要描述一項技術或是一個行業(yè),一般都會從其最古老的歷史開始說起,我本也想按著這個套路走,無奈本人乃一八零后小輩,沒有經(jīng)歷過那些苦澀的卻令人羨慕的單機游戲開發(fā),也沒有響當當?shù)哪玫某鍪值膬?yōu)秀作品,所以也就只能就我所了解的一些技術做些簡單的描述。一來算是敦促自己對知識做個梳理,二來與大家探討的過程也能夠找到我之前學習的不足和理解上的錯誤,最后呢,有可能的話也跟業(yè)內(nèi)的同行們混個臉熟,哪天要是想換個工作了也好有個人幫忙介紹下。最后的理由有些俗了。
關于游戲開發(fā),正如云風在其blog上所說,游戲項目始終只是個小工程,另外開發(fā)時間還是個很重要的問題,所以軟件工程的思想及方法在大部分的游戲公司中并不怎么受歡迎。當然這也只是從我個人一些膚淺的了解所得,可能不夠充分。從游戲開發(fā)的程序團隊的人員構成上也可看出來,基本只能算作是小開發(fā)團隊。有些工作室性質(zhì)的開發(fā)團隊,那就更簡單了。
我所了解的早些的開發(fā)團隊,其成員間沒有什么嚴格的分工,大家憑興趣自由選擇一些模塊來負責,完成了再去負責另一模塊,有其他同事的工作需要接手或協(xié)助的也會立即轉入。所以游戲開發(fā)人員基本都是多面手,從網(wǎng)絡到數(shù)據(jù)庫,從游戲邏輯到圖形圖象,每一項都有所了解,并能實際應用?;蛘哒f都具有非常強的學習能力,在接手一項新的任務后能在很短的時間內(nèi)對該領域的技術迅速掌握并消化,而且還能現(xiàn)炒現(xiàn)賣。當然,這也與早期2D游戲的技術要求相對比較簡單,游戲邏輯也沒有現(xiàn)在這般復雜有關。而更重要的可能是,都是被逼出來的吧!)
好了,閑話少說,下一篇,也就是第一篇了,主題為,服務器結構探討。
服務器結構探討--最簡單的結構
所謂服務器結構,也就是如何將服務器各部分合理地安排,以實現(xiàn)最初的功能需求。所以,結構本無所謂正確與錯誤;當然,優(yōu)秀的結構更有助于系統(tǒng)的搭建,對系統(tǒng)的可擴展性及可維護性也有更大的幫助。
好的結構不是一蹴而就的,而且每個設計者心中的那把尺都不相同,所以這個優(yōu)秀結構的定義也就沒有定論。在這里,我們不打算對現(xiàn)有游戲結構做評價,而是試著從頭開始搭建一個我們需要的MMOG結構。
對于一個最簡單的游戲服務器來說,它只需要能夠接受來自客戶端的連接請求,然后處理客戶端在游戲世界中的移動及交互,也即游戲邏輯處理即可。如果我們把這兩項功能集成到一個服務進程中,則最終的結構很簡單:
client-----server
嗯,太簡單了點,這樣也敢叫服務器結構?好吧,現(xiàn)在我們來往里面稍稍加點東西,讓它看起來更像是服務器結構一些。
一般來說,我們在接入游戲服務器的時候都會要提供一個帳號和密碼,驗證通過后才能進入。關于為什么要提供用戶名和密碼才能進入的問題我們這里不打算做過多討論,云風曾對此也提出過類似的疑問,并給出了只用一個標識串就能進入的設想,有興趣的可以去看看他們的討論。但不管是采用何種方式進入,照目前看來我們的服務器起碼得提供一個帳號驗證的功能。
我們把觀察點先集中在一個大區(qū)內(nèi)。在大多數(shù)情況下,一個大區(qū)內(nèi)都會有多組游戲服,也就是多個游戲世界可供選擇。簡單點來實現(xiàn),我們完全可以拋棄這個大區(qū)的概念,認為一個大區(qū)也就是放在同一個機房的多臺服務器組,各服務器組間沒有什么關系。這樣,我們可為每組服務器單獨配備一臺登錄服。最后的結構圖應該像這樣:
loginServer gameServer client
該結構下的玩家操作流程為,先選擇大區(qū),再選擇大區(qū)下的某臺服務器,即某個游戲世界,點擊進入后開始帳號驗證過程,驗證成功則進入了該游戲世界。但是,如果玩家想要切換游戲世界,他只能先退出當前游戲世界,然后進入新的游戲世界重新進行帳號驗證。
早期的游戲大都采用的是這種結構,有些游戲在實現(xiàn)時采用了一些技術手段使得在切換游戲服時不需要再次驗證帳號,但整體結構還是未做改變。
該結構存在一個服務器資源配置的問題。因為登錄服處理的邏輯相對來說比較簡單,就是將玩家提交的帳號和密碼送到數(shù)據(jù)庫進行驗證,和生成會話密鑰發(fā)送給游戲服和客戶端,操作完成后連接就會立即斷開,而且玩家在以后的游戲過程中不會再與登錄服打任何交道。這樣處理短連接的過程使得系統(tǒng)在大多數(shù)情況下都是比較空閑的,但是在某些時候,由于請求比較密集,比如開新服的時候,登錄服的負載又會比較大,甚至會處理不過來。
另外在實際的游戲運營中,有些游戲世界很火爆,而有些游戲世界卻非常冷清,甚至沒有多少人玩的情況也是很常見的。所以,我們能否更合理地配置登錄服資源,使得整個大區(qū)內(nèi)的登錄服可以共享就成了下一步改進的目標。
服務器結構探討--登錄服的負載均衡
回想一下我們在玩wow時的操作流程:運行wow.exe進入游戲后,首先就會要求我們輸入用戶名和密碼進行驗證,驗證成功后才會出來游戲世界列表,之后是排隊進入游戲世界,開始游戲...可以看到跟前面的描述有個很明顯的不同,那就是要先驗證帳號再選擇游戲世界。這種結構也就使得登錄服不是固定配備給個游戲世界,而是全區(qū)共有的。
我們可以試著從實際需求的角度來考慮一下這個問題。正如我們之前所描述過的那樣,登錄服在大多數(shù)情況下都是比較空閑的,也許我們的一個擁有20個游戲世界的大區(qū)僅僅使用10臺或更少的登錄服即可滿足需求。而當在開新區(qū)的時候,或許要配備40臺登錄服才能應付那如潮水般涌入的玩家登錄請求。所以,登錄服在設計上應該能滿足這種動態(tài)增刪的需求,我們可以在任何時候為大區(qū)增加或減少登錄服的部署。
當然,在這里也不會存在要求添加太多登錄服的情況。還是拿開新區(qū)的情況來說,即使新增加登錄服滿足了玩家登錄的請求,游戲世界服的承載能力依然有限,玩家一樣只能在排隊系統(tǒng)中等待,或者是進入到游戲世界中導致大家都卡。
另外,當我們在增加或移除登錄服的時候不應該需要對游戲世界服有所改動,也不會要求重啟世界服,當然也不應該要求客戶端有什么更新或者修改,一切都是在背后自動完成。
最后,有關數(shù)據(jù)持久化的問題也在這里考慮一下。一般來說,使用現(xiàn)有的商業(yè)數(shù)據(jù)庫系統(tǒng)比自己手工技術先進要明智得多。我們需要持久化的數(shù)據(jù)有玩家的帳號及密碼,玩家創(chuàng)建的角色相關信息,另外還有一些游戲世界全局共有數(shù)據(jù)也需要持久化。
好了,需求已經(jīng)提出來了,現(xiàn)在來考慮如何將其實現(xiàn)。
對于負載均衡來說,已有了成熟的解決方案。一般最常用,也最簡單部署的應該是基于DNS的負載均衡系統(tǒng)了,其通過在DNS中為一個域名配置多個IP地址來實現(xiàn)。最新的DNS服務已實現(xiàn)了根據(jù)服務器系統(tǒng)狀態(tài)來實現(xiàn)的動態(tài)負載均衡,也就是實現(xiàn)了真正意義上的負載均衡,這樣也就有效地解決了當某臺登錄服當機后,DNS服務器不能立即做出反應的問題。當然,如果找不到這樣的解決方案,自己從頭打造一個也并不難。而且,通過DNS來實現(xiàn)的負載均衡已經(jīng)包含了所做的修改對登錄服及客戶端的透明。
而對于數(shù)據(jù)庫的應用,在這種結構下,登錄服及游戲世界服都會需要連接數(shù)據(jù)庫。從數(shù)據(jù)庫服務器的部署上來說,可以將帳號和角色數(shù)據(jù)都放在一個中心數(shù)據(jù)庫中,也可分為兩個不同的庫分別來處理,基到從物理上分到兩臺不同的服務器上去也行。
但是對于不同的游戲世界來說,其角色及游戲內(nèi)數(shù)據(jù)都是互相獨立的,所以一般情況下也就為每個游戲世界單獨配備一臺數(shù)據(jù)庫服務器,以減輕數(shù)據(jù)庫的壓力。所以,整體的服務器結構應該是一個大區(qū)有一臺帳號數(shù)據(jù)庫服務器,所有的登錄服都連接到這里。而每個游戲世界都有自己的游戲數(shù)據(jù)庫服務器,只允許本游戲世界內(nèi)的服務器連接。
最后,我們的服務器結構就像這樣:
大區(qū)服務器
登錄服1 登錄服2 世界服1 世界服2
帳號數(shù)據(jù)庫 DBS DBS
這里既然討論到了大區(qū)及帳號數(shù)據(jù)庫,所以順帶也說一下關于激活大區(qū)的概念。wow中一共有八個大區(qū),我們想要進入某個大區(qū)游戲之前,必須到官網(wǎng)上激活這個區(qū),這是為什么呢?
一般來說,在各個大區(qū)帳號數(shù)據(jù)庫之上還有一個總的帳號數(shù)據(jù)庫,我們可以稱它為中心數(shù)據(jù)庫。比如我們在官網(wǎng)上注冊了一個帳號,這時帳號數(shù)據(jù)是只保存在中心數(shù)據(jù)庫上的。而當我們要到一區(qū)去創(chuàng)建角色開始游戲的時候,在一區(qū)的帳號數(shù)據(jù)庫中并沒有我們的帳號數(shù)據(jù),所以,我們必須先到官網(wǎng)上做一次激活操作。這個激活的過程也就是從中心庫上把我們的帳號數(shù)據(jù)拷貝到所要到的大區(qū)帳號數(shù)據(jù)庫中。
服務器結構探討--簡單的世界服實現(xiàn)
討論了這么久我們一直都還沒有進入游戲世界服務器內(nèi)部,現(xiàn)在就讓我們來窺探一下里面的結構吧。
對于現(xiàn)在大多數(shù)MMORPG來說,游戲服務器要處理的基本邏輯有移動、聊天、技能、物品、任務和生物等,另外還有地圖管理與消息廣播來對其他高級功能做支撐。如縱隊、好友、公會、戰(zhàn)場和副本等,這些都是通過基本邏輯功能組合或擴展而成。
在所有這些基礎邏輯中,與我們要討論的服務器結構關系最緊密的當屬地圖管理方式。決定了地圖的管理方式也就決定了我們的服務器結構,我們?nèi)匀幌葟淖詈唵蔚膶崿F(xiàn)方式開始說起。
回想一下我們曾戰(zhàn)斗過無數(shù)個夜晚的暗黑破壞神,整個暗黑的世界被分為了若干個獨立的小地圖,當我們在地圖間穿越時,一般都要經(jīng)過一個叫做傳送門的裝置。世界中有些地圖間雖然在地理上是直接相連的,但我們發(fā)現(xiàn)其游戲內(nèi)部的邏輯卻是完全隔離的。可以這樣認為,一塊地圖就是一個獨立的數(shù)據(jù)處理單元。
既然如此,我們就把每塊地圖都當作是一臺獨立的服務器,他提供了在這塊地圖上游戲時的所有邏輯功能,至于內(nèi)部結構如何劃分我們暫不理會,先把他當作一個黑盒子吧。
當兩個人合作做一件事時,我們可以以對等的關系相互協(xié)商著來做,而且一般也都不會有什么問題。當人數(shù)增加到三個時,我們對等的合作關系可能會有些復雜,因為我們每個人都同時要與另兩個人合作協(xié)商。正如俗語所說的那樣,三個和尚可能會碰到?jīng)]水喝的情況。當人數(shù)繼續(xù)增加,情況就變得不那么簡單了,我們得需要一個管理者來對我們的工作進行分工、協(xié)調(diào)。游戲的地圖服務器之間也是這么回事。
一般來說,我們的游戲世界不可能會只有一塊或者兩塊小地圖,那順理成章的,也就需要一個地圖管理者。先稱它為游戲世界的中心服務器吧,畢竟是管理者嘛,大家都以它為中心。
中心服務器主要維護一張地圖ID到地圖服務器地址的映射表。當我們要進入某張地圖時,會從中心服上取得該地圖的IP和port告訴客戶端,客戶端主動去連接,這樣進入他想要去的游戲地圖。在整個游戲過程中,客戶端始終只會與一臺地圖服務器保持連接,當要切換地圖的時候,在獲取到新地圖的地址后,會先與當前地圖斷開連接,再進入新的地圖,這樣保證玩家數(shù)據(jù)在服務器上只有一份。
我們來看看結構圖是怎樣的:
中心服務器
登錄服 地圖1 地圖2 地圖n
客戶端
很簡單,不是嗎。但是簡單并不表示功能上會有什么損失,簡單也更不能表示游戲不能賺錢。早期不少游戲也確實采用的就是這種簡單結構。
服務器結構探討--繼續(xù)世界服
都已經(jīng)看出來了,這種每切換一次地圖就要重新連接服務器的方式實在是不夠優(yōu)雅,而且在實際游戲運營中也發(fā)現(xiàn),地圖切換導致的卡號,復制裝備等問題非常多,這里完全就是一個事故多發(fā)地段,如何避免這種頻繁的連接操作呢?
最直接的方法就是把那個圖倒轉過來就行了??蛻舳酥恍枰B接到中心服上,所有到地圖服務器的數(shù)據(jù)都由中心服來轉發(fā)。很完美的解決方案,不是嗎?
這種結構在實際的部署中也遇到了一些挑戰(zhàn)。對于一般的MMORPG服務器來說,單臺服務器的承載量平均在2000左右,如果你的服務器很不幸地只能帶 1000人,沒關系,不少游戲都是如此;如果你的服務器上跑了3000多玩家依然比較流暢,那你可以自豪地告訴你的策劃,多設計些大量消耗服務器資源的玩法吧,比如大型國戰(zhàn)、公會戰(zhàn)爭等。
2000人,似乎我們的策劃朋友們不大愿意接受這個數(shù)字。我們將地圖服務器分開來原來也是想將負載分開,以多帶些客戶端,現(xiàn)在要所有的連接都從中心服上轉發(fā),那連接數(shù)又遇到單臺服務器的可最大承載量的瓶頸了。這里有必要再解釋下這個數(shù)字。我知道,有人一定會說,才帶2000人,那是你水平不行,我隨便寫個TCP服務器都可帶個五六千連接。問題恰恰在于你是隨便寫的,而MMORPG的服務器是復雜設計的。如果一個演示socket API用的echo服務器就能滿足MMOG服務器的需求,那寫服務器該是件多么愜意的事啊。
但我們所遇到的事實是,服務器收到一個移動包后,要向周圍所有人廣播,而不是echo服務器那樣簡單的回應;服務器在收到一個連接斷開通知時要向很多人通知玩家退出事件,并將該玩家的資料寫入數(shù)據(jù)庫,而不是echo服務器那樣什么都不需要做;服務器在收到一個物品使用請求包后要做一系列的邏輯判斷以檢查玩家有沒有作弊;服務器上還啟動著很多定時器用來更新游戲世界的各種狀態(tài)......其實這么一比較,我們也看出資源消耗的所在了:服務器上大量的復雜的邏輯處理。再回過頭來看看我們想要實現(xiàn)的結構,我們既想要有一個唯一的入口,使得客戶端不用頻繁改變連接,又希望這個唯一入口的負載不會太大,以致于接受不了多少連接。
仔細看一看這個需求,我們想要的僅僅只是一臺管理連接的服務器,并不打算讓他承擔太多的游戲邏輯。既然如此,那五六千個連接也還有滿足我們的要求。至少在現(xiàn)在來說,一個游戲世界內(nèi),也就是一組服務器內(nèi)同時有五六千個在線的玩家還是件讓人很興奮的事。事實上,在大多數(shù)游戲的大部分時間里,這個數(shù)字也是很讓人眼紅的。
什么?你說夢幻、魔獸還有史先生的那個什么征途遠不止這么點人了!噢,我說的是大多數(shù),是大多數(shù),不包括那些明星。你知道大陸現(xiàn)在有多少游戲在運營嗎?或許你又該說,我們不該在一開始就把自己的目標定的太低!好吧,我們還是先不談這個。
繼續(xù)我們的結構討論。一般來說,我們把這臺負責連接管理的服務器稱為網(wǎng)關服務器,因為內(nèi)部的數(shù)據(jù)都要通過這個網(wǎng)關才能出去,不過從這臺服務器提供的功能來看,稱其為反向代理服務器可能更合適。我們也不在這個名字上糾纏了,就按大家通用的叫法,還是稱他為網(wǎng)關服務器吧。
網(wǎng)關之后的結構我們依然可以采用之前描述的方案,只是,似乎并沒有必要為每一個地圖都開一個獨立的監(jiān)聽端口了。我們可以試著對地圖進行一些劃分,由一個 Master Server來管理一些更小的Zone Server,玩家通過網(wǎng)關連接到Master Server上,而實際與地圖有關的邏輯是分派給更小的Zone Server去處理。
最后的結構看起來大概是這樣的:
Zone Server Zone Server
Master Server Master Server
Gateway Server Center Server
Client
服務器結構探討--最終的結構
如果我們就此打住,可能馬上就會有人要嗤之以鼻了,就這點古董級的技術也敢出來現(xiàn)。好吧,我們還是把之前留下的問題拿出來解決掉吧。
一般來說,當某一部分能力達不到我們的要求時,最簡單的解決方法就是在此多投入一點資源。既然想要更多的連接數(shù),那就再加一臺網(wǎng)關服務器吧。新增加了網(wǎng)關服后需要在大區(qū)服上做相應的支持,或者再簡單點,有一臺主要的網(wǎng)關服,當其負載較高時,主動將新到達的連接重定向到其他網(wǎng)關服上。
而對于游戲服來說,有一臺還是多臺網(wǎng)關服是沒有什么區(qū)別的。每個代表客戶端玩家的對象內(nèi)部都保留一個代表其連接的對象,消息廣播時要求每個玩家對象使用自己的連接對象發(fā)送數(shù)據(jù)即可,至于連接是在什么地方,那是完全透明的。當然,這只是一種簡單的實現(xiàn),也是普通使用的一種方案,如果后期想對消息廣播做一些優(yōu)化的話,那可能才需要多考慮一下。
既然說到了優(yōu)化,我們也稍稍考慮一下現(xiàn)在結構下可能采用的優(yōu)化方案。
首先是當前的Zone Server要做的事情太多了,以至于他都處理不了多少連接。這其中最消耗系統(tǒng)資源的當屬生物的AI處理了,尤其是那些復雜的尋路算法,所以我們可以考慮把這部分AI邏輯獨立出來,由一臺單獨的AI服務器來承擔。
然后,我們可以試著把一些與地圖數(shù)據(jù)無關的公共邏輯放到Master Server上去實現(xiàn),這樣Zone Server上只保留了與地圖數(shù)據(jù)緊密相關的邏輯,如生物管理,玩家移動和狀態(tài)更新等。
還有聊天處理邏輯,這部分與游戲邏輯沒有任何關聯(lián),我們也完全可以將其獨立出來,放到一臺單獨的聊天服務器上去實現(xiàn)。
最后是數(shù)據(jù)庫了,為了減輕數(shù)據(jù)庫的壓力,提高數(shù)據(jù)請求的響應速度,我們可以在數(shù)據(jù)庫之前建立一個數(shù)據(jù)庫緩存服務器,將一些常用數(shù)據(jù)緩存在此,服務器與數(shù)據(jù)庫的通信都要通過這臺服務器進行代理。緩存的數(shù)據(jù)會定時的寫入到后臺數(shù)據(jù)庫中。
好了,做完這些優(yōu)化我們的服務器結構大體也就定的差不多了,暫且也不再繼續(xù)深入,更細化的內(nèi)容等到各個部分實現(xiàn)的時候再探討。
好比我們?nèi)タ匆粓鐾頃?,舞臺上演員們按著預定的節(jié)目單有序地上演著,但這就是整場晚會的全部嗎?顯然不止,在幕后還有太多太多的人在忙碌著,甚至在晚會前和晚會后都有。我們的游戲服務器也如此。在之前描述的部分就如同舞臺上的演員,是我們能直接看到的,幕后的工作人員我們也來認識一下。
現(xiàn)實中有警察來維護秩序,游戲中也如此,這就是我們常說的GM。GM可以采用跟普通玩家一樣的拉入方式來進入游戲,當然權限會比普通玩家高一些,也可以提供一臺GM服務器專門用來處理GM命令,這樣可以有更高的安全性,GM服一般接在中心服務器上。
在以時間收費的游戲中,我們還需要一臺計費的服務器,這臺服務器一般接在網(wǎng)關服務器上,注冊玩家登錄和退出事件以記錄玩家的游戲時間。
任何為用戶提供服務的地方都會有日志記錄,游戲服務器當然也不例外。從記錄玩家登錄的時間,地址,機器信息到游戲過程中的每一項操作都可以作為日志記錄下來,以備查錯及數(shù)據(jù)挖掘用。至于搜集玩家機器資料所涉及到的法律問題不是我們該考慮的。
差不多就這么多了吧,接下來我們會按照這個大致的結構來詳細討論各部分的實現(xiàn)。
服務器結構探討--一點雜談
再強調(diào)一下,服務器結構本無所謂好壞,只有是否適合自己。我們在前面探討了一些在現(xiàn)在的游戲中見到過的結構,并盡我所知地分析了各自存在的一些問題和可以做的一些改進,希望其中沒有謬誤,如果能給大家也帶來些啟發(fā)那自然更好。
突然發(fā)現(xiàn)自己一旦羅嗦起來還真是沒完沒了。接下來先說說我在開發(fā)中遇到過的一些困惑和一基礎問題探討吧,這些問題可能有人與我一樣,也曾遇到過,或者正在被困擾中,而所要探討的這些基礎問題向來也是爭論比較多的,我們也不評價其中的好與壞,只做簡單的描述。
首先是服務器操作系統(tǒng),linux與windows之爭隨處可見,其實在大多數(shù)情況下這不是我們所能決定的,似乎各大公司也基本都有了自己的傳統(tǒng),如網(wǎng)易的freebsd,騰訊的linux等。如果真有權利去選擇的話,選自己最熟悉的吧。
決定了OS也就基本上確定了網(wǎng)絡IO模型,windows上的IOCP和linux下的epool,或者直接使用現(xiàn)有的網(wǎng)絡框架,如ACE和asio等,其他還有些商業(yè)的網(wǎng)絡庫在國內(nèi)的使用好像沒有見到,不符合中國國情嘛。)
然后是網(wǎng)絡協(xié)議的選擇,以前的選擇大多傾向于UDP,為了可靠傳輸一般自己都會在上面實現(xiàn)一層封裝,而現(xiàn)在更普通的是直接采用本身就很可靠的TCP,或者TCP與UDP的混用。早期選擇UDP的主要原因還是帶寬限制,現(xiàn)在寬帶普通的情況下TCP比UDP多出來的一點點開銷與開發(fā)的便利性相比已經(jīng)不算什么了。當然,如果已有了成熟的可靠UDP庫,那也可以繼續(xù)使用著。
還有消息包格式的定義,這個曾在云風的blog上展開過激烈的爭論。消息包格式定義包括三段,包長、消息碼和包體,爭論的焦點在于應該是消息碼在前還是包長在前,我們也把這個當作是信仰問題吧,有興趣的去云風的blog上看看,論論。另外早期有些游戲的包格式定義是以特殊字符作分隔的,這樣一個好處是其中某個包出現(xiàn)錯誤后我們的游戲還能繼續(xù)。但實際上,我覺得這是完全沒有必要的,真要出現(xiàn)這樣的錯誤,直接斷開這個客戶端的連接可能更安全。而且,以特殊字符做分隔的消息包定義還加大了一點點網(wǎng)絡數(shù)據(jù)量。
最后是一個純技術問題,有關socket連接數(shù)的最大限制。開始學習網(wǎng)絡編程的時候我犯過這樣的錯誤,以為port的定義為unsigned short,所以想當然的認為服務器的最大連接數(shù)為65535,這會是一個硬性的限制。而實際上,一個socket描述符在windows上的定義是 unsigned int,因此要有限制那也是四十多億,放心好了。
在服務器上port是監(jiān)聽用的,想象這樣一種情況,web server在80端口上監(jiān)聽,當一個連接到來時,系統(tǒng)會為這個連接分配一個socket句柄,同時與其在80端口上進行通訊;當另一個連接到來時,服務器仍然在80端口與之通信,只是分配的socket句柄不一樣。這個socket句柄才是描述每個連接的唯一標識。按windows網(wǎng)絡編程第二版上的說法,這個上限值配置影響。
好了,廢話說完了,下一篇,我們開始進入登錄服的設計吧。
第五篇:網(wǎng)站建設服務器如何選擇
004km.cn 網(wǎng)站建設服務器如何選擇
網(wǎng)站服務器就是我們平時在網(wǎng)絡上的數(shù)據(jù)存放中的存放地,當然他最得要的用途就是在互聯(lián)網(wǎng)是的發(fā)布作用。它是互聯(lián)網(wǎng)的基礎的硬件設施?,F(xiàn)在我們常見的一般是叫塔式的服務器,還有一種是叫機架式的服務器和刀片服務器。
1、采購網(wǎng)站服務器事項
作為采購的人員我們一定要先清楚這個網(wǎng)站需要多少的流量,還有就是每天約有多少的訪問量要根據(jù)這些數(shù)據(jù)去選擇網(wǎng)站服務器的,所以說在選購時這些數(shù)據(jù)你要特別的清楚,當然還有保留一些擴展性,因為我們要時刻明白經(jīng)常有同一在線的情況。
2、選擇網(wǎng)站服務器要避免的事項
在選這個服務器時,我們首先要看信息的情況,看看是不是信息有殘缺,會不會導致信號接愛不全或是不太穩(wěn)定,這樣就會讓你的信息不全。還有就是堵塞的情況,有沒有寬帶的限制或者是看看有沒有響應的最大限制。再者就是要看看機房的環(huán)境怎么樣,是不是可以通風有沒有防火這些都是比較重要的。
004km.cn
第一、硬件配置
從服務器的檔次程度來進行劃分,從高到底可以分成企業(yè)級的網(wǎng)站服務器、部門級的網(wǎng)站服務器以及工作級別的網(wǎng)站服務器還有入門級的網(wǎng)站服務器,但是如果從網(wǎng)站服務器的應用層次來進行劃分,又可以分成低價穩(wěn)定型的網(wǎng)站服務器、快速處理型的網(wǎng)站服務器以及海量存儲型的網(wǎng)站服務器這三種類型。
像快速處理型的網(wǎng)站服務器就比較適合那些電子商務公司、門戶類型的網(wǎng)站、以及大型的社區(qū)論壇還有網(wǎng)絡游戲等等的這些網(wǎng)站進行使用,而像大型的新聞網(wǎng)站或者是視頻電影網(wǎng)站這一類的就要求有很大的數(shù)據(jù)儲存量,就比較適合海量存儲型的網(wǎng)站服務器,至于像普通的個人網(wǎng)站或者是企業(yè)網(wǎng)站就適合使用低價穩(wěn)定型的網(wǎng)站服務器。這都是根據(jù)他們各自的特點以及網(wǎng)站的屬性還有自己的預算等等的一些方面來進行選擇的。
在選擇網(wǎng)站服務器的時候還要從網(wǎng)站的硬件配置方面去進行考慮,像是操作系統(tǒng),數(shù)據(jù)庫,應用軟件,還有網(wǎng)站的類型,服務器的內(nèi)存大小,中央處理器等等這些,都是一個網(wǎng)站展示挑選網(wǎng)站服務器的關鍵性的指標。
第二、性能穩(wěn)定性
004km.cn
相信每個人在日常的網(wǎng)站維護過程中,都不想要自己租賃的或者是購買的網(wǎng)站服務器出現(xiàn)狀況,因為網(wǎng)站服務器他本身就是一種需要進行高負荷運作以及復雜運算的工具,如果網(wǎng)站服務器出現(xiàn)了問題,維修起來是非常麻煩的,一點小小的問題就可以引發(fā)一系列的麻煩事情,網(wǎng)站服務器都是以預防作為主體工作的,所以網(wǎng)站服務器的穩(wěn)定性非常重要,大家在選擇網(wǎng)站服務器的時候一定要考慮清楚上面的頁面腳本需不需要進行修改,應用服務器需不需要進行更新等等的一些事情。
大部分的網(wǎng)站服務器他們其實都是為一種操作系統(tǒng)進行處理以及優(yōu)化的,所以你們在挑選網(wǎng)站服務器的時候還必須看看他們的操作系統(tǒng),因為大部分的品牌網(wǎng)站服務器都有自己的服務系統(tǒng)軟件,這都是不一樣的。