一分钟一千万天猫双十一背后的互动游戏引擎
互动游戏的背景与挑战
- 背景:互联网经验表明高频场景增长潜力高于低频场景,互动游戏旨在将低频活动转向高频,提升用户参与度。
- 挑战:大促互动游戏本质是多人在线实时游戏与大型营销活动的结合,面临流量不确定、研发周期短、用户体验敏感、高QPS和高数据一致性等挑战。
核心实践:从不确定中找确定性
- 玩法不确定:通过领域驱动设计(DDD),抽象确定性的模型与框架(IGF),提升研发效率。
- 流程的确定性:大促游戏流程虽有章可循,但具体玩法不同。
- 功能的确定性:抽象共同功能模块,如实体、领域服务、聚合、聚合根、仓储等。
- 领域实体设计:从贫血模型转向充血模型,解决高流量下的IO放大问题。
- 领域服务扩展设计:针对变化的战斗逻辑,分离不变部分(执行流程和模式)和变化部分(独立逻辑和结果)。
- 鱼(性能)和熊掌(一致性)如何兼得:通过聚合根设计,实现高性能和强一致性。
- 聚合的力量:聚合根纬度的数据只需一次IO即可获取,业务逻辑在内存中完成,天然具备原子性。
- 聚合的问题:
- 数据大小:聚合数据过大导致性能劣化和带宽瓶颈,通过局部写入数据减小70%解决。
- 并发锁粒度:通过精控制锁范围提升用户体验。
- 迁移后的幂等保障:解决数据迁移时的幂等性问题,防止核心游戏资产超发。
核心实践:规则调控->观测预判->快速扩容
- 流量不确定:
- 通过游戏规则削峰:如2023天猫双11幻想岛大作战限时翻倍规则,用户心智驱动流量错峰。
- 观测预判系统水位:建立流量预估模型,通过装备数与QPS关系计算系统水位。
- 消除快速扩容的瓶颈:简化依赖、收敛调用链路,确保存储不成为瓶颈。
- 弹性扩缩容:
- 弹性策略:支持多种扩缩策略组合配置,如QPS、RT等指标组合弹性。
- 过载保护:集群和单机层面的自适应限流,确保业务稳定。
- 资源节省:闲时可节省50%以上容器资源。
总结与启示
- 核心观点:
- 理解下游需求,做好技术取舍。
- 打破常规,优化设计(如本地化VS服务化、IO密集VS计算密集、绝对一致VS最终一致、聚合存储VS分布存储)。
- 关键数据:
- 平均局部写入数据大小比整体写入数据减小70%。
- 闲时可节省50%以上容器资源。
- 研究结论:
- 领域驱动设计和聚合根设计能有效提升高QPS场景下的性能和一致性。
- 游戏规则和观测预判能优化流量管理,弹性扩缩容可降低运维成本。
- 技术取舍和打破常规是提升系统稳定性和效率的关键。