Slack系統架構簡介 - jinlow

banq發表於2022-08-10

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



 

相關文章