当用户击败AI后,可以获得相应关卡的奖励(一般是斗地主的道具或豆子钻石),吸引用户在其他对局中使用,进而拉长用户的游戏时长
- 牌局保留逻辑
玩家的牌局缓存会保存一定时长,中途退出后,牌局不会被自动托管,现场被保存下来,用户当天再次挑战会从上次结束地方继续,除非用户手动点击重开或本局进入到结算。
- 牌局选取与更新原则
要求用户短时间(30天)内不能遇到重复的牌局;
半夜十二点玩游戏用户很多,因此将每日关卡改到凌晨5点刷新
▐功能上的挑战- 牌局自动生成:这种大量残局不可能由人工生产,需要训练生成,并且残局要求牌面实力相当,用户存在少量必赢路径(1~2条),尤其是大规模高质量残局生成难度大
- 用户请求当日关卡如何做到不重复,并且有一定容错能力
- 牌局信息存储的选型和可扩展设计,并尽量减少缓存占用
- 高度依赖稳定的AI出牌,尤其是较高的调用量要保证高可用高性能:a
- .高准确率:准确率100%;当用户走必赢路径时能合理出牌;当用户走错时AI能100%反*;b
- .高性能:AI出牌低延迟;c.兜底能力:当AI不可用时,服务端要有兜底的能力,不能阻塞用户
- 设计时考虑投放和AB测试能力,以及加入多种降级和紧急下线的开关与兜底工作
- 数据表的设计,数据分析能力,监控报警,数据看板以及可灰度、可观测、可回滚的能力等等
技术方案及思考
▐技术模块拆解1、用户触发活动 2、获得今日关卡 3、用户和AI对局 4、结算和发奖
▐系统链路图▐技术模块拆解- 牌局数据存储
一般的存储方式:
- 单机内存、分布式数据库、分布式缓存
由于牌局更新频繁,而且在线玩家越多,并发越大,对RT和性能就越敏感,而牌局的具体过程系统不需要详细记录下来,也不需要使用永久性的存储方式。综合考虑之后基于Redis的缓存是当前比较合适的方式。
残局场景涉及到两个缓存信息:
一、十局牌局信息同时也作为触发标志
存储包括挑战进度,十局残局对应的信息(gameId;用户手牌;AI手牌)
二、用户当日正在挑战局的牌局信息