把手游发布从 1.5 小时压到 30 分钟
目录
问题
《魔法战旗》海外服和《决胜巅峰》国服的一次常规发布要占掉 1.5 小时。发布包很大——游戏资源以几十 GB 计——几百个节点同时从中心镜像仓库拉取,仓库侧带宽直接被打满:节点越多,拉得越慢。
这是典型的中心化分发瓶颈:分发速度被仓库的出口带宽锁死,加机器只会让排队更长。
做法
引入 P2P 分发,消除带宽瓶颈
核心思路是不让所有节点都去找仓库要数据:
- SuperNode 维护分块的分布信息,负责调度和记账;
- 节点从最近的 peer 拉取分块——已经拉到分块的节点立刻变成后续节点的供给方;
- 每个分块做 SHA256 校验,防篡改、防损坏。
改完之后,分发速度不再随节点数递减——节点越多,供给方反而越多。仓库只承担最初的分块种子流量,带宽瓶颈消失。
分层构建镜像 + 预热
镜像分层重排:不常变的依赖层放前面,充分利用构建缓存;业务代码层放最后,让每次发布真正需要分发的增量最小。同时在发布前对目标节点做预热,避免发布时刻所有节点同时起拉。
顺带做的事:一键部署代理服务器
发布配合网络运营团队做地域网络质量评测时,我提供了一键部署代理服务器的方案,把这个评测能力直接交到他们手里,每次省 2 个人力。另外与供应商协作做了海外(东南亚)网络链路优化,改善了玩家延迟体验,同时优化机器备量,降低业务成本。
结果
- 整体发布耗时从 1.5 小时降到 30 分钟,发布效率提升 3 倍。
- 分发速度不再随节点数递减,后续扩节点不用再先担心仓库带宽。
- 代理服务器方案每次节省 2 人力。
事后看,值得记下来的
为什么不直接加大仓库带宽? 这是第一反应,但不划算:带宽扩容是持续成本,而且节点越多缺口越大,花钱只是把问题推迟。P2P 用的是节点之间的内网空闲带宽,成本几乎为零,且分发速度不随节点数递减。这个问题的本质不是「带宽小」,而是「中心化分发模型不可扩展」。
P2P 的代价也要想清楚。 SuperNode 是单点,需要做高可用;冷启动阶段没有 peer 可拉,要有回退仓库的机制;分块校验不能省,否则是用安全换速度。引入一种新的分发模型,等于引入一组新的失败模式——上线前得先把这些失败模式都过一遍。