簡體   English   中英

使用Linux Virtual Server在MMO游戲中對區域進行負載均衡

[英]Using Linux Virtual Server for load balancing of zones in MMO game

我是一個MMO游戲的開發者,目前我們在我的公司面臨一些可擴展性問題,我認為這些問題可以通過正確的游戲世界聚類來解決。

我真的不想重新發明輪子,這就是為什么我認為Linux Virtual Server可能是一個不錯的選擇,特別是使用一些7級負載平衡技術。

我目前正在將ktcpvs視為負載平衡解決方案,並想知道它是否是一個合適的選擇。

主要思想是在專用服務器上運行多個區域(就我的游戲而言“位置”)。 當玩家決定前往某個特定位置時,負載均衡器會決定哪個區域服務器將實際為玩家提供服務(這實際上是我需要7級負載均衡器的原因)

你們對上述所有人都有什么看法?

更新:我向LVS用戶發送了相同的問題郵件列表http://marc.info/?l=linux-virtual-server&m=124976265209769&w=2

更新:我也在gamedev.net論壇http://www.gamedev.net/community/forums/topic.asp?topic_id=544386上開始了類似的話題

為了解決您的問題,我們需要了解您是否需要音量或響應,但很難同時獲得兩者。

第7層負載均衡 - 基於數據的應用程序級別平衡,因此需要將網絡數據包的數據內容路由到端點。 您可以通過在應用程序級別,服務級別或內核級別實現路由來實現卷(更多用戶)。

可伸縮性 - 我假設您的內存,CPU資源和網絡帶寬不足。

  • 應用程序級別 - 您的應用程序邏輯接收應用程序包並相應地路由

  • 服務級別 - 您的系統框架(某種類型的前端服務)接收數據包並通過模塊執行路由(考慮自定義apache模塊,甚至是網絡驅動程序模塊 - 比如編寫網絡過濾器)

  • 內核級別 - 在網絡數據包級別執行路由。

你越接近金屬,你的反應就越好。 我建議使用專用的linux服務器預先執行路由 - 去本機,而不是虛擬。 為WAN使用多個或組合網絡適配器,為每個端點使用專用適配器(一個+ wan,每個連接的應用服務器各一個)

如果響應時間很重要,那么您需要一個內核/管理員狀態解決方案,它將為您節省一些上下文切換,但要注意您需要不惜一切代價限制跳數,並且可以更好地由更少,更大的機器提供服務,並且您的可擴展性將始終如一有限。 使用KTCPVS存在風險,它很老,沒有主動更新。 如果您判斷它對您有用,那么只要它在系統狀態下運行,就可以考慮寫一些類似於網絡過濾器的東西。

如果卷很重要但響應時間是次要的,請實現在問題/用戶狀態下運行的C ++內置的自定義構建的高速套接字交換機。 它是最容易維護的,並且將提供最佳的可擴展性。

您需要構建一些原型來確定最適合您需求的原型。

最后的想法 -

在執行上述任何操作之前,請先確保您已優化游戲設計。 你可能知道大部分內容,我在這里列出它是為了所有人的利益。

(a)消息應舒適地放在一個網絡數據包中,對於大多數家用路由器來說,小於1500字節

(b)嘗試在您的游戲客戶端而不是服務器中使用路由邏輯。 只需將一個帶有區域和IP地址的小表下載到客戶端,就可以放棄以上所有內容。

(c)嘗試將區域可見性限制為客戶,他們應該只知道他們的區域和相鄰區域(如果您實施上面的點b)

希望這會有所幫助,抱歉,對於KTCPVS,我不能更具體。

您尚未指定瓶頸所在。 網絡流量? 磁盤IO? CPU周期?

假設您的意思是第7層負載均衡器並且沒有足夠的CPU功率,我認為LVS不是最佳選擇。 我已經使用LVS完成了Web Server負載平衡,它工作簡單並且並不復雜。

但我認為以這種方式負載均衡MMORP需要LVS中的大量額外代碼,使用分布在某個多核服務器上的多線程應用程序進行負載平衡可能更容易。 但這不是完全可擴展的,這只能讓您在不禁止成本增加的情況下使用16個內核。

像這樣的最大問題是當球員靠近邊界時會發生什么。 顯然,他們需要能夠看到彼此並互相交流,但他們在不同的服務器上。 所以你需要一些非常奇特的服務器間通信,有時只是將消息復制到兩個服務器。 當某人靠近“角落”時,它會變得更加復雜,然后你必須處理4台服務器!

大型多人游戲開發 ”一書中有一章“共享服務器邊界的陷阱”,詳細介紹了這個問題。

我之前沒有聽說過Linux Virtual Server,所以我不明白它是如何適合的。 我認為您的實際服務器應用程序需要支持這種特定於游戲的負載平衡,而不是嘗試運行集群並假設它將自動知道如何拆分您的應用程序(它不會)。 如果我是你,我會寫服務器程序來處理它自己的一塊土地,它應該連接到它周圍的土地,然后設計一個服務器到服務器協議來傳遞這些消息(“這里來了一個玩家,我要開始告訴你關於他的信息!“”請務必告訴我關於我們邊界附近的消息“,”好吧,玩家不在我的領土之內並進入你的領域,這是他的詳細數據“等等) 。 我認為這比運行不同版本的Linux並假設您將獲得自動負載平衡要復雜一些。

為什么要將分配邏輯移動到負載均衡器? 它是一個不自由的組件,可以破解。 看來你的客戶非常清楚他們所在的區域。看起來他們可以很好地連接到zone<n>.example.com 然后,您將在DNS級別處理負載平衡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM