Slack系统架构简介 - jinlow

22-08-10 banq

Slack 是最著名的工作平台和团队消息传递应用程序之一。它使分布在不同地点的团队之间的沟通更加容易。目前,它已帮助全球超过 70 万家公司改善了沟通。

Slack=聊天群+65个工具集成(SMSGoogle DrivesTwitterTrelloAsanaGithubDropboxSalesforceZendesk等)+文件集成+统一搜索。

Slack = 所有对话和知识的可搜索历史记录

替代产品:
  1. Discord
  2. Google Hangouts
  3. Mattermost
  4. Rocket.Chat
  5. Basecamp
  6. Microsoft Teams
  7. Guilded
  8. Corteza Messaging
  9. Additor.io
  10. Lark
  11. DingTalk
  12. Notion
  13. Trello


功能要求

  1. 支持命名通道
  2. 会员可以建立自己的频道
  3. 允许人们在管理员批准的情况下将公告发布到受限频道
  4. 向用户发送通知
  5. 发送文件、图像和视频
  6. 即使用户离线也向其他用户发送消息
  7. 支持群聊
  8. 按时间顺序排列消息
  9. 加入/离开群组
  10. 添加/删除用户(不是那么重要)
  11. 直接消息传递
  12. 打字时的打字指示器
  13. 了解用户状态(在线或离线)
  14. 允许通过 WiFi/数据通话
  15. 允许我们删除消息
  16. 支持“提醒我”功能
  17. 可以将消息、文件、视频等保存到已保存的项目中
  18. 可以在一个线程中回复
  19. 可以将消息分享到其他社交媒体平台
  20. 允许我们复制消息
  21. 允许我们复制链接
  22. 允许我们将其固定到频道
  23. 允许我们删除消息
  24. 允许我们添加注释
  25. 允许我们在发布后编辑消息
  26. 提供表情符号
  27. 与其他应用程序(Twitter、Google Drive、Dropbox 等)集成或安装多达 10 个第三方或自定义应用程序
  28. 支持“提及”服务
  29. 只能查看和搜索最近的 10k 条消息
  30. 文件存储高达 5GB
  31. 用户可以无限发送消息
  32. 支持带关键字的搜索字段

非功能性要求

  1. 低延迟
  2. 高可靠性
  3. 安全
  4. 数据持久化
  5. 缓存一致性
  6. 持续的


系统组件
客户端 = Web、移动、桌面
消息服务器——监听来自后端服务器的更新,并向所有客户端发送事件
WebApp 后端 = 业务逻辑
数据库 = 存储层


用户资料

  • 存储有关用户的个人资料信息,例如状态、个人资料图片、个人资料 ID、电子邮件、用户名、密码等
  • 检索有关用户的详细信息。


映射

  • 对于创建的每个频道,都会创建 channel_Id。channel_Id 将映射到组中的所有用户。然后服务器为组的成员创建一个新进程(一个线程)。服务器将找出这些接收者的名称,然后从数据库中取出数据并找出这些用户的进程 id (pid),从而保证消息可以传递给用户。
  • 此外,还将考虑来自公共渠道、私人渠道、直接消息和群组直接消息的对话类型。不同类型的对话将具有不同级别的可见性和发布权限,这在发送消息机制中很重要。
  • 负载均衡器将用于处理消息负载过多的队列,并确保向不同的用户发送任何消息都不会失败。
  • WebSocket 协议 用于消息服务器,因为连接不会立即关闭,而是对所有活动用户开放。但是,Web 套接字处理程序无法跟踪所有用户,它只跟踪活动用户。处理程序将找出组列表中剩余的用户,并在网络恢复后将消息传递给剩余的用户。


消息服务器

  • 它是系统中所有消息的存储库。
  • 它将找出消息的类型。一旦消息服务检测到消息的格式为媒体,它将被存储在媒体数据库中。然后将这些媒体的链接存储在 SQL DB 中,并映射到用户详细信息。
  • 当用户想要将消息导出或在 slack 上共享消息到外部系统时,它会找出 messageId。


高级系统架构
技术栈

  1. Web 客户端:带有 ReactJS 的 Javascript 和 ES6
  2. 桌面应用程序:电子
  3. Android 应用程序: Java 和 Kotlin
  4. IOS 应用程序: Objective C 和 swift
  5. 后端: PHP & Hacklang
  6. 数据存储: MySQL
  7. 缓存: Memcached
  8. 搜索和排名:SolrCloud、Java 服务
  9. 实时消息: WebSockets
  10. 负载均衡器: HAProxy & Consul
  11. 语音和视频通话服务: Elixir
  12. 异步任务队列系统: Kafka & Redis
  13. 数据仓库: Presto、Spark、Airflow、Hadoop 和 Kafka
  14. 服务器管理: Terraform、Chef 和 Kubernetes
  15. 云和网络服务:亚马逊
  16. 网络服务器:阿帕奇
  17. 资产管理:品牌文件夹
  18. Javascript 编译:通天塔
  19. 监控错误: Bugsnag