一分钟一千万 天猫双十一背后的互动游戏引擎 范淑宾(范导)淘天集团高级技术专家 www.top100summit.com 范淑宾(花名:范导)高级技术专家 讲师简介 “ 阿里17年专注各个核心系统技术研发: •参与Alibaba国际站会员系统、小二工作台的设计与维护; •参与Aliexpress速卖通联盟平台建设,覆盖超40%的平台订单; •淘天集团互动基础平台负责人、天猫双十一互动游戏架构师,完成整个互动基础平台从0到1的建设,稳定支撑集团多个BU的上 百个互动类业务场景。 ” www.top100summit.com 目录 •互动游戏的背景与挑战 •核心实践:从不确定中找确定性 •核心实践:规则调控->观测预判->快速扩容 •核心实践:降本提效 •天猫双11幻想岛总动员成果展示 •总结与启示 www.top100summit.com 亮点介绍 •领域驱动设计(DDD),在超高QPS、超大数据量业务场景下的实践。 •游戏模式、玩法模型的抽象实践。 •“反微服务化”,收敛资源、减少依赖,从IO密集转向计算密集。 •充分利用存储特性实现高并发、强一致兼得,可灵活扩展和无感替换的设计。 www.top100summit.com 互动游戏的背景与挑战 互动?游戏?互动游戏? “互联网经验告诉我们,高频场景的增长潜力始终高于低频场景,如何从低频转向高频,是所有经营者竭尽全力地追求。” ——雷军《小米创业思考》 低频 高频 天猫双11大促互动游戏 购物 游戏 吃饭 优惠券 201920212023 游戏行为 虚拟资产平台权益 www.top100summit.com 签到 做任务、升级、拉人助力积分、等级红包、卡卷 www.top100summit.com 大促互动游戏的挑战 大促互动游戏本质:多人在线实时游戏和大型营销活动的结合体 流量不确定 每次都是全新玩法,用户行为很难预测。不同玩法导致不同的流量形态,没有一个稳定可预估的流量模型。 研发周期短 往往活动前一段时间才确定具体玩法,留给产品研发的时间比较短,导致有的事情无法做得很精细化。 用户体验敏感 全民大促前的暖场,内部和外部的关注度很高,游戏玩法、响应的及时性都与用户利益相关,传统游戏里的问题都会在这里放大。 高QPS和高数据一致性 游戏和营销的结合体,用户游戏数据往往与权益相关,游戏数据不可丢失,这一点与传统游戏区别很大,但QPS极高。 www.top100summit.com 破题思路 玩法不确定 研发 周期短 依赖 范围广 远程IO 频繁 并发锁 粒度粗 沉淀领域模型,建设可扩展的游戏引擎 流量不确定 依赖 范围广 无法 准确预估 无法 快速扩容 资源收敛,建设可观测、可快速扩容能力 成本高 波峰 波谷 总是为波峰 准备容器 建设容器动态扩缩容能力 www.top100summit.com 从不确定中找确定性 ——玩法不确定 www.top100summit.com 核心实践——确定性的抽象 从不确定的玩法中抽象确定的东西,沉淀成可复用的模型与框架(IGF),可极大提升研发效率 流程的确定性——虽然具体玩法不同,但大促游戏的流程是有章可循的 组队 匹配 PK 结算 生成下个场次 奖励瓜分 功能的确定性——虽然具体玩法不同,但仍有共同的功能模块 战斗能力 …… 升级能量站 掷骰子占地 拉人助力 道具能力 …… 使用道具 扣减道具 获得道具 组织能力 房间 匹配 战队 玩家 资产能力 红包 积分 道具能力 战斗能力 用户视角 组织能力 资产能力 平台视角 基础能力 异步消息 实时通知 KV型存储 关系型存储 序列化协议 基础能力 www.top100summit.com 核心实践——面向领域设计 用户视角 战斗能力 平台视角 道具能力资产能力组织能力 KV型存储(Redis等) 自研协议 MessagePack 长连接通道 实体、领域服务: 面向实体及领域服务研发,屏蔽底层数据存取、异常流处理等细节,专注业务逻辑实现。 聚合、聚合根: 核心游戏数据聚合,高QPS下数据强一制;系统链路收敛,系统扩缩容更灵活;大幅度减少IO,提升性能与稳定性。 仓储: 多模式存储业务无感按需切换;多分区存储集群,存储上限成倍预留;精控制数据并发锁范围,提升用户体验。 www.top100summit.com 核心实践——领域实体设计 //扣资产或加等级失败了怎么办??? //高流量下的IO放大怎么办??? 贫血模型VS充血模型 Handler怎么设计??? 2021双十一喵糖总动能量站升级场景示例伪代码 核心实践——领域服务扩展设计 游戏战斗逻辑中 不变的部分:每个游戏事件都有相同的执行流程和模式。变化的部分:每个游戏事件都有独立的执行逻辑和结果。 变化的战斗逻辑 面向领域的喵糖总动员PK处理逻辑 不变的战斗流程 (使用道具) www.top100summit.com 实体查询 道具检查 道具扣减 道具效果处理 保存房间实体 更新房间地图信息 更新战队兵力道具 扣减玩家骰子道具 检查玩家骰子道具 获取房间实体 游戏状态更新 新增道具 新增奖励 保存实体 2021双十一喵糖总动员PK示例伪代码 核心实践——鱼(性能)和熊掌(一致性)如何兼得 2021双十一喵糖总动员——投骰子处理流程面向领域的喵糖投骰子处理流程 保存房间实体 更新房间地图信息 更新战队兵力道具 扣减玩家骰子道具 检查玩家骰子道具 获取房间实体 解锁房间 保存房间 游戏逻辑计算 (兵力、地块状态) 扣除用户骰子 (分布式)锁房间 查询房间 查询队伍 查询玩家 核心策略:面向领域、减少IO、数据聚合 业务研发花费大量精力做服务、存储的编排 最少8次远程IO (红框部分) 只需2次存储IO (红框部分) 纯内存操作专注游戏逻辑 www.top100summit.com 红框为产生IO的操作 核心实践——聚合的力量 如何识别聚合根? 如果一个聚合只有一个实体,那么这个实体就是聚合根;如果有多个实体,那么我们可以思考聚合内哪个对象有独立存在的意义并且可以和外部直接进行交互。 玩家 战队 玩家 加队 匹配 房间 玩家 战队 玩家 大促PK游戏模型聚合根及迁移时机 极简IO: 单人阶段聚合根预组队阶段聚合根PK阶段聚合根 www.top100summit.com 聚合根纬度的数据,理论上只需要一次IO即可取得整个PK房间中所有战队及所有玩家的数据;同时,也只需要一次IO便可将所有玩家、战队的数据变更写回到存储中去。 高性能: 所有对聚合根实体的业务逻辑操作,全部在内存中完成,实现战斗逻辑无需关注存储细节,高效、高性能。 原子性: 聚合根数据写入单次可完成,天然具备原子性,多实体数据变化不存在数据不一致问题。 核心实践——聚合的问题1 聚合根的问题——数据大小 互动大促游戏以多人PK模式为主,一个房间的玩家数大多在2~20个之间,中间有着10倍的差距,聚合后的数据大小对存储运行时性能有很大的影响。 性能劣化:无论是关系型存储还是KV型存储,性能最优的单行或单KEY数据大小都会有建议大小。 带宽瓶颈:带宽是存储中比较昂贵和有限的资源,从单例看带宽资源非常有限,过大的数据体积会高QPS下会导致带宽打满。 JSON序列化结果(107B) 定制序列化结果(52B) 先声明再序列化 定制序列化协议优化 每个实体结构声明全局唯一 数据大小减小51% Entity实体结构声明 www.top100summit.com www.top100summit.com 核心实践——聚合的问题2 聚合根的问题——并发锁粒度大 玩家数据聚合在房间中后,为了保证个人数据的修改不会产生相互覆盖的问题,那么势必要对整体房间加锁。 整体读取 局部更新 (子KEY版本锁) 房间Redis多子KEY存储(HASH)结构 通过这种存储设计,平均的局部写入数据大小比整体写入数据大小减小超过70%。 核心实践——聚合的问题3 聚合根的问题——迁移后的幂等保障 玩家和战队数据随着匹配结算不断迁移存储实例,原有的幂等数据无法随迁,幂等数据确实会导致核心游戏资产超发问题,严重可产生资损。 实体幂等更新检查分布式幂等 生成批量更新参数 (数据Field,Value:xxx,Version:n) (幂等Field,value:“”,Version:99) 不存在 存在 返回幂等错误 查询幂等Field 版本过期 批量带版本更新 超时异常 存在 查询幂等Field 返回保存成功 不存在存在 成功 记录分布式幂等 返回幂等错误 非超时异常 不存在 www.top100summit.com 返回锁冲突错误 返回可重试异常 删除幂等Field 结束 跨存储的通用幂等保障方案(以Redis存储为例) www.top100summit.com 规则调控->观测预判->快速扩容 ——流量不确定 www.top100summit.com 核心实践——通过游戏规则削峰 运营&产品 按照游戏的方式运作 流量错峰 从最开始的运营策略要考虑流量应对,完全没必要全网所有用户都集中同一个场次同一个时间段,这样只会造成人为的高峰。 2023天猫双11幻想岛大作战限时翻倍规则 用户心智:两小时内派出的仔仔数量翻倍。 •时间约束:9:00~19:00 •触发时机:队员上线随机触发 •触发次数:每天每队只有一次机会 •持续时间:2小时 公平刺激趣味 建立流量预估模型 建立装备数与QPS之间的关系计算模型,通过实时计算技术结合历史数据的对比,预判系统水位。 研发 不能只关注功能逻辑 核心实践——观测预判系统水位 QPS= 剩余总兵力 X消耗比例 www.top100summit.com 2023天猫双11幻想岛大作战兵力大盘 平均出兵个数 X持续时间 核心实践——消除快速扩容的瓶颈 简化依赖、调用链路收敛后,容器的快速扩容已经不是问题。但还需要保证强依赖的存储不会成为瓶颈。 玩家域服务 战队域服务 房间域服务 第一层存储隔离 玩家实体 第二层存储隔离 聚合根迁移业务无感 房间实体 聚合根路由服务 存储集群路由(EntityId%4) 无业务语义模式:提升存储的QPS和空间天花板 有业务语义模式:游戏分区、分级存储能力 www.top100summit.com 战队实体 存储集群1 存储集群2 存储集群3 存储集群4 2023天猫双11幻想岛大作战仓储设计 可灵活配置存储集群数量,为双11预留千万级QPS和空间扩容空间 www.top100summit.com 弹性扩缩容 ——运维成本高 www.top100summit.com 核心实践——弹性扩缩容 大促玩法周期性明显、峰谷差异巨大 通过弹性扩缩容,大促互动游戏在闲时可节省50%以上的容器资源。 过载保护 •集群层面:对于部分需要配置集群维度不能随着机器数变化而影响到总限流值的场景,GAIA提供了机器数改变时自动调整单机限流值,从而让总限流值保持不变的能力。 •单机层面:容器层面提供自适应限流,在CPU瞬时超过固定值后会自动触发限流(400-600毫秒作出响应)。 弹性策略 •按照不同业务场景支持多种扩缩策略的组合配置。 •支持QPS,RT等业务指标的组合弹性。 •支持扩缩容步长来控制单次扩缩容对业务的抖动。 TIPS:GAIA是淘天自研的一站式函数研发平台(FAAS)。 成果展示 用户 技术业务 体验提升 幸福感提升 成本下降 180万+在线5000万+战队单机吞吐量提升300% www.top100summit.com 200万+QPS 平均6ms