编者按:本文作者Brendan Fosberry是一名热爱游戏技术的工程师,他会在业余时间从事与游戏相关的项目,也曾研究过游戏服务器的自动化。在这篇文章中,他会带大家看看在过去的一年中,Docker是如何影响游戏服务器与游戏世界的。以下为译文:
过去的这一年,Docker在游戏行业的应用已经有了很多令人激动的进展。Docker核心产品变得更加成熟,用户群也有了惊人的增长,对于在游戏等特定行业应用Docker遇到的问题,也有很多针对的特性和产品发布,也证明了Docker在游戏行业的巨大潜力。
虽然Docker在web服务器上已经被广泛接受,但是在游戏行业的采纳度依然慢得多。
在传统的游戏行业,比起可重用代码,开发经验,或代码库的寿命来说,更加重视生命周期和可交付成果。这种以交付为核心的开发方式,促进了行业的创新,但主要还是在核心产品的内容上。因此,游戏产业在其核心技术有了巨大的创新例如:AI,渲染(rendering),物理(physics),分布式仿真(distributedsimulation)和预测(prediction)等等,但在边缘服务上却缺少创新的技术。
正因如此,web服务器行业,通常会在公共APIs和工具,容器技术以及新的语言和框架等领域跑在前头。再联系游戏行业源代码封闭和产品现状,我们会很清楚地发现为什么Docker和其他容器技术没有得到广泛应用,尽管他们很适合。容器有助于解决许多产业的普遍性问题,特别是那些对游戏服务器至关重要的问题,如可移植性、依赖性和资源控制等。
这并不是说Docker没有发现进入该行业的方法,improbable.io使用Docker来运行其模拟平台已经有一段时间了。今年早些时候,EA也曾分享过他们是如何使用Docker的。两者都是将Docker作为托管游戏的高度自动化平台。
Thomas Shaw曾在DockerCon 2015大会上做了一个关于『用Docker来推动文化变革』的脑洞大开的演讲。Demonware使用Docker作为其开发流程的一部分,来帮助支持长期运行的项目,并减少跨项目产生的依赖问题。不管最终产品或托管的解决方案是什么,这都是一种能够广泛使用Docker的方式。
Docker在游戏托管行业应用的障碍
如我们所见,Docker正在被游戏行业中较为普遍的工作流程所采用,或者应用程序运行在一个集中的,高度自动化的托管环境中的情况。这些进展对于游戏服务器是非常好的消息,这使其容器化的好处愈加明显。
目前,游戏托管有以下几种类型:
独立托管:像EA这样的公司,很难运行自己的游戏服务器,但他们确实为游戏玩家提供了一个相当好的服务器池来玩公共和私人比赛。这种同类的游戏服务器环境很容易被容器化,并实现游戏服务器的高度自动化。
非托管:当大型多人游戏不是游戏的一个特色,通常是少数几个玩家中的一个在短时间内扮演主机角色,以代替专用游戏服务器。在这种情况下,服务器经常被集成到游戏客户端上,这种方式的容器化很难。由于游戏是本地托管的,玩家往往对内容有更多的控制权。
混合模式:在大多数情况下,游戏服务器由一个用户可以运行的专用服务器,和一组由开发者提供的官方服务器池(保障玩家的游戏体验)组成。专用的服务器比较容易被容器化,也是我们将重点关注的领域。
这些不同的使用模式极大地影响了游戏服务器管理员的类型。显而易见的是,在托管环境中,就像是一组DevOps工程师,维护很多自动化运行的服务器。
专用服务器的用户群则更加多样化。在典型的托管平台中,无论是开发人员本身或在一个独立的组织,你经常发现较小的游戏组和族群托管在公共或个人的少数的服务器,还有一些个人游戏托管在一个临时的平台。
这些群体的技能水平参差不齐,这将在很大程度上影响像Docker这一类的技术是否会被采纳。管理员的技术水平越低,采用容器化这类非标准技术的几率越低。
另外,游戏服务器技术的多样性也影响了Docker的普遍采用。不同的游戏服务器在持久性,配置和网络方面的架构也不同,这无疑增加了容器化游戏服务器的难度。
虽然许多依赖相关的问题完全可以用容器来解决的,但其他问题却并不那么容易解决。比如,IP地址通常会在游戏服务器中改变多次,以方便用户使用,并且开发者也不会将游戏服务器的高可用性作为重点。
以上围绕标准化,复杂性,说明了为什么游戏托管不容易被容器化。尽管如此,一些爱好者很早就开始了尝试,比如Minecraft等。
容器确实能解决许多常见的问题,比如隔离,资源控制,速度和可移植性,不光适用于游戏托管。许多游戏托管行业是靠速度/成本来推动的,容器潜在的效率和速度,将使其成为这个行业的最佳候选,但这个过程中还存在着很多障碍。
2015年Docker最具颠覆性的变化
在过去的一年中,Docker的核心产品已经有了许多变化,这将对游戏服务器的容器化产生巨大的影响。
CRIU
今年最引人注目的变化就是对CRIU的支持,在DockerCon2015曾演示过Docker的热迁移,这完全要归功于对CRIU的支持,CRIU应该会通过runC代码库成为Docker的核心特性。
因为CRIU保留了内存,进程,甚至开放的socket,它应该广泛兼容于不同的游戏服务器以及多种类型的应用。这意味着大多数现代游戏服务器可以简单地跨主机迁移,甚至跨数据中心迁移,并且用户间的连接不会中断。
显然,对于不支持集群和大型网络服务的典型功能的游戏托管行业,这是一个很大的变化,并且受制于相关服务器的网络架构。因此这有可能不被沙盒外的游戏服务器所兼容。
Docker插件
Weave, Calico等容器的网络技术已经使用了有一段时间了。然而,随着Docker插件框架的加入,这些技术会变得更容易被采用。Volume插件的支持也很重要,但游戏服务器对持久性要求不高。
许多游戏服务器会自主到主服务器列表注册,并自动报告其IP地址和使用端口。客户端可以自动定位并连接到游戏服务器,但前提是网络架构协议栈简单,并且这与容器的范式不兼容。
通过网络插件的使用,我们可以使用先进的路由方法使容器IPS在基础设施内拥有最高权限。这不仅使动态路由更简单,还有额外的好处:当一个游戏服务器被跨栈移植时,IP地址可以被绑定到游戏服务器的后续实例。这很重要,因为在许多情况下,服务器最常用的方法仅仅涉及到存储的IP和端口的连接信息。
最重要的是,通过使用Docker网络插件,可以添加CRIU特征,通过更复杂的网络结构来设置一个更广泛的服务器列表。
Dockercraft
游戏相关的演讲总是很受欢迎,DockerCon EU上关于Dockercraft的演讲也不例外。Dockercraft沿用了Docker Doom的方法,通过游戏中的模块来创建和控制容器。
发现集成和控制复杂系统的新方法总是令人兴奋的。就我个人而言,我迫不及待地想看到Space Engineers游戏和Docker的结合,虽然这么做的实际用途是有限的。通过这种例子,可以使关注游戏的用户,很容易理解容器的使用原理。
2016年意味着什么?
显然,游戏行业对Docker的采用正在增加,Docker产品和容器的生态系统也正在朝有利于游戏服务器的方向发展。我们完全可以期待看到更多大规模、自托管的公司,像EA一样使用Docker作为其平台的一部分,同时游戏开发团队也将Docker继续整合进他们的开发流程。
更值得期待的是CRIU和网络插件对整个游戏托管行业的影响。在竞争激烈的市场,这些都是非常重要的特点,但要更广泛的采用仍有一些障碍。
Docker的学习门槛
许多游戏服务器管理只有Windows环境,大多数人的技术水平只能够保证服务器的启动和运行。Windows的支持已经大大降低了这种门槛,并且像Dockercraft这样的工具可以帮助人们理解Docker的核心概念。
每个游戏服务器都是不同的
不同的游戏服务器有不同的应用程序和操作系统,Docker是一个完美的工具来解决这个问题。
虽然这解决了应用的依赖问题,但在游戏服务器的运维上仍然存在问题。比如不同的服务器使用不同的配置方法,也需要不同的持久化组件。
源代码封闭
绝大多数的游戏服务器应用都是闭源的,不是特别容易容器化,实现团队想达到标准化也是非常困难的。
如果Docker能在游戏行业得到更加广泛的采纳,也将有助于推动游戏服务器形成一个更加兼容的生态。
总结
在未来的一年里,我们可以看到所有这些领域的改善。更多的Docker工具和定制化容器将有助于降低学习难度,随着大公司对容器技术的采用,游戏服务器应该会对容器技术更兼容。
当前对于广泛采纳Docker,标准化和可用性的缺乏仍然是重要的障碍,这可通过工具和解决常见游戏服务器的容器化问题来改善。
有足够的标准化和Docker的跨平台兼容性,我们甚至可以看到容器成为未来专用游戏服务器分发标准!
更多Docker在游戏行业的应用文章:
网友评论