2013-08-05 26 views
2

我提前道歉對此的解釋是多久,我不知道如何使它更加簡潔,因爲我想幾乎所有的這是相關的。抱歉!如何管理水平縮放遊戲服務器中的元信息?

我設計在Python與扭曲的遊戲服務器(可能是不相關的,因爲這是一個結構問題)。

總體思路是玩家連接並放置在大堂。然後他們可以排隊進行比賽(例如,死亡競賽或團隊死亡競賽),並且當發現匹配時,他們被放入該遊戲中。遊戲結束後,他們被放回大廳。

因爲我所知道的分佈式系統多麼複雜,我試圖儘可能簡化它。我想出的想法是將關於玩家的所有信息抽象爲對象。所有的遊戲邏輯都是在GameHandler中實現的。當玩家連接時,他們被分配到大廳(GameHandler)實例。當他們加入一場比賽時,他們會被重新分配給一個死亡競賽(GameHandler)實例(這些實例被保存在服務器:gamehandler的地圖中)。

此時,當玩家被添加到比賽中時,他們實際連接的服務器充當反向代理(我沒有寫客戶端,也不能修改,不能修改,任何連接重新協商)並將關於玩家的信息發送給匹配服務器。然後,使用實例映射,來自該播放器的所有流量都不會被查看到它們所在的遊戲實例,反之亦然使用ID系統。我不認爲這是一個問題,因爲服務器應該都能夠在千兆局域網上轉發數據。

當比賽結束時,它只是通知所有大堂服務器(反向代理服務器)轉發的球員,他們正在返回到大廳的實例。

這應該意味着我可以通過添加後端服務器的資源向外擴展,通過添加更多的反向代理只有大堂的服務器與網絡鏈接進行擴展,而且我還可以擴展在任何單個節點。也沒有強制後端服務器作爲後端的技術限制,每個服務器都可以有一個大廳實例,但是遊戲可以通過網絡分佈。

現在,到目前爲止好(從理論上講,我還沒有開始落實分配但因爲我要事先制定的要點),但還有一個重要的問題:

如何控制所有節點需要知道的元信息?

例如:

  • 多少玩家在線的服務器列表中顯示客戶端連接之前?
  • 是婚介實施了一些P2P方式(我計劃使用微軟的trueskill評分系統的算法,如果該事項),或者我應該只是委託爲整個服務器(或者甚至是元信息)?
  • 怎麼樣的隊員系統一起參加隊列?哪個服務器跟蹤組中的玩家?
  • 如何管理配置,如被禁玩家?每個轉發服務器都需要了解它們。
  • 如果玩家連接的大廳實例恰好滿了,我如何找到另一個未滿的大廳實例,以便我可以在那裏連接他們的連接?這回到第一點,我需要有一個方法,節點可以輕鬆查詢網絡狀態

我可以實現一個P2P解決方案,或主要服務器來處理這種事情。我主要擔心的是添加一個主控服務器會增加一個單點故障(我想避免),但是P2P解決方案似乎更復雜一個數量級,並且可能會顯着降低速度或者使用速度相當數量的資源緩存所有節點上的數據。

所以問題是:我的設計是否體面,你認爲元信息問題的兩種解決方案的優缺點是什麼?有更好的第三種解決方案嗎?你認爲最好的是什麼?

預先感謝您的幫助,非常感謝。

回答

1

有很多解決方案來實現共享數據庫。這取決於您的技術堆棧,網絡架構,編程語言等。這個問題太寬泛,需要在幾段中回答。選擇一種方法並使用它,但要使代碼足夠模塊化,以便在必要時替換另一種方法。

更新:根據您的評論,您正在使用扭曲,我會問你一個問題。如果你有一組共享網絡狀態的Twisted服務器(你的「分佈式節點」),你會如何向這些服務器請求你的「複雜操作」,以及如何獲得結果?如果你能夠足夠詳細地回答這個問題,你將會確定你的節點的需求。然後您可以確定它們如何共享和更新網絡狀態。此時,您可以提出更具體的問題(如「我如何在我的節點上覆制memcache?」)。

+0

我真的不同意......我提供了一些非常詳細的信息,我認爲對於那些有構建分佈式系統的經驗的人來說,我可以指出我對於他們認爲適合於這種情況的信息是不合理的幾段。我甚至不會要求一個特別詳細的答案,只是一個簡短的「我會建議你使用X,因爲Y,或者你可能會看到這個或這個」之前使用過這些東西的人。 – Salis

+0

@Salis - 抱歉,這個問題太過分了。有經驗構建分佈式系統的人可以根據您在這裏提出的問題編寫*系列*書籍。任何歸結爲「我推薦X因爲Y」會給你帶來虛假的安全感;這裏沒有靈丹妙藥。我建議在這裏的每個問號之前查看句子,並將每個問題轉化爲自己的問題,並提供更具體的問題。我認爲這是一個很好的問題,但對於SO格式來說,答案太大了。 – Glyph

+0

@Glyph那我該問什麼?我真的不知道,我會很感激建議。我所問的問題僅僅是一些例子,我真正要問的是「在分佈式節點之間共享網絡狀態的好方法,同時仍然保留對數據執行復雜操作的能力?」。我希望有人能夠向我推薦一些文章或其他人如何解決這個問題的例子。我最好的想法是使用像redis這樣的存儲網絡狀態的東西,並且有一個獨立的服務器來執行這項工作,但它看起來並不像一個優雅或直觀的解決方案。 – Salis