Google 開源非透明 UDP 代理——Quilkin
文 | Travis
出品 | OSC 開源社區(ID:oschina2013)
傳統上,實時多人遊戲的專用遊戲服務器會使用定製的 UDP 協議,用於遊戲內玩家之間的通信和遊戲同步。這種通信通常被捆綁在單體式遊戲服務器和客戶端中,並將通信協議的技術功能(如自定義的網絡物理同步、安全、訪問控制、遙測和指標)與物理模擬、AI 計算等計算要求極高的功能相結合。
在快節奏的多人遊戲中,一段遊戲的完整模擬通常發生在一個單體的專用遊戲服務器的內存中,其職責涵蓋了從網絡物理學、AI 模擬,以及客戶端與服務器通信等方方面面。由於整個遊戲的狀態是內存常駐的,每個客戶端都直接連接到玩家正在玩的專用遊戲服務器,這就帶來了一些挑戰。
-
每個專用遊戲服務器都是單點故障。如果它發生故障,那麼整個遊戲會話都會產生錯誤,這使得它容易成爲攻擊者的目標;
-
連接到遊戲服務器的 IP 和端口是公開的,並暴露給遊戲客戶端,使其很容易被攻擊者發現並鎖定目標;
-
遊戲服務器模擬和網絡通信的多個方面被緊密地耦合在同一個過程中,使得重用和模塊化更加困難,並擴大了性能問題的風險。
通過在低延遲網絡中的專用遊戲服務器前使用多人 UDP 流量代理,我們可以解決以下這些關鍵挑戰:
-
更高的可靠性:代理提供了冗餘的通信入口點,UDP 數據包可以被髮送到任何數量的代理,並被路由到專用遊戲服務器。雖然專用遊戲服務器通常仍然存在單點故障,但代理提高了通信層的冗餘度和潛在的故障轉移;
-
更高的安全性:專用遊戲服務器的 IP 和端口不再是公開的,遊戲客戶端只能看到代理池的一個子集;
-
更好的可擴展性:可以將通信協議、指標、通信安全和訪問控制的各個方面移到代理中,這就把非遊戲的具體計算從你的遊戲服務器的處理中剝離出來;
因此,整個系統更具有彈性。不過到目前爲止,上述這些功能僅適用於擁有資源來構建自己專有技術的大型遊戲工作室。而 Google 認爲爲遊戲行業的每個人創造公平的競爭環境是一項重要且值得的努力,因此 Google 與 Embark 合作,共同發起並開源了 Quilkin 這個項目。
Quilkin 是一個 UDP 代理,由 Google 與 Embark Studio 合作開發,爲高性能的實時多人遊戲量身定做,以提供一個標準的、開源的解決方案。其目的有兩個方面:
-
將安全、訪問控制、遙測和指標等通用功能從單一的專用遊戲服務器和客戶端中剝離出來;
-
以一種可組合和可配置的方式提供上述這些通用功能,這樣它就可以在廣泛的多人遊戲中重複使用。
這種可重複使用的基礎使遊戲開發者能夠將更多的時間集中在構建多人通信協議這類特定於遊戲的方面,而不是那些通用層面。
Quilkin 旨在用於遊戲客戶端後以及專用遊戲服務器前,並提供以下主要優勢:
-
混淆:對 UDP 數據進行非透明的代理,使你的遊戲架構的內部狀態不易被攻擊者看到;
-
開箱即用:用於 UDP 數據包流量和通信;
-
可見性:一套可組合的處理過濾器,可應用於路由、訪問控制、速率限制等方面;
-
靈活性:能夠作爲獨立的二進制文件使用,不需要改變客戶 / 服務器,也可以作爲 Rust 庫使用,這取決於你希望爲你的系統和你希望建立的自定義處理過濾器進行多深層次的整合;
-
兼容性:如果需要,可以通過 Rust FFI 與現有的 C/C++ 代碼庫集成;
-
多種集成模式,允許你選擇對你的架構和現有平臺有意義的集成程度;
感興趣的開發者,尤其是遊戲開發者可以訪問 GitHub 查看 Quilkin 源代碼,或訪問 Google 博客瞭解具體使用方式及項目未來發展方向。
GitHub:https://github.com/googleforgames/quilkin
Google 博客:https://cloud.google.com/blog/products/gaming/introducing-quilkin
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/L9e5idcYv5x61Fld3eEvTQ