在2017游戏行业全球同服和安全攻防技术沙龙上,来自莉莉丝游戏的蒋海洋分享了《莉莉丝游戏云上运维之路》。他通过介绍莉莉丝游戏的概况、进化历程,引出了莉莉丝游戏使用的cmdb,Saltstack以及Web化技术,并且分享了莉莉丝游戏在运维方面的心得。
以下内容根据直播视频整理而成。
目前概况
莉莉丝游戏采用的是云上架构,目前拥有两个运维工程师,4款运营中游戏,500+云主机,200+RDS。线上没有一台物理、实体的服务器,也没有使用任何物理的机房。
进化历程
之前做的比较好的一款游戏是《Dota传奇》,蒋老师进入莉莉丝游戏之后初步了解过该游戏的运维情况。《Dota传奇》运维的基本方式是以txt文档来管理基本的主机资源,比如IP、数据库、游戏的服务器名字,如果需要进行操作的话使用Python写的脚本,利用里面的expect模块以及多线程进行操作,其存在的问题是速度特别慢,比如在发布版本部署文件的时候。
在做美版发行的时候,莉莉丝引入了cmdb用来管理基础的资源信息等,远程执行则使用了开源的软件saltstack来进行操作。做完这些之后,服务器的同事想要自己做制作的操作等,所以需要web化开放出来。
Cmdb
cmdb是构建自动化流程的基础,所有的资源等信息都在其中进行管理,比如游戏和配置等都是从cmdb中拉取出来的,包括里面的充值等都是从cmdb拉取。之前使用txt进行管理的时候,很多地方都有对应的东西,如果有一个地方需要进行变更的话,其他地方如果没有关联到就可能出现问题。cmdb的管理纯粹是基于云平台上的配置管理,没有物理服务器的话不用像实体机房一样关心服务器的位置、端口,只需要管理IP的信息、硬盘、ERP等。
上图是莉莉丝自制的管理平台,主要分为三层结构:业务管理,包括游戏等;拓扑模型,比如游戏的集群模块等;业务实例,每个模块下面的实例。
莉莉丝拥有的资源如上图所示,主要为云上的资源,固资编号是根据云厂商的ID得到的,又相对实例化,还涉及到后期的按项目拆分账单等。将资源都管理起来之后,底层调用了云的API,如果需要买一些组件的话只可以直接在里面点一下,客户端会联动云平台的API把资源灌到里面来,然后把资源分配给项目使用。
saltstack
saltstack是开源的快速远程执行平台,是基于Python开发的,部署简单方便,有自己的API便于进行二次开发。
最上方是一个Master,下面会挂很多minion,Master可以对minion进行远程的操作。如果在阿里云上用了很多的区域,相当于在中间加了一些Syndic节点进行统一管理。我们会根据业务关系去调cmdb里面存储的业务信息,比如需要对某个模块进行操作的时候会到cmdb里面去找需要操作的命令有哪些,然后将这些命令下发下去。执行完命令会将结果返回回来,中心Master就会看到这些返回的结果,整个的执行速率非常快。
Web化
后期,一些开发同事也想用saltstack,但是纯粹的命令行会让人觉得不太方便。所以做了一个web化的东西方便使用。它也成了一个交互平台,比如想要知道增加一个模块每db需要多少机器,那么可以告诉他需要在db的集群下面开一个模块,分好机器之后告知提问者可以直接进行操作即可。Web化可以降低使用门槛,固化操作流程可以减少失误。
上图是可视化作业平台,有几个常见的功能:如果想看某个文件是否下发下去或者当前的状态,可以点击快速脚本执行,可以在下面直接进行脚本编辑,然后指定执行的目标路径、执行账户,通过配置平台选择执行的机器,按照模块把所需要的集群都勾选上,执行完之后把最后的执行结果返回回来在业务平台上展示出来。这样对于开发的同学非常方便。
心得
首先,莉莉丝的人力非常少,所以考虑用开源的软件,比如监控使用小米的open-falcon。在游戏行业,标杆行业腾讯的运维平台蓝鲸已经做到了2.0版本,自己做平台的时候也可以参考这些企业的运维平台,但是由于担心安全问题可以不直接使用。
莉莉丝使用了很多成熟的云产品,阿里云的RDS已经做得非常成熟,可以做主从同步,出现问题时也可以回滚到任意时间点,小公司使用起来非常方便,没有必要自己来搭相关数据库。这样就不需要自己做备份相关的事情,可以省很多时间和能力,而且可以动态扩容。如果用主机来搭数据库的话需要考虑到了瓶颈需要怎么做,早期成本会比较高,用RDS可以先选择比较小的量,到了一定阶段的时候再进行扩容即可。很少用到CDN做云栈,只需要用OSS上传回源。由于曾经受到了DDos攻击,所以使用了阿里云的anti-ddos进行防范。
利用好阿里云的API接口,通过写一些脚本来使用API接口可以提高效率。最好一开始就寻求专业支持,在架构设计阶段就可以联系做架构的指引,这样对于后期的维护相对简单很多。