node.js - 如何将 Slack 机器人扩展到 1000 个团队

标签 node.js websocket autoscaling slack-api slack

要实现一个 slack 机器人,我需要处理 slack 的“实时消息传递 API”。它是一个基于 WebSocket 的 API,允许您从 Slack 实时接收事件并以用户身份发送消息。更多信息:https://api.slack.com/rtm

要为一个团队创建一个机器人,我需要打开一个 websocket 连接并监听它的事件。

为另一个团队提供 Slack 机器人。我需要开一个新的 网络套接字连接。 所以,

  • 1 个团队 => 1 个 websocket 连接
  • 2 个团队 => 2 个 websocket 连接
  • N 个团队 => N 个 websocket 连接

我应该如何为无休止的团队扩展我的 websocket 连接?

什么样的架构可以处理 1000 个 websocket 连接的自动缩放?

最佳答案

使用松弛套接字,您可以扩展很多东西:

  • 套接字数。这很容易,因为即使是便宜的服务器也可以处理数千个套接字,比如超过 50k。但每个套接字代表其他几种类型的负载,如下所列。
  • 每个团队使用的内存量,这取决于您自己的服务器实现。如果您尝试将大量消息历史记录保存在内存中,与消息处理代码有些无状态的情况相比,您将更快地达到服务器的限制。
  • I/O 量,这可能会让您想将任何图像服务卸载到单独的负载平衡器。

要考虑的另一件事是容错。假设您进行了粘性负载平衡,并且您的一台服务器正在处理 50 个团队。该服务器是唯一处理这 50 个团队的服务器,因此如果它出现故障,那么所有 50 个机器人都会离线。或者,您可以在单独的服务器上为每个团队打开多个套接字并使用消息处理队列,以便每条消息只响应一次。

因此,我建议的架构是将 RTM 套接字的精简冗余负载平衡器作为第一层,并在其下有一个可靠的消息队列。

关于node.js - 如何将 Slack 机器人扩展到 1000 个团队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36414101/

相关文章:

将音频从 Node.js 服务器流式传输到 HTML5 <audio> 标签

node.js - 在服务器之间扩展 socket.io

Android webview缩放问题

Kubernetes HPA 使用来自另一个部署的指标

amazon-web-services - "desired instances"需要什么? AWS Amazon Web Services Auto Scaling 组

node.js - 使用递归 glob 模式运行的 Mocha 不会在 Mac 上运行所有测试

node.js - 无法使用 sails-generate-auth 进行注册

node.js - 套接字io。禁用自动加入由套接字 ID 标识的房间

Java WebSocket API : Restrict service to certain domains

python - 如何使用Flask框架在浏览器上实时显示python脚本逐条执行的进度?