首頁 > web前端 > js教程 > 端對端加密訊息傳遞應用程式:高級設計和架構

端對端加密訊息傳遞應用程式:高級設計和架構

Susan Sarandon
發布: 2025-01-01 04:22:09
原創
970 人瀏覽過

自我介紹:我作為自由 Web 開發人員已有大約 1.5 年的時間。我從來沒有考慮過寫 HLD 或 LLD。相反,我專注於根據客戶的具體要求開發應用程式。當我渴望過渡到企業環境時,我渴望提升自己的技能並獲得新知識。

所以,這是我寫 HLD 的嘗試

客戶需求:基於 E2EE Web 的聊天應用程式。在任何給定時間可擴展到 1000 個同時使用者。

系統架構

該應用程式主要由前端(react)、後端(Node)、資料庫(Redis 和 SQL)組成。

  1. 前端

    • 這管理使用者看到的內容
    • 處理使用者登入、使用者註冊。
    • 處理發送和接收訊息。
    • 響應式設計。
  2. 後端:

    • 這管理訊息和登入的內容以及方式
    • 負責管理登入/註冊
    • 負責儲存訊息和使用者資料
    • 處理頁面路由
  3. 資料庫:

    • 這儲存加密訊息和使用者資料/登入資訊
  4. WebSocket 伺服器:

    • 用戶之間即時雙向通訊的專用服務。
  5. 快取層(選購):

    • 使用Redis暫時快取活躍用戶、訊息佇列或線上狀態以提高效能。

進階流程

  1. 使用者透過前端登入→後端對使用者進行身份驗證。
  2. 前端與後端建立WebSocket連線進行即時通訊。
  3. 當用戶發送訊息時:
    • WebSocket 伺服器接收它。
    • 它處理訊息並將其路由到預期收件人。
    • 後端將訊息儲存在資料庫中。
  4. 接收者透過WebSocket連接即時接收訊息。

架構圖

End-to-End Encrypted Messaging App: High-Level Design and Architecture

資料流

  1. 註冊流程

    • 使用者建立帳戶
    • 產生公共哈希和私有哈希,公共哈希與使用者資訊一起儲存在資料庫中。
    • 成功後:
      • 成功消息
      • 重新導向至登入
  2. 登入流程

    • 系統會提示使用者使用電子郵件和密碼登入。
    • 後端在輸入時驗證資料。
    • 成功後:
      • 用戶重定向到聊天
    • 拒絕後:
      • 啟動彈出窗口,通知出現的問題。
  3. 房間訊息流程

    • 使用者加入房間:
      • 前端將房間ID送到後端。
      • joinRoom 事件被編輯到特定房間。
    • 房間裡的消息:
      • 全域房間訊息目前尚未加密,它們只是共享並儲存在資料庫中。
      • 即時發送給房間內的所有參與者。
  4. 使用者 - 使用者訊息流

    1. 前端:
      • 前端使用收件人的公鑰對訊息進行加密。
      • 加密訊息透過套接字共享到後端。
    2. 後端:
      • 將訊息儲存在 PSQL 中
      • 使用 userID 將訊息路由至使用者
    3. 收件者前端解密訊息

詳細範例流程

即時直接訊息流

  • 前端
    • 使用者透過 WebSocket 向另一個使用者發送訊息。
    • 訊息在傳輸前使用接收者的公鑰進行加密。
  • 後端
    • WebSocket 伺服器接收加密訊息。
    • 訊息與元資料(例如寄件者、收件者、時間戳記)一起儲存在 PostgreSQL 中。
    • 後端將加密訊息路由到收件人的 WebSocket 連線。
  • 收件人前端
    • 透過 WebSocket 接收加密訊息。
    • 私鑰用於解密訊息。
    • 聊天中顯示明文訊息。

End-to-End Encrypted Messaging App: High-Level Design and Architecture

技術堆疊

  1. 前端

    • React:建立使用者介面(聊天視窗、按鈕、輸入框)。
    • Context API 或 Redux:管理應用程式狀態(例如,目前使用者、活動聊天)。
    • GSAP:用於動畫(例如,聊天氣泡平滑滑入)。
    • WebSocket 客戶端:與後端建立即時連線。
  2. 後端:Node.js Express.js

    • 處理 REST API(用於登入、註冊、取得訊息)。
    • JWT(JSON Web 令牌):透過基於令牌的身份驗證來保護通訊。
    • Passport.js:實作身分驗證策略(例如,Google 或 Facebook 登入)。
    • Socket.IO:處理即時訊息傳遞的 WebSocket 連線。
  3. 資料庫 :

    • PostgreSQL:儲存持久數據,如使用者設定檔、訊息和聊天室詳細資料。
    • Redis(可選):快取即時資料(例如,活動用戶狀態、最近發送的訊息)。
  4. 託管與部署:

    • AWS(EC2、S3、RDS):託管後端、儲存靜態檔案和管理資料庫。
    • Nginx 或 AWS ELB(負載平衡器):跨後端伺服器分配流量。

非功能性需求 (NFR)

  • 性能
    • 目標即時訊息延遲低於 100 毫秒。
    • 確保 1,000 位使用者的讀/寫操作一致。
  • 可擴充性
    • 後端應該透過水平擴展來處理越來越多的使用者(例如,使用 Redis 和 AWS ELB)。
    • 每台伺服器支援 10,000 個活動 WebSocket 連線。
  • 可用性
    • 透過備份和災難復原確保 99.9% 的正常運作時間。
  • 安全
    • 使用 E2EE 進行私人訊息傳遞。
    • 對所有傳輸中的資料採用 HTTPS。
    • 確保靜態資料在 PostgresSQL 中加密。

總結

建立可擴展且安全的端對端加密訊息應用程式需要在效能、可用性和安全性之間取得深思熟慮的平衡。透過這種高級設計,我的目的是展示現代訊息傳遞系統的架構和流程,該系統能夠處理即時通信,同時確保用戶隱私。

這個專案不僅展示了前端的 React、後端的 Node.js 以及用於資料管理的 PostgreSQL/Redis 等關鍵技術技能,而且還強調了可擴展性和可靠性設計的重要性。

如果您是一位開發者或愛好者,有興趣創建強大的系統或探索更多有關實時通信架構的信息,我希望本文提供有價值的見解。

我很想聽聽您的想法或回饋!請隨意聯絡、分享您的想法或在評論部分提出問題。讓我們繼續學習和建立!

也請繼續關注我的LLD!

每個專案都離掌握軟體開發技巧更近了一步。這教會了我平衡功能與可擴展性的重要性,我期待將來建立更複雜的系統!

以上是端對端加密訊息傳遞應用程式:高級設計和架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板