热门地图频繁开关机,等读秒有点烦

周目存档馆上线一个多月后,“按需唤醒、没人就关”的模式帮服务器省下了大把内存。但实际运行中也遇到了新情况:有些热度很高的地图(比如大家经常去跑图或参观的 clearx),一天到晚断断续续都有人进出。如果前脚刚走光触发了空闲关机,后脚隔了五分钟又有玩家想进去,就得再等几十秒冷启动读秒,体验不够痛快。

加上 keep-alive: true,冷热地图分层管理

2026 年 10 月 4 日(PR #1,Commit 0fa37bb、556d4bd),我给 Go 编写的 ArchiveController 守护进程加上了 keep-alive 常驻与自愈机制。

现在只需要在 servers.yml 配置文件里给指定实例加上一行 keep-alive: true,这个周目就会切换成常驻模式:一方面,当宿主机上的 ArchiveController 启动时,它会自动把所有标了常驻的容器第一时间拉起来;另一方面,控制器会把常驻标识同步给 Velocity 代理层,豁免它的空闲无人自动关机逻辑,玩家随时点 NPC 都是秒进。

崩了 5 秒内自动拉起,人工维护也能安静停机

既然是常驻服,还得防着容器半夜意外崩溃。我在控制器的巡检循环里加了带 30 秒冷却期的自动自愈逻辑:一旦巡检发现某个 keep-alive 容器不在运行状态,立刻自动调 Docker 接口把它重新拉起来。上线前我专门用 docker stop 模拟了一次容器暴毙,实测不到 5 秒钟控制器就侦测到异常并把它重新恢复到了 RUNNING 状态。

当然,如果管理员是真的要修地图或者调配置,只需要调一下控制器显式的 stop 维护接口,该实例就会进入人工停机抑制状态,安安静静等着维护做完,不会在管理员改文件改到一半时添乱自动开机。