如何将 Slack 机器人扩展到 1000 个团队
Posted
技术标签:
【中文标题】如何将 Slack 机器人扩展到 1000 个团队【英文标题】:How to scale a slack bot to 1000's of teams 【发布时间】:2016-07-24 16:05:23 【问题描述】:要实现一个 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 连接的自动缩放?
【问题讨论】:
【参考方案1】:使用松弛套接字,您可以扩展很多东西:
插槽数。这很容易,因为即使是便宜的服务器也可以处理数千个套接字,比如超过 50k。但每个套接字代表其他几种类型的负载,如下所列。 每个团队使用的内存量,这取决于您自己的服务器实现。如果您尝试在内存中保留大量消息历史记录,那么与消息处理代码有些无状态的情况相比,您将更快地达到服务器的限制。 I/O 量,这可能使您希望将任何提供服务的图像卸载到单独的负载平衡器。要考虑的另一件事是容错。假设您进行了粘性负载平衡,并且您的一台服务器正在处理 50 个团队。该服务器是唯一处理这 50 个团队的服务器,因此如果它出现故障,那么所有 50 个机器人都会离线。或者,您可以在不同的服务器上为每个团队打开多个套接字并使用消息处理队列,以便每条消息只响应一次。
因此,我建议的架构是将 RTM 套接字的精简冗余负载平衡器作为第一层,并在其下建立一个可靠的消息队列。
【讨论】:
Node 确实可以同时管理大量套接字,但延迟在规模上变得更加不可预测。如果你有性能敏感的代码,那么值得使用某种集群系统来平衡多个进程的负载,这样一个短期的小插曲就不会影响整个过程。以上是关于如何将 Slack 机器人扩展到 1000 个团队的主要内容,如果未能解决你的问题,请参考以下文章
轻松扩展机器学习能力:如何在Rancher上安装Kubeflow