流量驾驭术:游戏首发必备的应对策略

389 阅读6分钟

任何一件事情在完成之前,都需要做一个checklist,从而检查错误,规避风险

对于游戏发行流程中,除了前期的渠道接入/测试等,首发上线是最后一公里的保障:

  1. 版本验收
  2. 渠道工作凑备
  3. 服务器策略
  4. 社区运营
  5. 其他内容(游戏公告/游戏资源等)

抛开业务层面来看,其实游戏的首发,对发行后端影响最深的,就是伴随而来的突发首发流量对系统的冲击。

我们先来分析下游戏首发时的流量情况: 不管是游戏首发,还是游戏活动,都会有三个关键词:

  1. 瞬时流量
  2. 热点接口
  3. 核心路径

首发/活动 的一般形态是集中在当天的某个时间节点(比如首发是早上的9/10点),这个时候玩家会打开游戏,完成登陆进服,给用户系统带来一个瞬间流量高峰。在首发这个场景之中,核心的路径,也就是核心的场景就是“激活-登陆-进服”,热点接口包括:激活、登陆、游戏进服

针对游戏发行的一个模型如下: image.png

首发前准备

应对首发带来的瞬时流量,最需要做的,就是机器容量的扩容。未上云之前,机器的单位更多是服务器的数量,上K8s之后,单位用容器来计算更加贴切,大致的公式:

机器/容器数量 = (峰值流量 x 冗余系数)/ 单机器/单容器容量

可以看出,怎么做好容量预估,需要留意两个指标:

  1. 流量预算:瞬时流量有多少,对应的峰值流量大概会是多大,首发相对简单一些,用户量跟运营推广的曝光导量计划有直接的关系,根据以往的转化率可以得出各个节点的数据情况,以此数据推算出各个节点的峰值流量
  2. 容量评估:每个机器/容器 能够承载的容量是多少,这个就需要前置对系统有做压力测试,知道每个节点单机容量的极限

针对这两个指标,我们主要做的事情就会汇总成两个:

  1. 分析当前场景下的流量模型,通过流量预算得到我们所需要承受的峰值流量以及作为扩容的依据,这个过程是自上而下的
  2. 制定符合场景的压测策略并执行、输出压测报告,得到每个服务、容器的容量极限,从而得到需要扩容的机器/容器数量,这个过程是自下而上的

image.png

流量预算

流量预算离不开对应业务的流量模型分析:

在首发场景中,用户首次下载游戏,需要对游戏资源做一定的初始化,然后通过SDK注册/登陆成功之后,进行选服进服操作,完成进入游戏的流程。

这一整个流程对应的业务核心路径的系统架构图整合如下,做个简单的分析描述:

  1. 下载并打开游戏,SDK初始化,做一定的配置初始化
  2. 在SDK初始化完成之后,因为是刚下载的游戏,还会有一个比较重要的中间流程:游戏资源加载,虽然不涉及到API的调用,但是也实实在在影响后续的游戏运行
  3. 初始化工作完成之后,玩家开始与SDK做交互,国内海外用户习惯不同,会有不同登入方式,但是都是这两个行为:register 、login ,当然可能会涉及到一些非核心模块的接口请求,包括但不仅限于 绑定登陆方式、绑定手机/邮箱等,但是不是必须的,当然这些入口本身是已经有开关控制的,极端情况下也能提供降级策略
  4. SDK登陆完成之后,玩家可以开始选服进入游戏,之后会更多涉及到与游戏本身交互的过程

image.png

上面梳理了游戏首发的不同子场景下的接口调用情况以及调用顺序,不同于其他电商 / 社交场景,在大多数情况下,子场景的关系会是: 激活 ≈ 登陆(三方+自营) ≈ CP交互 ≈ 1/2 数据上报 (可以通过一些更准确的分析工具/代码,梳理接口依赖的服务以及服务调用次数:github.com/dianping/ca…

image.png

有了上面的数据,就可以输出对应的调用模型了,可以分为服务 / 接口两个维度:

接口调用模型(基于架构,调用次数作为权重的图)/ 服务调用模型

服务API访问次数
业务网关1k
A服务/aa300
日志上报/report400
B服务/b1200
/b2200
/b3200

缓存/DB 调用模型

当进来的峰值流量为1,此时的流量构成如下:

cache访问次数
cache访问次数
cache12k
cache23k
数据库访问次数
database13k

扩容计划汇总

此时,结合运营提供的导量数据分析,可以推算出首发场景下每一个应用节点可能会达到的最高流量。

最终能提供给到运维的扩容计划表会是这个样子:

场景服务单机/Pod容量峰值流量需要提供的集群容量当前机器/Pod数量需要扩容的机器/Pod数量

容量评估

要知道在当前流量下,系统怎么更精准进行扩容,那就离不开对各个应用 / 服务进行容量评估 —- 压力测试,以此来获取单机/ 单Pod的容量

压测之前,有几个点你需要知道:

  1. 压测策略

    1. 压测目的 :与常规压测不同的是,特殊场景下进行压测的目的,是找到系统针对混合场景的最大处理能力,但是在常规压测情况中,主要是查看系统各个指标是否符合预期以及在高并发场景下功能/数据是否正确
    2. 压测环境:选择一个符合场景的压测环境很重要,但是很多情况下,我们本身的测试用的BETA 环境 、预发布PRE环境或者是线上PROD环境,都或多或少存在不适用的情况,比如测试环境跟线上环境所依赖的服务差异,预发布环境是比较理想的,但是压测产生的数据会影响数据分析,线上环境是用户使用的环境,存在风险。
  2. 压测过程

    1. 压测方法
    2. 压测场景:场景是很重要的,需要将首发场景各个接口/服务按照实际发生的比例进行组合捆绑,才能得到首发场景下的相对真实的数据表现
    3. 压测数据:压测的数据来源可以是利用TCPDump去做流量的重放,或者根据线上的nginx access log 来做日志回放,甚至可以是相关同事提前编写符合要求的数据
  3. 压测结论

    1. 数据采集
    2. 监控告警

image.png