写点什么

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:374015

评论

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

小程序转APP,小团队也能实现数字化生态闭环

Speedoooo

APP开发 跨端开发 小程序容器 小程序转app 跨端运行

EMQX+阿里云Tablestore多场景一站式IoT数据解决方案正式发布

EMQ映云科技

阿里云 物联网 一站式平台 emqx 5月月更

数据库系统最佳实践系列 --- 使用 prepared statement

KunlunBase昆仑数据库

国产数据库

leetcode 451. Sort Characters By Frequency 根据字符出现频率排序

okokabcd

LeetCode 排序

【LeetCode】调整数组顺序使奇数位于偶数前面Java题解

Albert

LeetCode 5月月更

关于加密通道规范,你真正用的是TLS,而非SSL

华为云开发者联盟

TLS 加密 ssl 加密通道 CA系统

文档管理:企业进步的重要因素

小炮

文档管理

手绘图解java类加载原理

华为云开发者联盟

Java 类加载 元数据 类静态

满满干货!手把手教你实现基于eTS的HarmonyOS分布式计算器

HarmonyOS开发者

HarmonyOS ETS

数据库堡垒机品牌有哪些?买哪家划算?咨询电话多少?

行云管家

网络安全 信息安全 数据安全 堡垒机

深入解读SQL的聚集函数

华为云开发者联盟

sql GaussDB(DWS) 聚集操作 主键列

KunlunBase 查询优化(一)

KunlunBase昆仑数据库

MySQL 数据库 国产数据库

昆仑分布式数据库Sequence功能及其实现机制

KunlunBase昆仑数据库

国产数据库

三分钟让你了解 vue 中的父子通讯

CRMEB

MySQL-8.0 Group Replication 研究与改造汇总

KunlunBase昆仑数据库

国产数据库 MySQL 数据库

《阿里云代码安全白皮书》5个维度应对3类代码安全问题

阿里云云效

云计算 阿里云 代码管理 代码托管 代码安全

成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

阿里巴巴中间件

阿里云 中间件 函数计算

【二级等保】二级等保怎么做?价格怎么样?贵吗?

行云管家

运维 网络安全 堡垒机 运维审计

2022第八届华为软件精英挑战赛全球总决赛圆满落幕,冠军奖金20万!

科技热闻

netty系列之:epoll传输协议详解

程序那些事

Java Netty 程序那些事 5月月更

谈谈技术能力

阿里巴巴中间件

阿里云 程序员 中间件 技术思考

2022年中国消费金融数字化发展分析

易观分析

消费金融

微擎同步粉丝不显示头像和昵称?

智伍应用

微擎 php开源

SaaS应用:企业数字化转型性价比最高的方式

小炮

烧录OpenHarmony 3.2(尝鲜版)步骤

离北况归

OpenHarmony OpenHarmony3.2

KunlunBase 查询优化(二)Project 和 Filter 下推

KunlunBase昆仑数据库

国产数据库

KunlunBase 查询优化(三)排序下推

KunlunBase昆仑数据库

国产数据库

昆仑数据库可定制的数据分片方案

KunlunBase昆仑数据库

国产数据库

昆仑分布式数据库系统简介 之 SQL 标准兼容性和日常维护工作

KunlunBase昆仑数据库

国产数据库

什么是显卡?GPU服务器到底有什么作用?

Finovy Cloud

gpu GPU服务器

火山引擎A/B测试私有化实践

字节跳动数据平台

实验 火山引擎 私有化部署 ab测试

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