本文转自infoQ,点击「
阅读原文
」查看,感谢原作者胥峰授权运维帮转发
关于手游
概要
手游和端游运维的异同点
最佳实践:推荐的手游架构
使用HTTP协议的优点
推荐的网络架构
最佳实践:手游容量规划
多线机房的选择
网络带宽容量规划
Web服务器承载能力规划
Memcached承载能力规划
数据库承载能力规划
官网论坛访问能力规划
人数曲线接入
小结
概要
2015年第一季度,中国网络游戏市场规模达到320.8亿,环比增长8.0%,同比增长24.7%。其中移动游戏占比31.0%。相对于传统的端游,手游的兴起给运维工程师的技术能力和运维理念都带来了巨大的挑战。这是因为手游在技术架构、运维体系方面存在众多特殊的要求。本文首先分析手游运维的特点,然后再从手游的架构、容量规划两大方面给出最佳实践的推荐。
在手游运维领域,我们经常会听到一些专用名词,在这里我们首先对这些专用名词进行简单说明以期读者能对手游运维有个概念的认识:
手游开发商
:也叫CP,即Content Provider,内容提供商的英文首字母缩写。顾名思义,就是指制作手游产品的研发公司或者团队。例如研发《刀塔传奇》的莉莉丝团队等。
手游发行商(运营商)
:即代理手游CP开发出来的手游产品,在部分渠道或者全渠道发行CP手游产品的公司。一般由手游发行商进行手游运维工作的实施。例如盛大游戏、龙图游戏等。
手游渠道
:拥有手机端手游和APP用户,能够进行手游和APP流量分发的公司,即可成为渠道。所有可以获取手游用户的平台都可以称为渠道。例如苹果应用商店、Google应用商店、腾讯应用宝、百度手机助手等。
下载数
:手游客户端被下载的次数。
激活数
:用户下载安装游戏后,打开游戏,但未进行注册前,记录的终端数。
注册数
:用户激活后,进行了自动或者手动注册有ID信息或者账户信息的账户数。
日活跃登陆数(每日登陆用户数DAU)
:用户输入完身份信息后,进入到游戏内的账户数。同一日多次登陆的同一个玩家计数为1。
日最高在线数
:每日每个时刻,同时进行手游操作的玩家数量的最高值。
上述几个指标中,下载数、激活数、注册数是预估手游公测首日可能带来的用户导入量的最重要评估依据。
日活跃登陆数,特别是公测首日的活跃登陆数,是评估手游发行效果的重要数据。
日最高在线数的承载能力是进行容量规划时需要满足的服务能力。
手游和端游运维的异同点
在推荐手游架构之前,我们需要深入了解手游运维和端游运维的异同点,以此分析为基础,再推导出合理的手游架构。
手游运维和端游运维的共同点和区别主要体现在下述四个方面:
1.操作系统层面
:
手游运维和端游运维,都需要对底层操作系统有较深的理解。区别是手游运维中使用Linux等开源操作系统的较普遍;端游运维根据不同的开发商可能Microsoft Windows和Linux都占有一定的比例。
2.联网方式:
在客户端和服务器端通信方式上,端游要求客户端强联网,一般使用在TCP协议之上实现私有协议。这样的好处是可以实现长连接和提高交互性;手游一般采用弱联网方式,使用HTTP协议进行通讯。
3.游戏周期:
手游生命周期较短,玩家涌入的时间比较集中。因此在架构设计时,需要充分考虑横向扩展的需求。
4.游戏是否分区:
手游开放公测时,一般不使用分区的方式,即所有玩家直接在一个大区里面进行游戏;而端游往往采用分区制,各个分区的玩家之间无数据交互。手游不分区的运营方式,使得服务器压力集中,对于运维要求更高。例如,如何解决数据库的集中压力问题及游戏服务器的压力分担问题等,都是运维人员需要考虑的。
目前的大部分手游在设计客户端和服务器端通信模型时,采用了HTTP协议。
使用HTTP协议的优点
使用HTTP协议的通信方式,有以下的优点:
1.HTTP协议是
成熟
的应用层协议,有丰富的客户端和服务器库函数加以复用,相对于完全自主开发基于TCP的通信协议,开发效率更高,可能遇到的bug更少。
2.使用HTTP协议更容易利用到现有成熟的
周边基础设施
,例如通用的负载均衡软件或者硬件等。
3.
易于实现压缩
。HTTP协议本身支持应用程序以外的由Web服务器提供的压缩功能,减少客户端和服务器端的数据传输量。
4.利用HTTP的Session和Cookie机制,易于实现
会话保持
机制。
5.
易于实现加密
。在HTTP层之上,直接使用SSL协议(HTTPS)即可实现关键信息的加密传输。
推荐的网络架构
基于上述分析,并结合盛大游戏在运维大型手游过程中的实践经验,我们推荐实施这样的网络手游架构:
在设计这样的手游架构时,我们重点考虑的几个方面如下:
负载均衡器
1.使用商业硬件实现。采用商业硬件的负载均衡可以最大程度的保障业务稳定性。
2.使用双机热备(HA),规避单点故障。
3.使用NAT模式。在手游架构中,实际负责游戏逻辑的Web服务器组和玩家之间的数据流量,一般不大。根据我们的经验,在5万人同时在线的手游,带宽使用800Mbs左右。使用NAT模式的负载均衡方案完全可以满足需求;同时对于Web服务器来说,不需要配置外网IP,节省IP费用及提高安全性。
双上联的链接方式
1.负载均衡器和核心交换机使用双上联,避免单一核心交换机故障导致的网络中断。
2.接入层交换机接入核心交换机时,采用双上联,并且做PortChannel,保障双链路可用的情况下,同时提高吞吐量。
Web服务组
配置高频CPU。作为手游逻辑的主要处理单元,Web服务器往往执行大量的CPU运算,比如玩家攻击能力计算、攻击效果计算等。
Memchached服务组
这个服务组的作用一般包括预加载配置项以及缓存数据库查询结果等。使用Memcached提供的高效内存缓存,可以提高响应速度。
数据库服务器组
在这样的架构设计中,体现手游运维对于高可用性、安全性、高性能的要求。在运维人员设计相关规划时,可以参考该架构进行实施。
如上文所说,手游相对于端游的生命周期更短,因而留给运维人员的准备时间也就更少。这就要求我们在短时间内对手游运营需要的各种资源规划到位,手游容量规划是一个必不可少的环节。
容量规划(Capacity Planning),是指在系统上线前或系统运营过程中,通过分析业务走向,对系统需要的各种网络、计算、存储资源进行提前规划和准备。目的是在这种业务变化时,系统承载能力可以随着要求变化进行灵活的应对。
多线机房的选择
为了用户在3G、4G、WIFI(中国电信接入、中国联通接入、中国移动固网接入)等终端网络切换时得到良好的游戏体验,手游服务器需要部署在多线机房,由此可以很好的满足用户多种方式上网的需求。
如下图所示是我们某个手游玩家按照ISP来源的分布情况:
图2 手游玩家ISP分布
由上图,也验证了我们必须把
服务器部署在多线机房,以满足不同接入的手游玩家。
多线机房的实现原理和特点如下:
1、多条光缆:
数据中心为适应不同用户对不同网络访问量的不同需求,采用多条高带宽(例如40G)光纤链路连接到Internet。