2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Slack 实时消息处理架构,更新、更快、更稳定

  • 2023-05-12
    北京
  • 本文字数:1056 字

    阅读完需:约 3 分钟

Slack实时消息处理架构,更新、更快、更稳定

Slack 最近公布了它们是如何实现在全球范围内每天发送数百万条实时消息的。该公司提供了对其Pub/Sub架构的全面讲解,这个架构的设计目标就是管理大规模的实时消息。它强调了在不同时区和地区发送实时消息的独特挑战,以及 Slack 的工程师如何设计基础设施来处理这些挑战的。


Slack 的高级软件工程师Sameera Thangudu阐述了这种架构的重要性:

我们的服务器要为每台主机上的数千万个通道以及数千万个连接的客户端提供服务,我们的系统要在 500 毫秒内将消息传递到世界各地。凭借当前架构的线性可扩展性,我们可以为更多客户提供服务。


她表示,该公司会加强其架构,以服务更多的客户群。


该系统的后端由多个服务组成。通道服务器(Channel Server,CS)是有状态的内存服务器,持有通道的历史。这里会有一个一致性散列机制将每个 CS 映射到通道的一个子集中。在峰值时期,每个主机大约为 1600 万个通道提供服务。一致性哈希环管理器(consistent hash ring manager,CHARM)会管理 CS 的一致性哈希环,确保在 20 秒内替换掉不健康的 CS。Consul 会存储一致性哈希值的最新配置。



图片来源:https://slack.engineering/real-time-messaging/


网关服务器(Gateway Server,GS),与 CS 类似,是有状态的内存服务器。它们维护用户信息和 WebSocket 通道订阅,并作为 Slack 客户端和 CS 之间的接口。GS 会被部署到多个地理区域,以优化连接速度。管理服务器(Admin Server,AS)是无状态的内存服务器,它们是 Webapp 后端和 CS 之间的接口。最后,状态服务器(Presence Server,PS)会跟踪在线用户,支撑 Slack 客户端的绿色状态点(green presence dot)。


每个 Slack 客户端有一个到 Slack 服务器的持久性 WebSocket 连接,以接收实时事件来维护其状态。客户端需要通过几个步骤来搭建 WebSocket 连接,比如从 Webapp 后端获取用户令牌和 WebSocket 连接的设置信息。然后,客户端会初始化一个 WebSocket 连接到最近的边缘区域,GS 获取用户信息并向客户端发送第一条消息。Envoy会平衡传入的流量并处理 TLS 终止。



客户端设置完成后,在通道中发送的每条消息都会广播至通道中所有在线的客户端。消息在发送至全球范围的每个订阅的 GS 之前,要经过 Webapp API、AS 和 CS。每个收到消息的 GS 都会将消息发送至订阅该通道 ID 的客户端。



除了聊天消息,实时改变客户端状态的另一种消息类型是事件。瞬时事件,比如用户在通道中进行输入,会遵循一个略有差异的流程,因为数据库不会持久化保存这些事件。下图说明了这个流程。



原文链接:

Real-Time Messaging Architecture at Slack


相关阅读:

Slack工程师如何解决最常见的移动开发痛点

Zoom和Slack的第二曲线

2023-05-12 10:374513

评论

发布
暂无评论
发现更多内容

火速收藏!2025 云栖大会 AI 中间件议程看点全公开(附免费报名通道)

阿里巴巴云原生

云栖大会

【RFID智能工具柜多少钱】价格差距大吗?选购要看哪些核心参数?

斯科信息

斯科信息 RFID智能工具柜 RFID工具柜

函数计算进化之路:AI 应用运行时的状态剖析

阿里巴巴云原生

阿里云 Serverless 云原生

路径文本怎么制作?保姆级的设计排版教程来了!

职场工具箱

效率工具 设计 排版 ui设计 在线设计工具

第柒在线科技通过“2025国家科技型中小企业”认定

第七在线

深入研究:京东图片搜索相似商品API详解

tbapi

京东图片搜索接口 京东拍立淘API 京东图片搜索API 京东图片API 京东图搜API

邀您参加丨云栖大会中企出海技术分论坛

阿里巴巴云原生

阿里云 云原生

文心快码入选2025人工智能AI4SE“银弹”标杆案例

Comate编码助手

AI辅助编程 AI 编程 文心快码Zulu 文心快码3.5S

对接文档:快递鸟取件码API,实现物流末端服务自动化

快递鸟

OpenTiny NEXT 亮相 GOSIM HANGZHOU2025,携手开发者共筑开源智能生态!

OpenTiny社区

前端 智能化 OpenTiny MCP

springboot配合thymeleaf,调用接口不跳转页面只显示文本

刘大猫

人工智能 云计算 物联网 大模型 智能电网

MyEMS 进阶应用:从单厂能耗管理到集团跨区域能源数据协同分析

开源能源管理系统

开源 开源能源管理系统

一场 MCP 生态的变革——详解 OpenTiny NEXT 逆向思维的技术创新

OpenTiny社区

AI 前端 OpenTiny MCP

【9.24 直播】集群数据管理实战:时序数据库 IoTDB 数据分区、同步与备份详解

Apache IoTDB

阿里云 Hologres 登顶 VectorDBBench 性价比榜单四项第一

阿里云大数据AI技术

阿里云 实时数仓 hologres VectorDBBench

连接两个战场:本土舆情监测与海外社交媒体监控的协同

沃观Wovision

社交媒体 沃观Wovision 舆情监测系统 海外舆情监测

行稳、致远 | 技术驱动下的思考感悟

京东科技开发者

超前探展!2025 云栖大会朋友圈晒图必备

阿里巴巴云原生

划重点|云栖大会「AI 原生应用架构论坛」看点梳理

阿里巴巴云原生

阿里云 AI 云原生

CVE-2025-6018与CVE-2025-6019:Linux PAM本地权限提升漏洞深度解析

qife122

权限提升 CVE-2025-6018

探展打卡 Serverless,2025 云栖大会来了

阿里巴巴云原生

阿里云 Serverless

撒钱岛小游戏管理系统:私域流量变现新选择,趣味与收益双赢

微擎应用市场

Web自动化测试智能体详解

测试人

人工智能 软件测试

深入研究:京东工业商品详情API详解

tbapi

京东工业平台API 京东工业数据采集 京东工业商品详情API 京东工业数据分析

深入解析MS12-020关键漏洞CVE-2012-0002:远程桌面协议的安全风险与缓解方案

qife122

网络安全 系统加固

Playwright自动化测试框架与AI智能体应用

测试人

坐标山东青岛,12~20K面试强度

王中阳Go

Go 面试 后端

从 AI 编程到小程序容器:外卖 App 开发实战之 App Builder 技术选型指南

xuyinyin

JoyAgent-DataAgent可直接使用的智能问数和诊断分析智能体

京东科技开发者

JDK从8升级到21的问题集

京东科技开发者

Slack实时消息处理架构,更新、更快、更稳定_架构_Eran Stiller_InfoQ精选文章