(轉)一個手機游戲服務器的架構


摘要:每個公司的游戲類型不同,服務器架構也就不同。新手,可以根據別人的架構獲學習和認識一般的游戲服務器都有哪些功能和設計,入門者可以根據別人架構獲得一些靈感和啟發,補充自己架構的不足。總之,這是一個相互學習的過程。下面是一個手游的服務器架構,供大家玩味一下
  

         說起來游戲服務器的開發,是一個非常宏大的命題。到如今誰也說不清楚服務器到底是一個什么。無非就是游戲邏輯計算,數據存儲,高並發之類的話題。服務器架構更是眾說紛紛,其根源在於,沒有放之四海而皆准的架構。每個公司的游戲類型不同,服務器架構也就不同。新手,可以根據別人的架構獲學習和認識一般的游戲服務器都有哪些功能和設計,入門者可以根據別人架構獲得一些靈感和啟發,補充自己架構的不足。總之,這是一個相互學習的過程。下面是一個手游的服務器架構,供大家玩味一下。先上個圖吧:

服務器架構的幾個模塊:

         1,登陸服務器

         2,邏輯服務器

         3,用戶中心服務器

         4,充值服務器

         5,數據庫服務器

         6,日志服務器。

這些模塊都是分開的,可以分開部署到不同的物理服務器上。

1 登陸服務器

         負責處理玩家登陸的請求。一個登陸服務器對應多個游戲邏輯分區。當玩家登陸的時候,登陸服務器向用戶中心服務器發送登陸信息。請求對登陸信息的驗證。通過驗證之后,返回分區地址,之后,客戶端與登陸服務器斷開,連接到游戲邏輯服務器。

2 邏輯服務器

         對玩家的操作進行邏輯處理。邏輯服務器是整個游戲的心臟。它的工作效率直接影響玩家在游戲中的體驗,所以對它的要求就是速度,速度,快速返回處理結果。為了達到滿足要求的速度,邏輯服務器的大部分操作必須在內存中操作,避免IO操作,IO操作可以放到另外的線程中進行。說是大部分,是因為玩家在第一次登陸的時候可能會從數據庫加載所要用到的數據。在圖中,大家看到了緩存,緩存的作用就是把數據放在內存中。當玩家退出時,它的數據也會在緩存中保存一段時間,在一定時間內,玩家再次登陸,將不會再重新從數據庫加載數據。在邏輯服務器中對數據庫的操作可以先放入一個隊列,一個線程負責從這個隊列取數據,並發送到數據庫服務器,這樣即減輕了邏輯服務器的壓力,也保證了數據處理的效率。邏輯服務器的日志也不在邏輯服務器入庫,同樣的發送到日志服務器處理。還有一種方法是以一種特定格式的方式,記錄到本地文件中,再啟一個進程,讀取這個文件,然后入庫。

3 用戶中心服務器

         現在很多游戲都對用戶進行了集中管理。這方便了對用戶提供更好的服務,比如充值,活動,禮包領取,新游戲導入用戶等。有的游戲公司可能會用用戶中心的數據發展游戲運營平台。這部分與游戲邏輯服務器分開,也減少了游戲邏輯服務器的壓力。

4 充值服務器

         充值是游戲收入的唯一方式了,所以這個功能必須流暢,毫無壓力。如果由於網絡或服務器性能原因,導致玩家充值不了,會直接影響收益的。所以充值服務器最好部署在一台單獨的物理機上面。也可以多個分區使用一個充值服務器,這要視游戲人數而定。

5 數據庫服務器

         負責對數據入庫及更新的操作。把這部分操作從邏輯服務器分離出來,就是為了減輕邏輯服務器的壓力,減少邏輯服務器資源的占用。而且,如果邏輯服務器突然宕機的話,也能盡量保證數據丟失的少。為了保證對數據的更新是順序性的,這里把數據入庫的操作使用隊列單線程化。

6 日志服務器

         處理玩家日志的入庫。日志入庫方便游戲運營管理游戲,統計玩家信息。當玩家人數比較多的時候,日志也會占用很多資源。所以把日志從邏輯服務器也分開了。因為日志只是插入操作,所以可以開幾個線程進行並發插入到數據庫。線程數要根據你數據庫的連接池的最大連接數進行設置。要不然會導致連接資源被占完。導致數據插入不了數據庫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM