合服前必须完成数据校验与容量评估,否则轻则角色数据错乱,重则服务器直接宕机。这项操作相当于把两个运营多年的虚拟社区合并成一个,玩家的资产、社交关系、排行榜全都要平移到新环境,本文给出可直接落地的校验清单和容量测算方法。
为什么合服爆率居高不下?先看数据迁移的风险点
游戏行业里流传着一句话:合服这事,十次有八次出问题,剩下的两次正在出问题的路上,这话虽然夸张,但确实反映出合服操作的高风险性,风险主要集中在一处数据迁移过程中的一致性、完整性和归属冲突。
举个例子,A服和B服各有一个玩家叫“荣耀战神”,合服后id冲突怎么办?A服公会“王者之巅”和B服公会“王者之巅”重名,保留哪个?更麻烦的是,两个服的拍卖行挂单、邮件附件、公会仓库这些带有时间戳和状态位的冷数据,稍有迁移顺序错误就会出现道具凭空消失或被复制。
据行业共识,多数合服事故发生在“校验环节缺失”的服务器上,换句话说,问题不是合服本身难,而是没做或做错了前三步。
合服前数据校验完整操作步骤
合服是拆家重组的精细活,每一步都要留痕,下面是标准的五步校验法,建议按顺序执行,每一步都要导出日志存档。
第一步:停服前全量备份与校验快照
合服前必然要停服,停服前必须完成一次全量备份,仅此还不够,要做双份备份,存储在不同物理机器上。
具体操作路径如下:
- 登录各源服务器数据库,执行
mysqldump或xtrabackup生成全量备份文件 - 同时导出redis、mongo等非关系型数据库的最新快照
- 对备份文件计算MD5或SHA256校验值,与源库实时计算比对,确认备份过程中无数据写入遗漏
- 将校验值存放到独立配置中心的记录表中,供后续比对
注意一个细节:停服前最后半小时内产生的数据,比如玩家正在进行的充值回调、拍卖行竞拍出价,最容易丢失。业内专家指出,多数数据不一致都发生在停服窗口期的“尾流数据”上,解决办法是停服后额外等待5到10分钟再开始备份,给异步队列一个清空的时间。
第二步:关键数据表逐列比对一致性
备份确认无误后,开始逻辑层面的数据校验,重点放在三个方向:
- 账号表:检查uid唯一性、手机号绑定数、第三方openid状态
- 角色表:等级、vip等级、货币余额(金币、钻石、绑定点券)是否有负值
- 资产表:背包物品数量下限为正、装备强化等级不超上限、技能等级合法
这一步不用逐行人工看,写一个SQL校验脚本批量执行,行业内操作用的是类似下面的思路:
SELECT player_id, COUNT() FROM bag_items GROUP BY player_id HAVING COUNT() > 5000; -- 超上限的账号异常,标记为待处理
再比如检查跨服唯一键冲突:
SELECT role_name, COUNT() FROM player_role GROUP BY role_name HAVING COUNT() > 1;
查询结果不为空,说明两服存在重名角色,需要提前生成重命名补偿方案。
第三步:跨服唯一键与社交关系冲突预检
这是整个合服校验中最痛的一环,合服的本质是将两套独立运行的数据空间并到一起,所有“唯一索引”都要重新核对。
需要预检的冲突点包括:
- 角色名唯一性(默认规则:保留开服较早角色名字,晚开服角色自动改名并邮件补偿改名卡)
- 公会名唯一性(规则通常类似角色名处理)
- 好友关系、师徒关系、婚姻系统的跨服嵌套关系(A服玩家的好友是B服角色,这情况在合服后需要重建好友映射)
- 排行榜数据(竞技场、战力榜、公会战排名需要下髮到指定排名规则,通常是合服后按新规则重置)
操作方法:
- 从各服导出全部唯一键字段
- 合并后做全量去重比对
- 按预先定好的归属规则(常见是开服时间早的优先)生成替换映射表
- 将映射表导入临时表,跑一遍模拟合服过程
- 确认无报错后再执行真实合服
第四步:模拟合服全流程演练
强烈建议在正式环境之外的预发布环境上做一次完整合服。
操作步骤为:
- 复制两服最近一次备份到预发布环境
- 执行合服脚本
- 进入游戏主界面,验证角色列表加载、主城场景、商城、抽卡系统是否正常
- 用自动化测试跑一遍日常任务、战斗、交易等核心玩法
- 检查邮件附件、拍卖行、公会仓库等异步流转数据是否完好
演练不是走形式,多数技术团队做完这一步能发现约两成到三成的潜在异常,包括数据字段截断、时区问题导致的赛季时间错乱、物品id重叠等。
第五步:校验结果分级与回滚预案
根据校验结果,将数据问题分三级:
- C级(轻微):不影响合服主流程,如聊天记录丢失、登录IP统计清零,发布公告说明即可
- B级(中等):部分玩家物品错乱、公会排名变化,需在合服后逐案处理补偿
- A级(严重):角色id冲突大面积发生、货币数据错乱,必须暂停合服,修复后重新校验
回滚预案的核心是一句话:合服脚本必须支持事务回滚,每一个迁移步骤都要能在失败时恢复到备份点,不允许出现半成品状态。
合服容量评估怎么做才不翻车?
校验管“数据对不对”,容量评估管“服务器扛不扛得住”,两者缺一不可。
容量评估的本质是回答一个问题:合并后的活跃用户量和存量数据量,新目标服务器能不能接住。
先算存量数据规模
存量数据规模不是“有多少个角色”这么简单,需要拆分计算。
- 数据库总大小:主库+从库+日志库
- 热数据比例:过去30天有登录行为的数据占比
- 冷数据占比:超过180天未登录的角色,建议单独归档或迁移到独立冷库
- 索引膨胀率:碎片率过高时,合服后重建索引所需临时空间按数据量的1.5到2倍预留
一个相对靠谱的存量评估表格如下:
| 评估项 | 估算方法 | 风险提示 |
|---|---|---|
| 玩家资产表体积 | 按角色数×单角色平均资产记录数 | 高v角色资产记录远高于平均 |
| 日志表体积 | 按月均日志量×留存周期 | 合服后日志量翻倍但保留时长不变 |
| 拍卖行与邮件 | 按活跃天数×日均写入量 | 冷数据堆积导致查询性能下降 |
再算增量压力峰值
合服当天是有流量脉冲的,老玩家回流、回归活动刺激、大量玩家上线转移资产,数据库的压力不是两个服原有的简单相加,而是要乘以一个并发系数。
实操中的测算路径:
- 取两服近7天的每日活跃和峰值在线数据
- 按开服节奏估算合服当日的回流率(通常用新服开服首日的在线峰值作参考)
- 计算预计峰值连接数,乘以每连接平均占用内存
- 对比目标服务器的内存、CPU、磁盘IO能力上限
举个例子,A服峰值在线3000人,B服峰值在线4500人,如果合服后的回归活动力度较大,乐观估算是5000到6000人同时在线,这要求目标服务器的数据库连接池上限、网关转发能力、内存分配率至少按7000人的规格来配置,大约预留15%到20%的冗余空间。
容量评估的最低通过标准
行业共识认为,满足以下标准才具备合服条件:
- 磁盘剩余空间不小于新合并数据量的两倍(含索引重建和日志增长)
- 数据库连接数上限 ≥ 两服当前总连接数峰值的5倍
- 目标服务器的CPU在模拟压力测试中,负载低于70%持续30分钟以上
-
内存使用率在模拟峰值情况下不超过85%,避免OOM杀进程
一条实用的检查命令:
# 评估服务器是否具备合服基础容量 free -h # 查看内存 df -h # 查看磁盘 nproc # 查看CPU线程数
如果磁盘可用空间连新数据量的两倍都不到,别犹豫,先扩盘再谈合服。
版本差异与跨服兼容性预判
合服不仅是数据合并,还牵扯同一游戏不同迭代版本的协议兼容。
A服跑了三年的老代码,B服已经更新到今年四月的版本,合服以后新老客户端包共存在同一网关下,协议号不一致会导致玩家无法进入战斗或打开界面报错。
具体的排查方法:
- 核对两服的客户端版本号和服务端版本号
- 对比protobuf协议文件(或自定义协议的schema版本)
- 检查追加字段是否有默认值,避免读旧数据时字段缺失
- 验证策划配置表的结构差异,比如装备表、技能表新增了几个字段,旧数据填充了什么值
版本差异不处理,就算数据校验全量通过,合服后也会出现大量“卡登录”“黑屏”“无法进公会”的问题。
合服前数据校验和容量评估要多久?
整个流程下来,两个服务器中等规模(单服百万角色级别)的合服,数据校验和容量评估通常需要2到3个工作日的准备时间,其中备份和一致性校验占一半,模拟演练和版本兼容预判占另一半。
这个时间不算长,省掉任何一步节减到一天内完成,表面上是进度追赶,实质上是把风险后置到了玩家体验上。
合服常见问题回答模块
合服时必须停服吗?
是的,不停服就无法保证备份数据的一致性,可以直接执行备份,但备份时间点之内的数据可能会产生写错位,导致合服后玩家资产丢失,合规做法是发布停服公告,然后按事先规划好的时间窗口停服、备份、校验、合服、验证、开服。
合服后角色重名怎么办?
看合服规则,通常默认原则是保留开服时间更早的服务器角色,后开服的角色会增加后缀标识,运营商通过全服邮件发放改名卡作为补偿,玩家可以自行变更名称,此事在合服前就要公开展示规则,减少纠纷。
容量评估能不能用云端弹性扩展现有服务器的形式?
可以,在容器化和云原生的架构下,约定俗成的做法是临时扩容目标服务器的数据库节点和网关节点,合服完成后再降配,这样能够缓解容量评估不准确导致的开服后性能瓶颈问题,弹性扩容只是手段,数据校验步骤仍然要完整执行。
把校验步骤做扎实,把容量余量留够,合服就是开服前的热身运动,这两件事不做,合服就变成了赌博。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/753023.html





