一、 mmorpg特點
下面的所講述的三個特點,給我們帶來了效能問題,帶來了挑戰。我們最終形成的征途伺服器分布式技術構架,是解決他們帶來的問題,而不是繞過他們。
1. 實時的互動
電子遊戲的互動的實時性不言而喻,mmorpg則帶來了更複雜的互動。無論是玩家與npc還是玩家與玩家之間,當乙個玩家發出指令,周圍的玩家都應立即看到他做出的改變。玩家的忍受度基本都在200ms內。
2. 區域群集效應
一般來講mmorg都會有乙個或者多個讓玩家聚集的功能區,從軟體開發角度講這是業務的需求。
對伺服器帶來的壓力我們做乙個簡單的測算:
每人做出1個事件的平均時間是t,並將結果發給可見範圍內的玩家,在單位時間t內,伺服器的複雜度是o(n+n2
),n是可見範圍內的玩家數量。換乙個不嚴格的說法,就是當你有n個人群聚在一起,你的伺服器將會少上n2
-n的不群聚的人。
所以區域群集效應對伺服器效能帶來的降低是巨大的。
二、相對應帶來的關鍵問題
1. 更多要處理的資料,更多要同步給使用者的資料複雜度是o(n )。
2. 當使用者聚集在一起,效能的下降是迅速的複雜度是o(n2
)。這裡的n不是總人數,而是聚集的人數。
三、要讓多人在一起互動,伺服器需要解決上述2大問題
即遊戲資料的處理及同步
單台伺服器處理能力有限,所以分布式伺服器技術是很自然的解決方案。圍繞上述兩個核心問題,我們提出一些分布式伺服器技術構架的具體解決方案。這些方案都是實際應用於征途伺服器中。
a) 針對遊戲資料處理
1. 將遊戲世界按區域拆分到多個遊戲伺服器中,這些遊戲伺服器共同組建了乙個整體的遊戲世界,這些在一起的玩家可以很方便的互動。
2. 當然資料同步也被遊戲伺服器分散承擔。
3. 帶來的問題
3.1. 使用者基本狀態資訊,比如是否登入,目前在那個伺服器。
3.2. 解決辦法是架設乙個session 伺服器。
b) 針對遊戲資料同步
1. 為什麼資料同步已經有負載了,還要針對資料同步進行負載均衡。
1.1. 我們要容納更多的玩家。
1.2. 隨著人數增加,人數高峰的到來,區域群集效應對效能影響突出。在實際情況中,總是某乙個或幾個區域聚集的人特別多。因此帶來的效能問題,無法通過劃分更細小的區域,增加遊戲伺服器來解決。
2. 另外從實際角度,我們也不能一味通過將遊戲世界拆分成更多遊戲伺服器來解決。
2.1. 那會到導致伺服器的浪費。
2.2. 從使用者體驗上講也不好,畢竟經常從乙個伺服器跳轉到另乙個伺服器讓玩家感到麻煩。
2.3. 客戶端經常重新連線也在一定程度上帶來了不穩定因素和效能下降。
3. 所以增加了gateway伺服器,放置在遊戲伺服器的前端,將同步資料的工作交給他。
4. 大致工作原理及效果
4.1. 玩家平均的鏈結到gateway伺服器。
4.2. 遊戲伺服器將使用者的位置同步到gateway伺服器。
4.3. 理論上每台gateway的同步負載為原來遊戲伺服器負載的s2分之一(s是gateway伺服器的數量)。
c) 當形成如此的構架後,諸多功能可以合理的分配到各個伺服器
1. 比如gateway伺服器增加
1.1. 資料報的整合,加密,壓縮。
1.2. 資料報合法性,反外掛程式的檢測。
1.3. 其他與遊戲相關性不大,但是很必要的功能。
2. 比如session伺服器增加
2.1. 工會功能。
2.2. 聊天**。
2.3. 好友。
2.4. 其他非遊戲區域性功能。
四、此種伺服器分布式帶來的問題和侷限
諸多問題和侷限,導致運營成本和開發成本的增加,但是我們可以通過一些適當的手段規避或者減小這方面的風險。
1. 不太適合伺服器人數少的區,靈活性不夠,會造成浪費。虛擬化能解決此問題。
2. 伺服器之間的資料同步增加,內耗較多。程式開發要做大量的優化工作。
3. 遊戲伺服器的複雜度增加,開發難度增大。做好封裝,開發管理及對團隊的培訓。
五、遊戲伺服器分布式技術的發展趨勢
1. 給玩家帶來更好的使用者體驗,比如無縫體驗,更大的世界。
2. 遊戲業務的分布,將業務剝離做負載均衡,比如,聊天,npc。
3. 雲計算。
六、只有分布式是不夠的
1. 良好的均衡技術構架是實現大容量遊戲的前提,在實際開發中的設計和優化同樣非常重要。
2. 遊戲設計的優化,將遊戲業務適當分散在不同的伺服器。
3. 迴圈演算法的優化,一切效能問題都在迴圈裡。
4. 資料流量的優化,不管是伺服器之間的流量,還是伺服器和客戶端的流量。
分布式快取伺服器設計原理
1.資料是如何被分布到多個伺服器上的?一致性雜湊演算法 假設有n臺伺服器,計算這n臺伺服器的ip位址的雜湊值,把這些雜湊值從小到大按順時針排列組成乙個 伺服器節點環 客戶端需要儲存一系列的 鍵值對 到這些伺服器上去,計算這些 鍵 的雜湊值,看看這些 鍵 的雜湊值落在 伺服器環 的哪些區間,如下圖所示...
分布式遊戲伺服器設計
登入伺服器 中心伺服器 遊戲伺服器 儲存伺服器 依賴系統 流量限制 橫向擴充套件 訊息內容加密 訊息序列 sequence 驗證 訊息完整性 crc 驗證 訊息時間戳驗證 黑名單 版本驗證 心跳 強制下線 登入控制 排隊系統 登入驗證 響應訊息 廣播訊息 對於特定的名單的訊息,提供名單群體推送功能 ...
伺服器分布式鎖
多程序處理資料的時候難免會出現資料不一致問題,例如有乙個程序正在處理資料,還沒有來得及寫入,另乙個程序已經在讀,導致拿到的資料不是最新的。應該要保證第乙個程序更新完後再讀取才不會出錯,要解決這個問題就要進行類似乙個原子操作了,給執行的 加乙個分布式鎖。下面用ssdb實現一把分布式鎖 bool ssd...