我管理一个托管多人游戏的专用服务器。
这款游戏使用的地图现在为 1.5 GB,但很快就会达到 2.3 GB。我们只有一个 SATA HD。
我们希望每小时以相同的高清分辨率保存一次地图,以便能够进行新的回滚。
如果我使用 rdiff-backup,由于(我认为)高清业务,玩家会遇到一些“延迟”(平均 15 秒,每秒 50% 的滴答声)。我知道有些延迟是必要的,但最好的解决方案是什么?
地图文件经常被修改,但理论上如果存在一个缓慢备份但“消耗较少硬盘”的过程,我认为这将是最好的选择。还是一个愚蠢的想法?
地图存储的文件很多,大概有2500个,但是变化的文件不到500个。
我刚刚开始管理服务器,而且我了解的东西还不多(英语也是),所以请多包涵。
答案1
我认为您谈论的是 Minecraft(尽管总体思路也适用于其他游戏)。
我了解大型主要服务器使用 RAM 磁盘来显示实时地图。然后他们会定期将其复制。我猜您可以使用 2 个单独的 RAM 磁盘,将实时内容复制到临时备份,然后将临时备份复制到长期存储。但是,如果您的服务器崩溃并且丢失了 RAM,您可能会丢失一些更新。
主要缺点是您需要一台具有大量内存的服务器。至少要足够承载游戏服务器和地图的内存磁盘,如果可能的话,还要有第二个内存磁盘。
如果您想要存档快照并且磁盘空间是一个问题,那么可能需要寻找某种方法来尽可能多地存储更改。显而易见的方法是比较文件哈希/修改时间(rdiff 可能会这样做)但您也可以查看执行二进制差异/修补,以便只存储实际发生的更改(我不知道这对 Minecraft 来说效果如何,因为它使用 gzip 算法压缩它的块数据)。
您还可以看看使用文件系统因为它内置了快照功能。这实际上可能让您“保存”地图的当前状态,而不必复制整个地图,然后您可以安装快照版本并在需要时将其复制。当然,如果您提供下载,那么您需要它们全部可访问且压缩。
为了限制复制速度,我知道 rsync 有一个“--bwlimit = KBPS”命令来限制带宽。