2013年是英雄联盟在线爆发式的增长的一年,年初的运营数据已经让全体英雄联盟运营团队感受到了巨大的压力。去年,扩容相关工作占到占据了英雄联盟运维较多的工作时长,这使得致力于提升用户体验的英雄联盟运维团队在年初就已经着手研究如何实现自动化扩缩容。

自动化扩缩容的目的主要有三个部分,首先是用户体验的保障,我们必须以最快的响应速度去应对用户增长的需求,否则必然会出现大规模的掉线或者拥挤排队,影响游戏基本体验;其次是资源的最有效利用,英雄联盟业务的单位运营成本,已经超过了其他同类型业务的平均线,我们需要考虑除了快速加机器之外也需要快速下线机器,对于负载较低的大区,实施服务器数量的裁剪,给需要扩容的大区供给服务器;第三是运维团队的人力压力,去年我们几乎花了1.5个以上的人力去做人工的扩容,这种高强度的重复劳动,不适合长期持续,必须通过工具去改善。

想一步到位实现自动化扩容和缩容,是比较困难的,我们做了深入的业务资源模型分析和数据采样,决定把项目分成两期来实现:

初出茅庐-自动扩容的实现:

在一期的项目中,我们实现了自动监控外网大区gamesvr的运营指标,当运营指标达到一定的阀值之后,会智能的触发自动扩容步骤,从而缓解gamesvr的压力,改善用户体验。

一期系统功能主要集中在基础功能实现上,主要分为3个部分,数据采样和存储单元、数据分析判断单元、扩容执行单元。

数据采样和存储单元:这部分主要是为了收集并存储各个大区的gamesvr运营指标,比如要收集所有大区的gamesvr的cpu使用率,内存使用率,异常退出对局数,成功完成对局数等数据;

数据分析判断单元:这是系统的核心功能之一,主要是通过分析前一单元收集的数据,使用已经定义好的公式模板,对是否要扩容,扩容数量等相关信息做出主动判断和任务的触发;

扩容执行单元:同样是系统的核心内容之一,通过自动化平台组装相关功能并结合多个周边系统,经过合理的整合,将前一模块的扩容指令实施完成。

下面简要的描述自动扩容的逻辑,如图(1)所示,首先,数据采样和存储单元会每隔一个单位周期对gamesvr的相关信息进行采集和存储,然后再开始判断游戏大区是否需要扩容,此时的系统会从数据存储单元中读取数据,然后根据这些数据,使用数据分析单元的功能分析数据并做出是否需要进行大区扩容的判断,然后对相应的扩容执行单元发出任务指令,将扩容的目标大区,扩容的数量(具体计算方法如下公式1)等信息传达给扩容执行单元,最后,由扩容执行单元完成数据分析判断单元发出的指令,从而达到自动扩容的目的。

                       

                                               图(1)


                               公式1

我们可以看到通过上述三个单元模块的紧密配合,就可以完成自动化扩容的任务,从而解决因服务器压力过大而导致的玩家体验不畅的问题。同时,通过自动化的扩容,可以大大的降低运维人员在扩容相关工作上的人力投入,并且可以有效的降低人为失误。

关于自动化扩缩容利器的用户交互,主要用的是类似汽车的仪表盘的形式来展示相关扩缩容时实施人员比较关心的数据。如图(2)


                                                 图(2)

其中从左往右,我们先会有导航模块区,是用来选择你需要进入的功能区;然后是信息提示单元,用来显示扩容情况,扩容队列,以及告警提示等信息,好比是汽车仪表盘的文字提示区;核心区域是为了展示出统计好的目前在对局中的玩家数,好比是汽车仪表盘的速度仪表盘。而最左边的区域是用来显示目前容量云中可用的扩容能力,好比是汽车仪表盘的油料情况。为了更合理的利用首页,在首页的空白处加上了若干表格,比如,首页的右上角用趋势图给用户一个大概的关于在线、cpu、提供服务能力、扩容量等的视图,可以不断的扩展视图内容。

随着第一期项目的结束,我们成功的将业务大区的扩容耗时,从2小时缩短到10分钟。将扩容反应时间从之前的数天变为实时,而同时降低人力的投入,这是一个历史性的进步。

所向披靡-无所不能的容量云:

二期功能加入了监控和自动触发、缩容等功能,真正实现采集性能数据、按照模型分析出结论、实施扩缩容、性能数据达标等一系列操作,流程上把容量管理这件事做成闭环。理论上无需人工干预,让系统自动判断和实施,系统可以把现网各个大区的服务器数量自动调整到一个最合适的配比,至此,理想中的全方位自动化利器,全部实现。自动采集数据、分析出决策、实施扩缩容操作的整体流程架构图如下:

“缩容”是二期项目中的一个新增的功能模块,缩容的逻辑是这样:

在自定义的时间周期内,判断是否需要缩容,然后实施缩容步骤

同样缩容也是有一套自己的判断逻辑的。具体流程见下图(3):

                                      图(3)

在在系统的UI上面,为了更加能准确的从首页获取到关键的信息,我们在系统首页又添加了左侧的提示,显示了上次缩容判断的时间,以及下次判断的时间,并且在配置项中,加上了缩容逻辑的配置项,可以由运维进行配置,然后开始缩容任务。

二期中新增了几个亮点功能,利用云的概念自动化的调用服务器资源就是其中一个。我们通过二期的建设,做到了将服务器资源云化,通过云的模式,合理的在各个大区之间进行服务器的调度,如图(4),我们看到,之前我们的做法是手动的从部门备机池中申请服务器到云中,然后在大区需要进行扩容的时候,才将云中的服务器扩到游戏大区中;如红色的箭头所示,通过自动化的缩容,我们做到了自动化的将游戏大区中,尚且富余的服务器资源返还给业务云,然后由云在分配给需要使用的游戏大区,这样通过自动化的扩、缩容服务,我们做到了服务器资源自动化的动态调用,不仅满足了业务的实时扩容需求,也最大限度的节约了业务成本。


                                                       图(4)

结束语-to be continue

运维自动化是一个大的口号,也是一场持续的运动。过往我们更多的将自动化局限于了“自动化执行”,所谓自动化,也只是把一些后台的操作集合到一个自动化系统中,通过人工或者自动触发执行。真正实现自动化的采集数据、自动化的分析决策、自动化的操作执行,把整个流程形成闭环,英雄联盟容量云是当之无愧吃螃蟹人。我们也希望,通过这个小的尝试,为互娱游戏运营流程优化,寻求更多的突破口,正所谓优化无止境,英雄联盟运维团队在业务流程优化的道路上,从未止步过。