开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

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

评论

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

边缘云与应用场景

dappweb

ao 边缘云

边缘云与硬件

dappweb

ao 边缘云

下一个加密货币轰动:2024 年成功案例的 7 个精选

dappweb

加密货币 ao

区块链技术在未来大国博弈的作用

dappweb

区块链 ao

区块链在物联网领域的应用前景如何

dappweb

区块链 ao

区块链中的共识机制是如何运作的

dappweb

区块链 ao

普通人接触币圈应注意

dappweb

加密货币 ao

投资者如何降低加密货币的风险

dappweb

加密货币 ao

能通俗易懂的说一下区块链

dappweb

区块链 ao

华为云618营销季Web及移动App上云体验,助力软件行业创新发展

YG科技

华为阅读携手多家头部出版机构,共创数字阅读新纪元

最新动态

边缘云与软件平台

dappweb

ao 边缘云

人们为何希望比特币重生

dappweb

比特币 ao

解密区块链比特币费用:背后的逻辑与影响因素

dappweb

区块链 ao

直击HDC2024开发者主题演讲 HarmonyOS NEXT开发者解决方案全面升级

最新动态

万象革新,开启鸿蒙原生应用生态新篇章

最新动态

加速鸿蒙生态共建,蚂蚁mPaaS助力鸿蒙原生应用开发创新

HarmonyOS SDK

华为 HarmonyOS

边缘计算:重塑医疗领域未来的关键力量

dappweb

边缘计算 ao

区块链零知识证明:未来数据的“隐身斗篷”

dappweb

区块链 ao

区块链跨链互操性:打破孤岛,构建互联互通的未来

dappweb

区块链 ao

区块链模块化:构建灵活、可扩展的未来网络

dappweb

区块链 ao

2024-06-22:用go语言,给定一个起始下标为 0 的长度为3的整数数组 nums,根据这些数字构建三角形。 如果无法构成三角形,则返回 “none“; 否则根据三角形的边长关系返回对应类型的字

福大大架构师每日一题

福大大架构师每日一题

GitHub标星破千!这份Python并行编程手册,可以封神了!

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言 并行编程

AI+阅读,华为阅读带来鸿蒙生态下的新体验新能力

最新动态

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