1 简介

对于一款手游来说,知道当前在线的玩家数量是十分重要的,可以做运营分析和掉人故障预警。

对于一款棋牌游戏,树状结构大致如下:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  房间是基本的采集节点,在服务端程序内部可以实时统计当前房间内的玩家数。

  玩法是一级汇总节点,将挂在自己节点下的房间人数加起来,就是这个玩法的人数

  麻将是二级汇总节点,将挂在自己节点下的玩法人数加起来,就是这个麻将的人数

  所以麻将的人数加起来,就是整个客户端的人数。

  棋牌手游在线人数监控系统 随笔

2 数据统计

首先考虑的是解耦的问题,服务端小伙伴将每个采集节点的数据实时汇报到中间件,然后监控系统过去取数据,这样彼此的开发上就是分离的。

2.1 数据获取

这里服务端提供一个web api,将所有采集节点的数据打包成一条json数据,格式如下,使用http get方法获取

{
    'timestamp':1554876185,'data':
    {
        'roomid_1': 12,
        'roomid_2': 34,
        'roomid_1': 34,
        ...
    }
}

  

2.2 数据存储

第一步要把所有roomid的数据采集并存储,这里参考zabbix的mysql表设计,每隔一个采集周期(假设1分钟),到web api获取一次数据并写入mysql。

CREATE TABLE `gameroom_sec` (
  `roomid` int(8) NOT NULL,
  `clock` int(11) NOT NULL,
  `num` int(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

  

第二步做玩法级别的数据汇总,对roomid的数据汇总计算后,写入以下表

CREATE TABLE `gameid_sec` (
  `gameid` int(8) NOT NULL,
  `clock` int(11) NOT NULL,
  `num` int(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

  

3 掉人预警

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄