首页 >web前端 >js教程 >端到端加密消息传递应用程序:高级设计和架构

端到端加密消息传递应用程序:高级设计和架构

Susan Sarandon
Susan Sarandon原创
2025-01-01 04:22:09967浏览

自我介绍:我作为一名自由 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn