问题导读:
1.什么是容器?
2.容器是如何发展起来的?
3.容器技术有哪些优势?
4.传统游戏后台架构存在哪些问题?
5.容器对于开发人员带来哪些好处?
什么是容器?容器(Container)是一种轻量级的虚拟化技术,所谓轻量级虚拟化,就是使用了一种操作系统层虚拟化技术,这种技术允许一个操作系统上用户空间被分割成几个独立的单元在内核中运行,彼此互不干扰,这样一个独立的空间,就称之为一个容器。举个例子,一个操作系统,可以类比成一套公寓,那么容器,就相当于公寓中的一个房间,大家共享同一个客厅,厨房和卫生间。但是房间和房间之间彼此隔离,一个房间里面的人的活动,不会影响到其他房间的住客。房间也有门,有一定的安全措施。随着虚拟化技术的发展,一台物理的机器可以虚拟成多台虚拟机,但是虚拟一个独立操作系统是存在系统损耗的,不可能虚拟太多。而容器就不同了,同一台机器,可以运行几十个甚至数百个容器。基本没有太大的性能上的损耗,并且启动一个容器,就像启动一个进程那么简单,在秒级的时间即可完成。因此在某些场景下,容器技术会有非常大的优势。
容器技术的发展历程容器的技术并不是一项很新的技术,早在十多年前,其思想就已经开始得到应用了。2005年,Solaris系统率先推出了容器的概念。2007年的时候,容器技术的核心特性cgroup正式进入Liunux内核。2011年,已经形成了标准化的规范。业界在对容器的使用上,也越来越广泛,特别是一些大的互联网公司,国内的腾讯,百度,都已经在内部生产环境中大规模使用了容器技术。对于容器技术使用最成熟的当属Google,Google内部的几乎所有的业务,其运行环境基本全部实现了容器化。容器发展的最重要的一个里程碑是Docker的出现。很多人有误解,Docker其实并不是一种虚拟化的技术,而是一种容器的管理技术,它主要由容器管理引擎,客户端以及AUFS文件系统组成。将容器的构建,分发和运行标准化了。因此出来一年多,其热度已经席卷全球。
容器技术有哪些优势随着容器技术的发展,特别是插上Docker的翅膀后,显得如虎添翼。它有什么优势,能够解决什么问题呢? 这里总结了如下几点:
- 提升了虚拟化的粒度:由于Container是一种操作系统层的虚拟化技术,可以在进程级别进行隔离,因此一台物理的机器,可以运行非常多的容器,而将性能损耗降到最低。当然也支持在虚拟机上运行容器。因此,一些低成本,支持动态伸缩的微服务成为可能。譬如一个个人站点,一个公众账号,一个个人博客。当然也可以用于游戏服的场景。
- IT服务交付标准化:在Docker中,有容器和仓库的概念,任何服务,都可以打包成容器。容器可以存储在仓库中。当需要执行式,直接从仓库中拉取进行执行。屏蔽了底层IT基础设施之间的差异。服务的运营实体不需要了解容器内部的结构,只需要从仓库中拉取进行执行就行了。因此可以在IT服务的交付和使用者之间划开一条清晰的界限。非常适合目前IT服务分工越来越细的趋势。(评论:比如我们机器分为32位和64位,安装软件就会有限制,有了容器就不会存在这方面的问题)
- 开发,测试,部署一体化:系统的持续集成,持续部署,一直是IT开发人员,运维人员梦寐以求的事情,但是实际上,解决起来非常困难,很多时候,开发出来后,要花很大力气搭建一套测试环境,测试完成后,又得重新搭建一套运营环境。而Docker三个核心的概念Build,Ship,Run,其实涵盖了从开发到部署到执行的全流程。以容器为单位,当开发完成后,打包成容器,放到仓库,然后进入测试流程,测试完成后,依然push到仓库,最后到生成环境。让三个环节平滑的衔接。避免了复杂的运行环境搭建的工作量。
游戏托管的主要特点前一部分主要介绍了容器技术的优势和特点,那如何和游戏来结合呢。这得现成游戏行业本身的特点以及业务特征说起。其实游戏行业是对云的接受度最高,但是也是对云的特点使用最不充分的行业。俗话说,游戏行业,特别是现在比较火的手游行业,本质是“短平快”:
- 短:游戏生命周期短,特别是手游,一般一款游戏,只有一年左右的生命周期;
- 平:游戏后台架构是一个扁平的架构,大部分游戏都是单区单服,一台机器,一个数据库,可以搞定好多个游戏服;
- 快:游戏滚服快,很多游戏,用户都是爆炸式增长,通常一个游戏服,只支持固定数量的用户,达到用户上线,就开一个新的服,因此主要表现在开服快,同时,也由于生命周期短,也需要开发快,部署上线快。
游戏业务的后台服务器架构,目前大多数也沿袭了传统的模式,以比较常见的单区单服架构为例,通常都是使用一台性能比较好的机器,譬如16核64G内存,在机器上开一定数量的游戏服(相当于同时运行多个游戏后台服务进程,通过不同的端口来提供服务)。每个服支撑固定数量的在线用户。每个游戏服,构成了一个独立的游戏世界,不同游戏服之间,数据是不互通的。游戏服有多有少,以腾讯云的某一款游戏为例,一台16核的云服务器,开到80~100个游戏服。为什么不是一台服务器开一个游戏服呢?主要还是成本方面的考虑。当然也有人会问,为什么不能每个游戏服用户数多一些,从而开少一些的游戏服呢?这主要是由于游戏特点决定的,例如MMORPG(多人在线RPG)类的游戏,每个游戏服,地图有限,不可能支撑太多用户,同时,用户太多,等级差异较大,造成游戏生态系统不平衡。因此,每个游戏服用户数,是一个恒定的量。
传统游戏后台架构存在的问题
- 一台机器同时运行大量的游戏服,当机器宕机时,影响的用户面比较广;
- 由于每一个游戏服是一个后台服务进程,进程之间没有强隔离,会导致不同游戏服之间资源分配不均匀,或者资源相互抢占的问题;
- 一个游戏中,会涉及很多不同种类的业务逻辑,譬如登录,聊天,战斗,行走,甚至记录日志。传统的方式情况下,为了简化部署,大多都运行在同一台服务器上面。因此需要不同的进程或者线程去完成这些业务逻辑。管理起来非常的复杂,特别是当一台机器上同时存在很多组游戏服时。
当然,也有一些优化后的架构,譬如将一个游戏大区里面登录逻辑独立出来,由一组单独的服务器去承载。但是,要让一个游戏世界,所有的业务逻辑都能协调运行,依然是一个非常复杂的事情。特别是一台物理的机器,部署了多组游戏服时。
一个全新的游戏自治系统前面的章节谈到了容器技术的优点。其中比较重要的一个优势是,容器技术是一种轻量级虚拟化技术,能够以很细的粒度,虚拟化独立的系统运行环境。这就意味着,一台物理的服务器,或者是一台云上面的虚拟服务器,能够同时运行成百上千个独立的容器。每一个游戏世界里面,每一种业务逻辑,譬如控制人物的行走,战斗,场景,聊天,存档,数据库等,都可以运行在一个独立的容器中。这一系列的容器,就构成了一个独立的游戏世界的自治系统。一个自治系统里面的所有容器,可以运行在一台物理的机器上面,也可以分布在彼此独立的机器上面。同时,还可以根据每一类业务使用资源的不同,合理的规划这一类容器的资源用量,做到彼此互不干扰。当然,如果只是纯粹的容器技术,这个自治系统里面的容器管理也是一个大问题。但是Docker技术的出现,为我们完美的解决了这个问题。Docker里面有仓库的概念,所有的自治系统的基本单元(容器),都可以存储在仓库中,同时,借助于FIG,SERF等容器编排,以及服务自发现的技术。当这些容器被分发到一个运行环境(一批执行的服务器)时,能够将一个自治系统快速构建出来。让一个游戏世界的后台架构,能够在秒级的时间里面快速重建。这将完全颠覆游戏开服的概念。我们知道,现在的开服,需要申请机器,安装软件版本,修改配置等非常繁琐的操作,虽然通过脚本,可以基本实现自动化,但是依然需要一部分人工去介入。结合了Docker等技术,只需要分发和复制就可以了,将Docker所提倡的三个核心概念Build,Ship,Run体现的淋漓极致。
容错和热迁移游戏的稳定性一直是运营方最为关心的问题。一次异常的宕机,可能导致非常大得损失。传统模式下,一台服务器,同时运行几十组游戏服时,一次宕机,可能会影响数万的游戏玩家。当游戏服的所有业务逻辑实现容器化后,某一次机器故障,可能只是影响到了部分游戏服里面的某些业务逻辑。我们可以将一个游戏自治系统看做是一个正在运转的机器。一起出现故障时,需要重新启动并组装机器,现在可以做到在不停机的情况下,替换零件。譬如控制行走任务的容器正好位于某个故障机器时,可能只是瞬时的卡顿,立即就恢复正常。借助某些监控的手段,一些重要的业务逻辑甚至可以同时运行多个备份容器,当一个逻辑出现问题时,能够快速切换到另外一个备用容器。
未来的展望游戏对于云的使用,目前还处于非常初级阶段,大部分游戏厂商,还是使用的传统的IDC托管,即使使用云的厂商,也是将云主机当传统的物理机在使用。容器技术虽然有多年的发展,但是Docker之类技术目前还只是襁褓中的婴儿。游戏领域能够接受容器的概念,还需要一个探索和实践的过程。但是随着游戏领域的竞争加剧,低成本,精细化运营是未来的趋势。游戏一直是腾讯云最重要的拓展领域,由于有国内最大规模的游戏用户群体,因此对于游戏理念的理解,游戏架构的设计以及运营经验,一直是腾讯云最重要的竞争优势之一,所以腾讯云很早就启动了容器技术在游戏领域的研究。目前,容器技术在腾讯的社交网络已经有多年的实践经验,内部业务运行环境基本全部实现了容器化。相信很快在游戏领域也会逐步应用开来。在文章的最后,我想到和某个从国外回来的大型游戏公司的老板在聊天时,他给我描述的未来游戏世界的一种场景。全世界所有游戏玩家都在一个游戏世界里面。有堪比现实世界般广袤的地图。游戏中的场景和人物都由强大云计算支撑的AI智能控制,整个游戏,就是现实世界的完全模拟。或许借助于文章中展望的技术,我们会看到类似的这种大同的景象。
(责编:周小璐)
|