所以我制作了一个 discord bot 并将其托管在 Heroku 服务器上。机器人是基本的,它只是侦听新消息并响应它们。 我正在使用免费的 heroku 层,发现有所谓的“free dyno hours”。到了月底,所有的空闲时间都用完了,我的机器人将离线直到下个月。
我有一个 Raspberry pi,所以我认为最好将它托管在那里,以防 Heroku 离线。
如果我有 3 台或更多服务器,这将如何工作?
如果我将机器人连接到数据库,我将如何处理?
这只是一个例子,如果能提供更通用的解决方案,我将不胜感激。
在寻求帮助时,我遇到了负载均衡器和 NginX。 如果我是对的,它基本上就像一个网关,所有请求都发送到托管 NginX 的服务器,然后它们被重定向到许多服务器之一(取决于它们的加载情况等)。
我对此几乎没有什么问题:
我的第一种方法是让机器人同时在 Heroku 和 Raspberry 上运行。 如果另一台服务器出现故障,它可以保证机器人至少在一台服务器上运行。 但这并不理想,因为当两台服务器都启动时,机器人会响应 2 次。
Heroku:
我向机器人应用程序添加了一个带有 express.js 的简单 Rest api 端点。 这样我就可以检查 Heroku 上的机器人是否正在运行。
树莓派:
我用这个 Node 程序包装了机器人应用程序,它的功能基本上就像一个开关。
链接到 git 存储库:https://github.com/Matyanson/secondary-node-server.git
程序每 3 分钟调用一次端点,然后通过查看状态代码检查应用程序是否已关闭。
然后它要么启动应用程序,要么关闭树莓派上的应用程序(使用 pm2)。
这有点管用,但我相信有更好的解决方案!
Heroku 也有问题(可以跳过):
Heroku 使用 Dynos(容器)来运行应用程序。有不同的 configurations dynos,包括“Web”和“Worker”。
我可以打开/关闭其中任何一个。
不是因为我需要解决这个确切的问题,而是因为我想学习这样做的好方法,以便在未来的项目中使用它。 我也认为这将是一种不 100% 依赖外部托管服务提供商的好方法。