跳到主要内容

介绍

go-aliyunmc(在不至于混淆的情况下可以简称为 gomc)是一个依托于阿里云提供的计算资源的自动化 Minecraft 服务器管理系统。简单来说,它是一个用来开服的工具。它遵循了一般意义上的开服路径:租一个服务器,然后来开服。不过,它在这个过程中做了一些额外的设计来让开服这一行为更符合“直觉”,以及最重要的,更加经济。

go-aliyunmc 使用前后端分离模式进行开发,其主要设计体现于后端,操作逻辑体现于前端。按照 Roadmap,前端分为网页前端、图形化前端以及命令行前端。

Why go-aliyunmc?

TL;DR

go-aliyunmc 提供了一个低成本、自动化、基于阿里云计算资源的 Minecraft 开服方案。它具有一系列自动化的机制来帮助你管理服务器,并且尽最大努力确保服务端数据的完整性。

小时候,作为一名 Minecraft 玩家,我的念想就是开一个属于我自己的服务器。但是,囿于如下限制,这一个小小的天真愿望却成为了天方夜谭:

  • 公网限制:直到 6220 年,也不是每一个家庭都能用上公网,也不是每一个家庭的公网带宽都足够——我仍未忘记那个自己盯着 192.168.X.X 发呆的夏日夜晚。
  • 性能限制:Minecraft 申必的单核机制导致即使还算不错的 CPU 也可能无法完全发挥自己的潜力。我为此购买了一颗 AMD (Yes) Ryzen 7 3700X,体验了没多久,然后疫情期间的某一天它歇菜了。没有什么性能是永恒的!
  • 家庭限制:克服了以上困难?可是妈妈说,你要是再不把电脑关了就要来打你💁‍♀️
  • 经济限制:抛开家里云,云服务器是 Minecraft 服务端理想且应当的运行环境,但它们终究不是设计为我们普通玩家服务的,因而在成本方面有诸多不美好,除非你愿意去用一些上传文件还得使用 FTP 的「面板服」或者高峰时期网络和 CPU 选一个吃不消的共享 VPS。
  • et cetera

所谓 Minecraft 服务器,本质上就是一个运行着的程序罢了,但为什么让我们感到开一个属于自己的服务器如此困难呢?因为

  • 它需要有一定算力的 CPU 的支撑
  • 它需要全天候不断运行,或者至少能达到你想让它开,它就能开的地步
  • 它需要良好的网络环境和足够的带宽
  • 更进一步地,它需要良好的周围设施来辅助运行,如备份机制、管理插件等

以上各种因素的需求程度与服务器的规模有关。

没有什么是加钱不能解决的。比如,如果我没有公网 IP,那么我可以选择去购买使用一些内网穿透服务;如果我没有云服务器,那我就可以去买一个,需要多大就买多大,然后问题就都解决了(?)。但作为一个玩家,从逻辑上来讲,我已经花了 165 元买了这个游戏(如果你只花了八十几块甚至更少就买到了,那么恭喜你!),为何我还需要为和他人通过互联网一同游玩这款游戏买单?我只是想和其他人一起玩游戏主屏幕上赫然写着的 Multiplayer 而已!这个模式本应如此昂贵吗?

go-aliyunmc 以此为出发点,主打自动化与节省成本,可以让你低成本地获得一个运行在真正云服务器上的 Minecraft 服务端,并具有完全的自主控制能力。同时,go-aliyunmc 具有一系列自动化的机制来帮助你管理这个服务器,并且尽最大努力确保服务端数据的完整性。

Minecraft 服务端及其周围文件就好像是一个可以被搬来搬去的电动玩具箱,有人想要玩,它就被搬来;不想玩就搬走。服务器在这个过程中只作为一个“计算工具”或者“能源”:游戏的存档状态总是保存在箱子中,而不与计算工具——服务器关联。二者的解耦使得计算工具可以根据需要灵活切换和扩展,箱子的内容可以在“后台”(比如你自己的电脑上)独立地自行维护、更新和调试运行。

不足之处

虽然 go-aliyunmc 提供了一种方便的服务器解决方案,但是它仍然存在一些限制,包括:

  • 受制于阿里云平台。 这一条是否算是一种不足因人而异,但不可置否的是 go-aliyunmc 正如它的名字暗示的那样,与阿里云这一平台有着不可分割的耦合,其根本原因是阿里云所提供的抢占式实例产品。请注意,go-aliyunmc 与阿里云无任何合作或赞助关系,其编写者只是阿里云的用户而已。
  • 尽最大努力保护数据完整性。 go-aliyunmc 主要通过以下机制来确保服务端数据尽可能少地为抢占式实例特点所影响:
    • OSS 备份机制:通过 ECS -> OSS 的内网拷贝,在短时间内将服务器的存档数据存储在不受实例状况影响的对象存储服务中。
    • 抢占式停机中断行为:使用阿里云提供的 SpotInterruptionBehavior: Stop 配置,通过略微提高潜在成本来确保即使抢占式实例被回收,其数据不会立刻消失,从而创造备份窗口。但此过程仍然无法避免服务端瞬时结束运行所导致的程度不可估计的回档问题。

欢迎帮助我们改进 go-aliyunmc

关于文档

该文档主要聚焦于以下两个方面:

  • 面向用户的 go-aliyunmc 的使用方法
  • 对 go-aliyunmc 技术上的设计的解释和说明

你可以在左侧的侧边栏选择你所需要的主题进行阅读和了解。