关于实现sharedata配置与hotfix同步更新

前言

skynet_fly有3种热更。

  1. make/script/check_reload.sh 检测可热更服务新服替代旧服。可以认为是进程内灰度更新
  2. make/script/check_hotfix.sh 检测可热更服务可热更脚本更新,不会刷旧服务,可以认为是刷脚本
  3. make/script/upsharedata.sh 检测配置更新,可以认为是更新配置

之前3种更新方式,可以说是完全独立,互不影响的。但是有更新配置的存在,会有一个隐患。
旧服务新配置

例如初始脚本功能如下(真正代码的配置不是这样的,这里只是举个简单例子):

1
2
3
4
5
6
7
--配置
local cfg = {a = 1, b = 2}

--功能代码
local function add_all()
return cfg.a + cfg.b
end

以前的方式,直接更新配置如下:

1
local cfg = {a = 1}

把b删掉了,功能代码还是旧的,此时代码肯定会报错了。

因为之前调用upsharedata.sh,监听cfg配置的服务接收到配置版本更新,会立马切换到新配置,就会存在以上的隐患,配置和功能代码没有同步修改。
通常我们修改功能一般会配置和代码同步修改,保证同步更新就不会有问题,比如如下这样,配置和功能代码一起更新。

1
2
3
4
5
6
7
--配置
local cfg = {a = 1}

--功能代码
local function add_all()
return cfg.a
end

更新行为变更

  1. make/script/check_reload.sh 行为没有修改。
  2. make/script/check_hotfix.sh 更新脚本前先切换可能更新的新配置。加了切换配置后,更新行为不可逆,需要确保代码不出错。注意 脚本中的hotfix方法不要有异步,否则异步的脚本后面未更新的脚本就不是同步更新了。
  3. make/script/upsharedata.sh 更新配置后,各服务接收到版本更新后,不会立马切换到新版本,而是获取到新版本的配置,暂存,等待hotfix.sh触发再切换到新版本。

关于实现sharedata配置与hotfix同步更新
https://huahua132.github.io/2025/08/16/skynet_fly_ss/sharedata_hotfix/
作者
huahua132
发布于
2025年8月16日
许可协议