精通手游运维的架构体系

  通过对当前Memcached的请求情况分析,可以有效的判断是热点数据的分别是否均衡。

  另外一个需要注意的事项是Memcached的启动参数,默认情况下,它支持的并发连接数是1024,如下所示:

  memcached -h

  -c max simultaneous connections (default: 1024)

  在上线前,务必要提高该值。在我们的实践中,曾经发生过因为前端服务器过于繁忙导致连接数用光的情况。Memcached当前的连接数情况,使用如下命令获取:

  [[email protected] ~]# telnet 127.0.0.1 11211

  Trying 127.0.0.1...

  Connected to 127.0.0.1.

  Escape character is '^]'.

  stats

  STAT pid 23341

  STAT curr_connections 2000 #当前连接数

  数据库承载能力规划

  数据库存储了手游中的持久化数据,提高数据库的响应效率对提高手游体验起到关键作用。进行数据库容量规划时,需要严格按照以下的规则进行:

  1、数据库配置参数、表结构和SQL语句评估。

  进行数据库评估的目的是分析数据库软件配置参数与硬件能力是否匹配、分析表设计与SQL语句的效率关系。

  以MySQL为例,在数据库配置参数方面,主要考虑增加innodb_buffer_pool_size为系统可用内存的60%。分析数据库表结构设计时,对主键、索引是否完整、有冗余、表引擎的一致性、字段类型的高效性进行分析。SQL语句评估时,考虑对多表联合查询、limit、复杂查询语句进行优化。在无法直接进行SQL语句优化的条件下,可以考虑通过业务逻辑的调整来减小数据库压力(这一步可能涉及到游戏策划、产品经理的沟通,一般比较难)。

  2、 数据库分库分表设计。 对于访问频繁的数据量巨大的表,如用户注册表,必须采用拆分的方法,使其分布在不同的数据库服务器上。对于log库,由于其对于游戏来说,是非核心数据,也需要单独拆分,以缓解核心数据库的压力。

  3、 使用数据库读写分离技术。 数据库读写分离技术,在数据库分库分表的基础上,又进行了一层压力分解。在MySQL中,通过配置主从复制(Replication)可以获得以下的好处:

  在从库上进行读取操作,可以进一步减少主库的读压力。

  在专用的从库上进行数据备份时,不影响在线业务。

  在专用的从库上进行数据分析和挖掘时,不影响在线业务。

  4、 使用SSD提高随机读写iops。 手游的大区制,使得数据库的压力被集中起来,同时不同等级的玩家所具有的不同的游戏行为也加剧了对数据库的压力。使用SSD可以最大限度的提高服务器的iops,以应对这种读写压力。

  5、 存储容量规划。 在数据库中,一般会记录较长时间的玩家游戏日志,这一部分数据随着运营时间的增加,对存储容量要求越来越多。评估方法是根据内测期间玩家数量和日志数据量计算出,每日每玩家大概产生的数据量。所需要的存储容量为每日每玩家大概产生的数据量乘以保留天数再乘以每日预估玩家数量。

  官网论坛访问能力规划

  在手游运维时,除了考虑到手游系统之外,还应该考虑官网、论坛等的访问能力。

  在游戏维护期间,玩家往往会转向到官网和论坛,此时会产生大量的并发请求。官网和论坛基本都是基于Web的服务,考虑容量规划时,可以参照本文Web服务器承载能力规划的内容。

  人数曲线接入

  人数曲线实时地反映了在线玩家的情况,也同时能够反映游戏系统运行状态。

  在设计人数曲线接入时,我们使用了基于Web请求日志分析的方式。人数曲线的接入步骤如下:

  在Web服务器上记录玩家客户端的Cookie字符串。

  分析5分钟内的Cookie,去除重复值后的数量作为当前在线人数。

  统计数据写入人数数据库。

 

  图表展示。