【问题标题】:Design recommendation for Slack bot used by multiple teams多个团队使用的 Slack 机器人的设计建议
【发布时间】:2017-04-17 16:51:52
【问题描述】:

我正在尝试创建一个 Slack 机器人,并计划通过 Slack 应用程序目录分发它。现在保持我的机器人可用,我将不得不使用rtm.start API。现在,如果在任何时候我的服务器机群有 100,000 个(如果我开始托管机器人,可以达到 1 亿个)web-sockets 连接。我正在为我的服务器寻找干净的设计,它应该是可扩展的,最重要的是它应该能够让我的机器人始终可用(即使在服务器重新启动期间)。

这是我的想法:

  • 从 1 台以上的服务器重复连接到同一个 Slack 团队(如何?将 OAuth 令牌放入数据库并在建立连接时更新计数器?) 重新扫描所有预先存在的连接并再次建立连接。
  • 在部署期间一次只重启一台服务器

但是我不确定如何在服务器重新启动后重新建立 WebSocket 连接。当所有机器人都离线时网络中断事件会发生什么,重新建立预先存在的连接的有效方法是什么。

我看过这个SO post,但不幸的是它没有那么详细/有用

【问题讨论】:

  • 如果您不需要在 Slack 中出现,您可能需要查看Events API。它具有几乎相同的功能(例如,您可以创建聊天机器人),但可以使用简单的 HTTP POST,因此您无需为每个机器人管理 websocket 连接。
  • 感谢您抽出时间回复@ErikKalkoken。我知道事件 API 并且能够用它创建成功的原型。但是对我来说,机器人的存在非常重要:(

标签: websocket bots slack-api slack


【解决方案1】:

您可以托管多个服务器并为同一团队打开套接字 所有副本(如果机器人的存在太重要,那么至少使用 三个副本)

现在您正在为每个频道收听 slack 的 RTM 事件 多个服务器,因此您必须确保每个查询都得到答复 只有一次,因此您可以使用任何强大的消息队列来处理 这个

并且单个服务器可以处理许多 WebSockets(测试到 40k 节点.js。它也可以处理更多,但延迟会随着增加而变高 连接),但您应该考虑负载平衡您的负载 因为一旦你得到你的内存/ IO资源就会用完 许多同时请求。

所以在您的多台服务器复制之前使用负载均衡器并使用 用于处理消息和部署副本的消息队列,因此 您将始终保持连接,并且由于负载平衡,您可以更快地提供查询。

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多