游戏中的abtest功能实现,演进与复盘

本文介绍了游戏开发中abtest的实现过程,从最初的简单ab池划分,到支持精细化运营的演进。在初期,abtest通过配置表设计实现了玩家属性划分和业务协同,但在配置理解难度和测试成本上存在问题。随后的配置拆分解决了运营工具配置需求,但也增加了性能开销和业务侵入性。随着需求发展,abtest逐渐演化为精细化运营工具,引入了玩家命中记录和时间维度的统计。在架构重构后,abtest模块化,降低了对业务的影响并提升了处理效率。然而,实施中遇到了玩家流量分层、命中记录管理等问题,需要不断优化解决。
摘要由CSDN通过智能技术生成

前言

abtest是一种很常见的,利用真实用户来测试的方法。在游戏中,可以用abtest来测试不同的活动,不同的商品,不同的定价,不同的匹配策略等等的用户接受程度。

初版:简单的ab池划分与细分

在接到第一版需求到时候,需求相当简单,策划/运营想要一个可以做abtest的工具,支持细分和多概率组。
基于这个需求,第一版本的abtest需要做三件事情,将玩家的属性统计出来;将玩家按不同的属性进行划分,进而按照不同的概率进行分池;不同业务可以配置在同一个abtest组里面,比如说玩家看到的公告需要和自己看到的商品协同。
在这一阶段:最终实现的abtest方案如下:

  1. 配置表设计
    由于需要将不同的业务可以配置到同一个组里面,abtest的配置表被设计成了三张表分离:分别是业务表,abtest表和细分表。这是出于一下考虑:
    a. abtest需要有做到不同业务可以协同测试。所以abtest表独立出来,对开发来说更加直观。
    b. abtest中有组的概念。而同一组中,对应的细分条件是一致的,也就是说,abtest中,相同的组会共用同一个细分条件,同时,不同的组,也有可能共用同一个细分条件。那么将细分纬度再抽离出一个表,是符合程序逻辑的。
    c. 在流程设计中,登陆的时候需要根据abtest的细分条件来生成玩家的标签,因此将细分条件抽出来成表,方便程序实现。
  2. 游戏测按照策划的需求,在不同的模块统计用户的行为。在玩家登出的时候进行汇总,形成玩家的属性。
    由于游戏中,玩家的不同属性是分表存储,不同行为会到不同的模块进行处理。如果每次行为都汇总到某一个特定的表或者模块中,则会将这个表/模块变成热点。举个例子,在游戏中,活动模块会接收玩家的各个事件,比如说登陆,对局结算记录,购买,获得,使用物品等事件。那么该模块在整个游戏周边系统就会就会成为一个热点,所有的玩家行为都有可能对该模块发送请求。为了避免abtest也出现这样的情况(毕竟abtest在游戏中不应该成为一个高性能开销的事情),所以采取的方案就是在不同的模块分开统计用户的行为,降低内网的请求量;在登出的时候做统一处理。
  3. 在玩家登陆的时候,依照配置表和玩家的属性,生成玩家的标签,作为玩家的基础属性,附带在玩家的请求包中。
    在初版的设计中,考虑的最多的就是降低abtest对现有业务的影响,比如说拉取db所造成的影响。如果是在玩家拉取具体业务的时候进行判断,则需要额外拉取db表,对业务来说会增加时延,同时对业务的改造会比较大。所以考虑的就是将abtest细分条件转为玩家的标签。各个业务只需要判断一下玩家的标签即可。
  4. 在玩家获取商店,活动,公告等配置的时候,根据玩家标签和概率,来判断玩家是否命中测试。
    在玩家拉取具体业
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值