限时活动实现
概述
限时活动是运营节奏的"强心针":节日活动、Boss 战、冲榜赛在限定时间内拉高活跃与收入。相比常驻玩法,限时活动的难点在动态开启/关闭(精确控时、不打扰线上)、高并发涌入(活动开服瞬间的流量冲击)、数据清理(活动结束后不留垃圾数据)。本文在活动框架之上,深入限时活动的具体实现。
一、典型限时活动
1.1 节日活动
节日活动特征:
与日历绑定(春节/周年庆/双旦)
组合式:签到 + 任务 + 折扣 + 限时池
时间长(数天到数周)
实现:
复用各系统(签到/任务/商城/抽卡)的活动期配置
活动框架统一管理生命周期
节日前预配置、开启瞬间全量生效1.2 Boss 战
Boss 战活动:
全服/公会集结打 Boss(定时开启)
贡献度 → 个人奖励 + 排名奖励
Boss 血量共享(跨玩家)
实现:
复用房间/对战系统做战斗
贡献度累加(服务端权威)
排名奖励走排行榜结算
注意:全服同战高频写 → 合并写 + 缓存1.3 冲榜赛
冲榜赛特征:
限期内积累分数(对局/充值/消耗)
名次奖励(前 N 名)
复用排行榜系统 + 活动框架
关键:
结束瞬间锁榜(提前锁定时段)
榜单冻结 → 结算 → 发奖(幂等)
防"最后一秒刷分"(锁榜提前 5 分钟)二、动态开启/关闭
2.1 启停实现
开启流程:
1. 运营后台配置活动 + 预约
2. 配置下发到游戏服(热加载)
3. 到点自动激活(状态切换)
4. 广播活动开启(公告 + 弹窗)
关闭流程:
1. 活动到点 / 运营手动关闭
2. 停止参与入口(隐藏/置灰)
3. 保留领取窗口(结束 + N 天)
4. 最终清理2.2 开启瞬间的高并发
开服瞬间流量冲击:
大量玩家同时进入活动入口
应对:
入口限流(Redis 令牌桶,按玩家限)
参与逻辑幂等(重复点击不重复扣)
排行榜写入异步合并(防 ZSet 热点)
活动公告广播分级(先轻后重)// 活动参与入口限流(每玩家每活动限次)
boolean allowed = rateLimiter.tryAcquire(
"act:" + activityId + ":" + playerId, 1, 1);三、活动数据清理
3.1 清理策略
清理时机:
领取窗口结束后
定期清理任务(每日/每周)
清理内容:
活动进度记录(player_activity_progress)
活动奖励记录(已领取的留档)
临时 Key(Redis 活动计数/榜单)
保留内容(审计):
奖励发放流水(永留)
排行榜结算快照(留存 N 天)清理实现:
按 activityId 批量删除(分批,防大事务)
Redis Key 设过期时间(到期自动清理)
清理后活动彻底下线,配置归档3.2 数据隔离
活动数据隔离原则:
所有活动数据带 activityId
查询/结算/清理都按 activityId 过滤
跨活动数据互不干扰
防止活动 A 的配置影响活动 B四、实现要点
核心接口:
startActivity(activityId)
stopActivity(activityId)
participate(playerId, activityId)
settleRankActivity(activityId) // 冲榜类结算
cleanActivityData(activityId) // 数据清理工程注意:
时间判定统一服务器时间
开启/关闭状态广播(公告 + 客户端刷新)
高并发入口限流 + 幂等
清理任务幂等(可重复执行)常见坑:
开服瞬间请求雪崩 → 限流 + 异步化
榜单最后时刻刷分 → 提前锁榜
清理误删发放记录 → 流水独立留档
跨时区节日时间错乱 → 统一 UTC 换算与其他系统衔接:
节日活动 → 签到/任务/商城/抽卡联动
Boss 战 → 对战/房间系统
冲榜赛 → 排行榜系统
公告推送 → 公告系统