Article

Unity WebGL 小游戏实战 10:发布运维与快速回滚(灰度、监控、止损)

路线阶段:Unity WebGL 小游戏实战第 10 章。
本章目标:把“能发布”升级为“可稳定运营发布”。

学习目标

完成本章后,你应该能做到:

  1. 设计版本发布流程(构建、验收、灰度、全量)。
  2. 建立上线后关键指标监控与告警阈值。
  3. 实现快速回滚机制,缩短事故恢复时间。
  4. 形成发布复盘机制,持续降低事故率。

发布流程分层

建议拆四阶段:

  1. Build:CI 产物生成 + 校验。
  2. Staging:测试环境全链路验证。
  3. Canary:灰度 5%~20%。
  4. Full:全量发布。

发布清单

每次发版必须确认:

  1. 构建产物 hash 与版本号一致。
  2. 关键关卡冒烟通过。
  3. 性能预算未超阈值。
  4. 埋点与归因事件完整。
  5. 回滚包可用。

版本元数据

{
  "version": "webgl-1.3.7",
  "build_time": "2017-03-21T10:00:00Z",
  "commit": "a1b2c3d",
  "config_version": {
    "stage": 12,
    "event": 5,
    "economy": 8
  }
}

灰度策略

按用户分桶:

  1. 基于 playerId hash % 100
  2. 先放 5%,观察 30 分钟。
  3. 指标正常再升至 20%,再全量。
public static class CanaryRule
{
    public static bool InCanary(string playerId, int percent)
    {
        if (percent <= 0) return false;
        if (percent >= 100) return true;

        var h = StableHash(playerId);
        return (h % 100) < percent;
    }

    private static int StableHash(string s)
    {
        unchecked
        {
            var h = 23;
            for (var i = 0; i < s.Length; i++)
            {
                h = h * 31 + s[i];
            }
            return h & 0x7fffffff;
        }
    }
}

上线监控指标

上线后 15 分钟内重点盯:

  1. 启动成功率
  2. 首关进入成功率
  3. JS 错误率
  4. 平均帧率与卡顿率
  5. 广告完播率
  6. 关键付费/奖励事件成功率

告警阈值示例

  1. 启动成功率 < 97% -> P1 告警
  2. 首关进入成功率下降 > 8% -> P1 告警
  3. JS 错误率 > 2% -> P1 告警
  4. 平均 FPS 下降 > 20% -> P2 告警

熔断与止损

当核心指标触发阈值:

  1. 自动暂停灰度提升。
  2. 关闭高风险远程活动开关。
  3. 停止新广告位策略。
  4. 准备回滚。

快速回滚机制

产物管理

  1. 保留最近 3 个稳定版本静态包。
  2. index.html 指向当前版本目录。
  3. 回滚时仅切换入口版本引用。

回滚脚本思路

# 示例流程
# 1) 标记 current -> bad
# 2) 切换 stable -> current
# 3) 清理 CDN 入口缓存

回滚验证

  1. 冷启动可进游戏。
  2. 核心关卡可正常完成。
  3. 活动和广告功能可安全降级。

事件与日志关联

每个会话附带:

  1. 客户端版本
  2. 配置版本
  3. 灰度分组
  4. 发布批次号

方便回答:某问题是否仅出现在某灰度批次。

发布后复盘模板

  1. 事故描述:何时发现、影响范围。
  2. 根因:代码、配置、依赖还是运维策略。
  3. 处置时间线:告警->定位->止损->恢复。
  4. 后续动作:监控补充、流程补丁、自动化用例。

与前面系统联动

  1. 配置管线:发布同时锁定配置版本。
  2. 埋点系统:提供上线效果与异常定位数据。
  3. 活动系统:灰度期间可单独开关。
  4. 性能系统:监控上线后性能退化。

WebGL 特殊注意

  1. CDN 缓存层级多,回滚要先控制入口文件缓存。
  2. 浏览器本地缓存可能持有旧 loader,需要版本戳处理。
  3. JS bridge 变更需与 Unity 版本同步发布。

验收清单

  1. 可执行一次完整灰度发布并记录指标。
  2. 故障注入后可在目标时间内完成回滚。
  3. 回滚后关键路径恢复正常。
  4. 复盘报告可追踪到可执行改进项。

常见坑

坑 1:只回滚代码不回滚配置

会出现“代码回退但异常仍在”。版本回滚需包含配置基线。

坑 2:灰度分桶规则不稳定

同一用户跨天进不同桶,数据污染严重。

坑 3:告警过晚

只看日级报表无法止损。上线必须分钟级监控。

本月作业

做一次“演练型发布”:

  1. 先灰度 10%,观察 30 分钟。
  2. 人工注入一个高错误配置并触发告警。
  3. 执行回滚并输出完整复盘报告。

下一章进入 Unity WebGL 小游戏实战 11:多人异步竞技(幽灵回放与排行榜挑战)。