基於滴滴雲的棋牌遊戲服務端架構設計
現在小團隊開發的棋牌遊戲有很多,棋牌行業的相互攻擊是非常普遍的現象,同行之間往往會採取 DDOS、CC 等攻擊的手段來打擊對手,這是目前棋牌運營商們面臨的比較嚴峻的一個問題,那麼在設計棋牌遊戲服務端架構時就需要考慮高可用和抗攻擊這兩個特性,本文詳細介紹瞭如何基於 滴滴雲 現有的產品組合來設計一套高可用的抗攻擊架構。
需要解決的技術點
1. 資料共享
由於棋牌類遊戲的資料少,計算量不大,所以完全可以不使用記憶體快取,而直接使用 redis 共享記憶體。使用者的所有資料都快取在 Redis 中,更新也同步到 Redis 中,這樣一個使用者不管登陸到哪一臺業務伺服器,都能獲得自己最新的資料。
2. 負載均衡
因為棋牌類遊戲不分割槽不分服,在設計伺服器的時候,是按世界服的思想去設計,即伺服器是一個 n 多臺物理機的叢集。當使用者登陸伺服器建立房間時,可能根據負載均衡演算法,它可以在任何一臺伺服器上面。
3. 抗攻擊
針對可能發生的 以及 ,可以考慮購買DDOS高防以及Web應用防火牆。
4. 長短連線
考慮到伺服器的負載情況以及使用者的狀態變化,在使用者未進入遊戲之前可以採用短連線,進入遊戲狀態之後採用長連線狀態。
系統架構
1. 登入伺服器
登入伺服器一般需要實現如下的功能:
登入,一般都是需要接第三方登陸,登陸這一塊是 HTTP 操作,可以統一提供一個Web服務,用來做登陸驗證。因為在登陸時,呼叫第三方的 HTTP 服務,這個過程可能很慢,如果放在邏輯伺服器的話,可能會卡業務邏輯任務。因為不同的玩家業務請求可能在同一個執行緒中,如果有任務卡了,那麼這個任務以後新來的請求都會卡住,導致訊息延遲。
獲取遊戲公告,也放在 Web 服務中。公告一般是遊戲登陸的時候向伺服器獲取一次。把它放在 Web 伺服器中,與業務邏輯分離的好處是,當業務邏輯伺服器維護或更新的時候,不影響使用者的登陸,和獲取公告,這樣使用者體驗會好一些。
建立使用者唯一的 ID,因為棋牌類遊戲伺服器是世界服,無分割槽,所以使用者的 ID 必須是全域性唯一的。可以利用 Redis 的 incr 方法原子的遞增,如果不想被別人根據 userid 的遞增推算出有多少註冊使用者,遞增的梯度可以隨機,比如每次遞增的值從 1 到 1024 中的隨機一個。
2. 大廳伺服器
大廳伺服器實現如下功能:
建立房間,當房間主建立房間時,房間可以建立在下游的任意一臺業務伺服器上,這裡面可以做一些負載均衡策略,給使用者返回房間具體落得伺服器資訊,使得玩家可以登入房間。
查詢加入房間,根據房間 ID 查詢房間,查詢到房間後,獲取房間所在的 IP 地址或伺服器 ID,把這個房間所在的 IP 和埠返回給客戶端,讓客戶端重新與房間所在的伺服器建立連線,使用登陸時的 token 驗證使用者。
3. 業務伺服器
業務伺服器實現如下功能:
玩家同屏,玩家同屏是棋牌遊戲中的一個重點,對於做過那些大型的 ARPG,或 MMO 遊戲的程式設計師來說,這並不是什麼難事。因為同屏就是伺服器對客戶端的訊息進行轉發。一個房間四個人,一個人出的牌或操作能被其他三個人同時看到。常用的方式有客戶端主動拉取和服務端主動推送方式。
訊息保序,建立房間成功之後,接下來的操作都要保證它的順序性,所以房間需要有一個它自己的訊息佇列。我們可以把每個房間到達伺服器的訊息封裝為一個任務,把這個任務放到訊息佇列中,然後有一個任務執行者去按順序執行這些任務。
玩家狀態跟蹤,玩家和服務端之間需要有一個連線狀態 Keep Alive 的探測,尤其是在移動客戶端的遊戲版本上,網路連線可能存在不穩定。
其他
很多伺服器的長期使用者應該都知道,我們租用伺服器,不僅要考慮伺服器的配置、機房的防禦、機房的頻寬、機房的環境,還要考慮機房保證的頻寬、機房的後期服務等等,這些都是非常重要的。特別是後期的服務,因為伺服器是需要 24 小時運作的,一旦出現問題不能及時解決的話,對使用者的利益都是有無法估計的損害。
滴滴雲 可以提供上述架構所需要的所有產品,而且價格相對比較低,售後支援及時有保障,是一個可以信賴的選擇。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2221623/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於雲服務的個人網站架構設計網站架構
- Go遊戲服務端框架從零搭建(一)— 架構設計Go遊戲服務端框架架構
- 基於SpringCloud的微服務架構設計SpringGCCloud微服務架構
- 遊戲架構 遊戲架構設計(8)遊戲架構
- 基於微服務和Docker的PaaS雲平臺架構設計微服務Docker架構
- 初識雲端計算:歷史、服務、架構架構
- 基於MVVM架構的遊戲App如何整合華為遊戲服務(一)——登入認證MVVM架構遊戲APP
- vivo 服務端監控架構設計與實踐服務端架構
- 架構設計之“服務限流”架構
- 看懂架構設計中的服務隔離架構
- 【程式設計師的遊戲開發之路】 遊戲架構程式設計師遊戲開發架構
- 淺談基於 Laravel 開發的 MeEdu 的微服務架構設計Laravel微服務架構
- 微服務架構 | 4.2 基於 Feign 與 OpenFeign 的服務介面呼叫微服務架構
- 微服務架構 | 5.2 基於 Sentinel 的服務限流及熔斷微服務架構
- SaaS(軟體即服務)架構設計架構
- 雲端計算架構架構
- 基於 RocketMQ 的 MQTT 服務架構在小米的實踐MQQT架構
- mPaaS 服務端核心元件:訊息推送 MPS 架構及流程設計服務端元件架構
- Spring Cloud雲服務架構 - 雲架構程式碼結構構建SpringCloud架構
- Spring Cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- 得物多活架構設計之路由服務設計架構路由
- 架構設計思想-微服務架構設計模式架構微服務設計模式
- Java開發架構篇:領域驅動設計架構基於SpringCloud搭建微服務Java架構SpringGCCloud微服務
- 基於滴滴雲搭建 Lustre
- 架構設計 | 基於Seata中介軟體,微服務模式下事務管理架構微服務模式
- 基於原型的遊戲角色設計方法原型遊戲
- 銀行基於雲原生架構下的 DevOps 建設架構dev
- SaaS架構:應用服務、應用結構設計架構
- 《圖解雲端計算架構:基礎設施和API》中的網址圖解架構API
- 基於Maven的SSM總體架構設計(一)MavenSSM架構
- 整合spring cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- 幾十萬人同時線上的直播間聊天,如何設計服務端架構?服務端架構
- 「服務端」node服務的監控預警系統架構服務端架構
- 微服務架構,客戶端如何catch服務端的異常?微服務架構客戶端服務端
- 基於 xorm 的服務端框架 XGoServerORM服務端框架GoServer
- 系統架構設計筆記(105)—— 雲端計算架構筆記
- 架構設計(五):有狀態服務和無狀態服務架構
- [雲原生微服務架構](十)微服務架構的基礎知識微服務架構