Google 开源非透明 UDP 代理 —— Quilkin

出品|开源中国

文|Travis

传统上,实时多人游戏的专用游戏服务器会使用定制的 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 博客了解具体使用方式及项目未来发展方向。