Slack 是最著名的工作平台和团队消息传递应用程序之一。它使分布在不同地点的团队之间的沟通更加容易。目前,它已帮助全球超过 70 万家公司改善了沟通。
Slack=聊天群+65个工具集成(SMS、Google Drives、Twitter、Trello、Asana、Github、Dropbox、Salesforce、Zendesk等)+文件集成+统一搜索。
Slack = 所有对话和知识的可搜索历史记录
替代产品:
- Discord
- Google Hangouts
- Mattermost
- Rocket.Chat
- Basecamp
- Microsoft Teams
- Guilded
- Corteza Messaging
- Additor.io
- Lark
- DingTalk
- Notion
- Trello
功能要求
- 支持命名通道
- 会员可以建立自己的频道
- 允许人们在管理员批准的情况下将公告发布到受限频道
- 向用户发送通知
- 发送文件、图像和视频
- 即使用户离线也向其他用户发送消息
- 支持群聊
- 按时间顺序排列消息
- 加入/离开群组
- 添加/删除用户(不是那么重要)
- 直接消息传递
- 打字时的打字指示器
- 了解用户状态(在线或离线)
- 允许通过 WiFi/数据通话
- 允许我们删除消息
- 支持“提醒我”功能
- 可以将消息、文件、视频等保存到已保存的项目中
- 可以在一个线程中回复
- 可以将消息分享到其他社交媒体平台
- 允许我们复制消息
- 允许我们复制链接
- 允许我们将其固定到频道
- 允许我们删除消息
- 允许我们添加注释
- 允许我们在发布后编辑消息
- 提供表情符号
- 与其他应用程序(Twitter、Google Drive、Dropbox 等)集成或安装多达 10 个第三方或自定义应用程序
- 支持“提及”服务
- 只能查看和搜索最近的 10k 条消息
- 文件存储高达 5GB
- 用户可以无限发送消息
- 支持带关键字的搜索字段
- 低延迟
- 高可靠性
- 安全
- 数据持久化
- 缓存一致性
- 持续的
系统组件
客户端 = Web、移动、桌面
消息服务器——监听来自后端服务器的更新,并向所有客户端发送事件
WebApp 后端 = 业务逻辑
数据库 = 存储层
用户资料
- 存储有关用户的个人资料信息,例如状态、个人资料图片、个人资料 ID、电子邮件、用户名、密码等
- 检索有关用户的详细信息。
映射
- 对于创建的每个频道,都会创建 channel_Id。channel_Id 将映射到组中的所有用户。然后服务器为组的成员创建一个新进程(一个线程)。服务器将找出这些接收者的名称,然后从数据库中取出数据并找出这些用户的进程 id (pid),从而保证消息可以传递给用户。
- 此外,还将考虑来自公共渠道、私人渠道、直接消息和群组直接消息的对话类型。不同类型的对话将具有不同级别的可见性和发布权限,这在发送消息机制中很重要。
- 负载均衡器将用于处理消息负载过多的队列,并确保向不同的用户发送任何消息都不会失败。
- WebSocket 协议 用于消息服务器,因为连接不会立即关闭,而是对所有活动用户开放。但是,Web 套接字处理程序无法跟踪所有用户,它只跟踪活动用户。处理程序将找出组列表中剩余的用户,并在网络恢复后将消息传递给剩余的用户。
消息服务器
- 它是系统中所有消息的存储库。
- 它将找出消息的类型。一旦消息服务检测到消息的格式为媒体,它将被存储在媒体数据库中。然后将这些媒体的链接存储在 SQL DB 中,并映射到用户详细信息。
- 当用户想要将消息导出或在 slack 上共享消息到外部系统时,它会找出 messageId。
高级系统架构
技术栈
- Web 客户端:带有 ReactJS 的 Javascript 和 ES6
- 桌面应用程序:电子
- Android 应用程序: Java 和 Kotlin
- IOS 应用程序: Objective C 和 swift
- 后端: PHP & Hacklang
- 数据存储: MySQL
- 缓存: Memcached
- 搜索和排名:SolrCloud、Java 服务
- 实时消息: WebSockets
- 负载均衡器: HAProxy & Consul
- 语音和视频通话服务: Elixir
- 异步任务队列系统: Kafka & Redis
- 数据仓库: Presto、Spark、Airflow、Hadoop 和 Kafka
- 服务器管理: Terraform、Chef 和 Kubernetes
- 云和网络服务:亚马逊
- 网络服务器:阿帕奇
- 资产管理:品牌文件夹
- Javascript 编译:通天塔
- 监控错误: Bugsnag