哲学

一切从简。亦从俭。

在技术上实现低熵,既能降低物质成本,也能降低人力投入,将更多的精力转移至服务器的建设之上。

在做所有部署之前,请将自己制定的哲学反复念三遍,直到明确下一步的运维目标。

已有的硬件

目前参与本服务器项目运行的资源为:一台阿里云轻量应用服务器、一台XyunCloud提供的16核心16GB的VPS,以及我的HomeLab

其中关键参数如下:

阿里云轻量应用服务器:IP属地为广州,峰值带宽为200Mbps。实测多线程情况下200Mbps上下对等(平均值),单线程sftp拷贝为30Mbps。双核CPU,1GB运行内存。

主服务器:16核心处理器,16GB运行内存。主频2.4Ghz。

HomeLab:设备很多很杂,且多数为个人自用设备。随需要弹性部署。

网络

Minecraft服务器的网络质量,自1.17更新以来就超越了JVM内存大小对游戏体验的影响,成为了决定性的主要部分。如何提升网络质量成为一大重点问题。

我的解决方案十分简单粗暴——将一个路由器系统运行在阿里云服务器上,随后通过三层路由转发数据。这比frp事实上更粗暴,由于UDP包的特性,Minecraft BE的游戏流量是无法通过frp简单路由的。其调试与反复测试的时间与精力,不如直接在阿里云服务器上运行软路由系统来的快。

原先我直接在阿里云服务器运行Velocity作为代理端,通过frp将远程的Minecraft服务映射在阿里云服务器上。但:

  • Geyser运行时需要较大的运行内存,而为了降低成本,我选购的是1G运行内存的阿里云服务器。当Be玩家增加时,就会因为超出可用内存而使内核杀死游戏进程。
  • frp会被源服务器的运营商识别,并进行阻断。此类阻断不同于“GFW阻断”,而是出于防止PCDN行为的QoS阻断。

反馈到玩家端,便是时不时的断开连接——有时是Velocity断开,有时则是frp服务掉线。

最后,我使用爱快软路由系统,并通过OpenVPN连接各个服务节点。目前而言一切工作正常,十分稳定。

此外,将工作进行分摊也很重要(即负载均衡)。这也是为何我使用Velocity而不是直接将Minecraft服务暴露到公网的原因。EdenBlocks有三个子服,分别是Demo预览服、Main主服以及Shop商店。

主服

经由Hetao的推荐,我选用了Folia这一新生服务端。

抛开尝鲜的新鲜感,我拿到的虚拟服务器是一台具有16核心、但主频略显“颓势”的老志强。我意识到这台服务器天生便适合运行Folia这一针对多核异步优化的服务端。

Folia的插件生态很匮乏。好在EdenBlocks的主服务器部分是一个生存服,并不需要花里胡哨的插件生态支持。

以下为EdenBlocks主服务器目前运行的插件列表:

CoreProtect, HuskSync, floodgate, LuckPerms, PlugManX, ViaBackwards, ViaRewind, ViaVersion

可见这些都是基础的管理类插件,包括版本兼容性功能在内。事实上,目前的插件配合原版功能已经完全满足了日常的管理需求。

数据库

数据库软件受限于IO性能,运行在HomeLab上。并通过OpenVPN网络实现互联互通。

玩家数据同步需要Redis与MySQL,行为记录也需要MySQL数据库参与以优化服务器性能。因此特意准备了数据库服务器用于集中管理。

商店

EB的商店并不盈利,是用于替代生电的方案。

对于大部分玩家而言,生电技术门槛极高。在不借助投影模组的情况下,能独立完成生电机器的人为少数。为了避免生电门槛过高导致的发展不均,因此开启了商店子服用于物资交换。

商店是一个独立的服务器,玩家通过铁块获取基础货币,再进行道具购买。其中均使用原版数据包实现。

因此,商店的部分本质上是数据包的开发工作。这事实上比插件商店更灵活,因为你可以更自由地修订NBT从而实现更复杂的效果。

演示服

该服务器通过shell脚本实现多数功能,实则是主服务器的镜像。

演示服使用了以下插件:

ChatDisable, floodgate, GFly, LuckPerms, PlugManX, SimpleScore, Vault, ViaBackwards, ViaRewind, ViaVersion

添加了一个记分板,用于展示服务器地址与官网。此外,游戏开服端被锁定为不保存玩家数据,实现进入服务器后恢复初始坐标的效果。

后续计划

后续当第一周目开始稳步进行时,会开放加盟以允许更多有独立服务器的玩家,用自己的算力创建自己的玩法。

原则上说,保证服务器的在线率即可考虑加入其中。此外,也考虑过出租当前的服务器线路。不过,目前来看,并不需要如此地步。

EdenBlocks管理组秉持开放、合作的心态,分享技术维护中的心得,希望能帮助到其他Minecraft服务器管理,或是EB服务器的自我批评。无论如何,当出现较大技术上的变动时,请留意我们的后续更新。