托管的自定义 Discord 机器人的在线时长完全取决于背后的基础设施。在 Noxyr 的自定义机器人中,这由一组托管节点负责:它们会自动为你的机器人选择主机,每隔几秒检查一次运行状态,并且在你完全不需要亲自操作服务器的情况下迁移机器人。你只需粘贴一个 token;无需配置、打补丁或重启任何东西。
你无需管理服务器,Noxyr 的节点会处理
每个节点都是一个进程,托管分配给它的所有自定义机器人。它会以短周期进行轮询:启动应当运行的机器人,停止不该运行的机器人,并记录心跳供网站读取。这就是基础设施承担的全部工作,否则你就得在 VPS 上亲自完成:保持进程存活、监测它是否崩溃,以及在 Discord 因非你的原因断开连接时重新登录。
设置时如何选择主机
默认是自动选择,大多数人应当保持这个选项。它总会解析为当前有空余容量的节点,并且节点按固定顺序填充:一个节点被占满后,下一个节点才开始接收新机器人,而不是把负载平均分散、让每个节点都只用了一半。手动指定某个主机时,系统在后台仍会将你路由到一个真实可用的节点:如果你选择的那个节点恰好离线或已满,则会改用当前最佳的可用节点,而不是直接让设置失败。
什么样的节点算“已满”
判定要看两项检查,而不是一项。节点一旦达到自身的机器人数量上限就不再接收新机器人;另外,如果再加入一个机器人会让其实测内存占用接近上限,它也会停止接收。之所以需要第二项检查,是因为仅靠数量上限无法反映:较繁忙的服务器每个机器人占用的内存比冷清的服务器多。按机器人数量看似还有空间的节点,可能已接近内存耗尽,无法安全地再接收一个机器人。无论先触发哪个上限,新的设置都会自动转移到下一个节点。
将机器人迁移到其他主机
在自定义机器人页面更改节点,可以把一个已经在运行的机器人迁移到别处。每次迁移都会重新进行一次 Discord 登录,而 Discord 对任何单个机器人这样做的频率有限制,因此两次迁移之间有五分钟冷却时间。实际迁移时,机器人会在新节点上重新连接,期间短暂重启。你的设置、ticket、目录和其他一切都不受影响,因为这些数据存放在共享数据库中,而不是存放在正在运行该进程的节点上。
如果节点出现问题会怎样
如果某个机器人的心跳过期,即其节点不再收到它的回应,Noxyr 的主机器人会自动接手并重新覆盖该服务器,因此成员不会真的遇到“没有任何机器人应答”的情况。节点或登录恢复后,自定义机器人会在下一次检查时自行重新接管该服务器。在普通情况下,这无需提交支持工单;它与你第一次设置时启动机器人所用的自愈循环是同一套机制。
为什么节点按固定顺序填充,而不是分散开
很容易以为负载会在所有节点之间均匀分配,这个节点分一点,那个节点分一点。Noxyr 刻意反其道而行之:一个节点完全装满后,下一个节点才接收第一个新机器人。这样,在任何时刻实际运行的节点数量都能根据当前负载保持尽可能少,而不是让多个节点轻度负载,这对底层基础设施的利用效率很重要。无论哪种方式,它都不会影响你的机器人的行为;无论最终由哪个节点运行,同步循环和心跳的工作方式都完全相同。
仪表盘上的数字究竟代表什么
主机旁显示的延迟是真实测量值,而非估算。每个节点会定期对 Discord 自身的网关端点计时一次请求,并报告平均值。节点的在线/离线状态基于它最近一次签到的时间:如果节点在短时间内没有任何动静,就会被视为不可用,而不是假定它仍然正常。这也正是触发 Noxyr 主机器人接手、覆盖自定义机器人已失去响应的服务器的机制。
在线时长与付费 VPS 的对比
自己运行 VPS 可以完全掌控机器,同时也要完全负责发现它何时宕机。托管的自定义机器人则用这份掌控换取了由别人负责先行发现问题。两者在所有情况下都不是绝对更优。如果你在二者之间犹豫,请参阅我们在自定义机器人与 VPS 自托管对比中的完整比较。
常见问题
我如何查看机器人现在是否在线?仪表盘上的自定义机器人页面会显示实时状态,而不只是显示开关是否打开。
机器人迁移到其他节点后,设置会丢失吗?不会。设置保存在共享数据库中,与恰好运行该机器人的节点进程无关。
我可以选择特定节点而不是“自动”吗?可以,但即使你选择的节点在当时已满或离线,它最终仍会落到一个真实可用的主机上。
仪表盘上的状态多久刷新一次?每隔几秒;一旦节点停止收到你的机器人的消息,会很快察觉,而不是等待很长时间。
停机会被收费或受到任何处罚吗?不会。这完全不涉及付款,在线问题除了机器人在重新连接期间短暂不可用之外,不会让你付出任何代价。
完整的设置要求见自定义机器人文档,节点选择和“更改节点”的具体机制见自定义机器人托管文档。