备份任务
备份任务是在服务器运行的状态下,将服务端的存档部分(在 Paper 服务端下是 world、world_nether、world_the_end 三个目录)打包后通过内网传输到 OSS 上的过程。归档任务是一个同类互斥任务。
前置要求
- 实例必须处于 Running
- 实例必须已经部署
- 不能有正在执行的归档任务
模板变量
- BackupOSSPath:备份存储的 OSS 路径,例如
oss://seatide/backups - MaxKeepCount:至多同时保留的备份数量,最低为 1,超过该数量后最旧的一个备份会被删除(类似于 LRU 策略)。
流程
一次备份任务执行以下流程:
- 将世界存档进行打包(使用
zip) - 将打包复制到 BackupOSSPath
- 如果数量超过 MaxKeepCount,淘汰最旧的一个备份
优化设计
- 备份任务本质上是将归档的一个子集进行打包并上传到 BackupOSSPath。后续可以根据用户需求,自由指定需要打包的内容,而不仅限于世界存档。
- “打包”与“压缩”有一定区别,打包仅考虑将一个目录装入到一个单一的文件中表示。而压缩在打包的基础上加入了对内容的可逆编码计算,用于优化存储空间。当前流程统一使用的 zip 工具压缩率并不高,因此一般认为与简单的打包效果相同,这也是目前设计中该工具的唯一用途。后续可考虑加入 7z、xz、zpaq 等工具提高压缩率,以满足节省空间的需求。不过,压缩是否适用于 Minecraft 存档文件有待考究。