FarmVille(开心农场)DAU增长下背后的原因
运营眼中:
3.FPS游戏统计各道具的平衡性,以及关卡的难度设定
收集用户行为、并优化游戏的整个过程
为了拿到以上结果,游戏团队需要做什么事情?我们可以大致拆分成三个过程:
在游戏开发阶段埋点
在各个渠道收集数据
对数据进行多维度的分析,拿到结果采取行动
在整个过程中串起用户端和服务端最重要的点就是数据。
游戏中的两种状态:切片(Snapshot)状态和增量日志
为了更好理解日志和游戏的关系,让我们来看下什么是日志数据,和游戏之间是什么关系:
游戏在用户端看起来是两个行为的交替:行动、绘图。当移动鼠标、点击键盘时我们改变了主人公位置和状态,之后渲染引擎进行了绘图。我们可以在一个时间点上对游戏的状态进行采样,例如10:06分,游戏中所有主人公的位置、金钱和手持武器如下,状态反映一个时间点下系统的全貌。
日志是状态与状态之间的变化量。例如10点-10点06分这个时间上用户做了哪些操作?日志相比状态最大的好处是,能够记录整个细节。
除了刚才提到的帮助运营、渠道更高效地运作,日志对游戏还有什么作用?
帮助用户:
定位异常:
广告;
日志可以帮助运维
日志处理面临的多种挑战
日志有那么多的作用,那处理起来有哪些挑战呢?
第一个挑战和产生相关,游戏涉及到方方面面的合作。例如涉及游戏发行商、移动端、网页端、服务器端等。因此要从多个维度、多个渠道来收集日志,对于每一种日志有独特处理方法:例如为了分析渠道我们需要在网页埋点;为了拿到用户的行为,我们需要从移动设备、服务端等记录玩家轨迹;为了分析服务的稳定性,我们需要观察请求的延时等特点。
在这里我们需要使用一个统一的数据模型,支持各个渠道的数据通道来完成统一大事。
第二个挑战来自规模、性能和稳定性:举一个直观例子,假设每秒钟我们需要收集一个用户1KB数据,在100W玩家同时在线的情况下,这个数字就是100MB/S处理流量,这个量挑战不小。如何在数据规模增长的情况下,保持性能的稳定性,是工程师需要关注的。
第三个挑战来自于需求,在之前我们提到了游戏团队中不同人对于需求的产出是不同的。比如对访问日志,运营的需求是统计活跃人数比例,运维关系的是延迟和访问状态,开发关心的点是哪些资源是热点,需要进行优化。因此我们需要对一份数据,支持多种处理、统计的方法。
阿里云日志服务
我们来看看阿里云日志服务(LOG)怎么帮助解决这类问题。在开放在阿里云官网之前,日志服务已经在阿里巴巴内部经历了3年多的历练,达到行业领先的水平。在游戏日志分析的场景中也能够发挥巨大作用。
日志服务主要提供三个主要功能:
LogHub是日志服务最核心的功能,他将日志源与日志消费者通过统一数据模型串联起来。最大好处是把数据管道化,标准化。这根管道是大容量、高可靠、并且弹性伸缩的,用户不用去关心数据量、如何接上等问题,就能直接使用。LogHub有10+种语言SDK,提供Agent并支持第三方Agent、Syslog,WebTracking等协议。在消费端对接了10+种下游,包括开源界非常火的Spark、Storm等流处理框架。
LogShipper提供了LogHub管道数据落地到存储的功能。目前与OSS、ODPS、OTS等海量存储系统打通。可以通过MapReduce、Hive等方式进行数据处理与分析。
LogSearch是一个附加功能,可以选择将LogHub中数据索引并查询,例如我们对App、Error等日志进行索引,可以在发生问题时进行快速定位于查询。在阿里内部我们将关键日志从几千台机器中集中式收集并索引,达到百TB规模。
LogHub(日志通道)与日志基础概念
日志是一个单调递增,完全按照时间排序的一系列记录。看起来如下:
日志顺序由“时间”来确定,从图上可以看到日志从右到左的时间顺序,新产生的事件被记录,过去的事件渐渐远去,但它记录了什么时间发生了什么事情,这无论对于计算机、人类、还是整个世界而言,是认知与推理的基础。
日志通道(LogHub)基本概念和数据模型如下:
日志(Log):日志为日志服务中处理的最小数据单元。日志服务采用半结构数据模式定义一条日志,包含时间字段以及一个Json组成的KeyValue Pair
日志组(LogGroup):一组日志的集合,写入与读取的基本单位。日志组限制为:最大4096行日志,或10MB空间。
分区(Shard):每个日志库下读写基本单元,用户可以指定每个日志库下分区数目。每个分区能承载一定量的服务能力
日志库(Logstore):日志库为日志服务中日志数据的收集、存储和查询单元。每个日志库隶属于一个项目,且每个项目可以创建多个日志库。用户可以根据实际需求为某一个项目生成多个日志库,其中常见的做法是为一个应用中的每类日志创建一个独立的日志库。例如,假如用户有一个“big-game”游戏,服务器上有三种日志:操作日志(operation_log),应用程序日志(application_log)以及访问日志(access_log),用户可以首先创建名为“big-game”的项目,然后在该项目下面为这三种日志创建三个日志库,分别用于它们的收集、存储和查询。
项目(Project):项目为日志服务中的基本管理单元,用于资源隔离和控制。用户可以通过项目来管理某一个应用的所有日志及相关的日志源。
LogHub有哪些优势?
稳定、可靠、高性能 在阿里集团锤炼多年,经受过PB/Day 级流量考验。特别是客户端的性能和资源消耗,是开源软件的10倍以上。
弹性伸缩:当因为业务变化引起数据量变化时,可以从容应对。
丰富的上下游
除LogHub外,简单提下LogShipper和LogSearch功能
LogShipper是LogHub产品附加功能,支持将实时日志数据投递至存储类服务(OSS,ODPS, OTS),以进行离线分析与计算。最大的好处是0成本、便捷、可靠、高吞吐率。
LogSearch(原SLS) 能够实时索引日志数据,规模可达一天百TB水平,提供便捷、海量的查询能力。它主要弥补LogHub实时性与LogShipper投递数仓之间的空缺,既提供一种轻量级的准实时查询能力。
例如在游戏开发过程中我们会有非常多的系统,分布在不同的机器上。我们只需要把这些系统日志收集、索引起来。通过搜索用户的ID、状态等就能够快速定位到用户的行为特征。
在数字世界乘风破浪
最后,让我们来看一下游戏中日志方案的一个典型架构,以及总结下游戏场景日志分析的过程: