自我介绍:我作为一名自由 Web 开发人员已有大约 1.5 年的时间。我从来没有考虑过写 HLD 或 LLD。相反,我专注于根据客户的具体要求开发应用程序。当我渴望过渡到企业环境时,我渴望提高自己的技能并获取新知识。
所以,这是我编写 HLD 的尝试
客户需求:基于 E2EE Web 的聊天应用程序。在任何给定时间可扩展到 1000 个并发用户。
系统架构
该应用程序主要由前端(react)、后端(Node)、数据库(Redis 和 SQL)组成。
-
前端:
- 这管理用户看到的内容
- 处理用户登录、用户注册。
- 处理发送和接收消息。
- 响应式设计。
-
后端:
- 这管理消息和登录的内容以及方式
- 负责管理登录/注册
- 负责存储消息和用户数据
- 处理页面路由
-
数据库:
- 这存储加密消息和用户数据/登录信息
-
WebSocket 服务器:
- 用户之间实时双向通信的专用服务。
-
缓存层(可选):
- 使用Redis临时缓存活跃用户、消息队列或在线状态以提高性能。
高级流程
- 用户通过前端登录→后端对用户进行身份验证。
- 前端与后端建立WebSocket连接进行实时通信。
- 当用户发送消息时:
- WebSocket 服务器接收它。
- 它处理消息并将其路由到预期收件人。
- 后端将消息存储在数据库中。
- 接收者通过WebSocket连接实时接收消息。
架构图
数据流
-
注册流程
- 用户创建帐户
- 生成公共哈希和私有哈希,公共哈希与用户信息一起存储在数据库中。
- 成功后:
- 成功消息
- 重定向至登录
-
登录流程
- 系统会提示用户使用电子邮件和密码登录。
- 后端在输入时验证数据。
- 成功后:
- 用户重定向到聊天
- 拒绝后:
- 启动弹出窗口,通知出现的问题。
-
房间消息流程
- 用户加入房间:
- 前端将房间ID发送到后端。
- joinRoom 事件被编辑到特定房间。
- 房间里的消息:
- 全局房间消息目前尚未加密,它们只是共享并存储在数据库中。
- 实时发送给房间内的所有参与者。
- 用户加入房间:
-
用户 - 用户消息流
- 前端:
- 前端使用收件人的公钥对消息进行加密。
- 加密消息通过套接字共享到后端。
- 后端:
- 将消息存储在 PSQL 中
- 使用 userID 将消息路由至用户
- 收件人前端解密消息
- 前端:
详细示例流程
实时直接消息流
-
前端:
- 用户通过 WebSocket 向另一个用户发送消息。
- 消息在传输前使用接收者的公钥进行加密。
-
后端:
- WebSocket 服务器接收加密消息。
- 消息与元数据(例如发件人、收件人、时间戳)一起存储在 PostgreSQL 中。
- 后端将加密消息路由到收件人的 WebSocket 连接。
-
收件人前端:
- 通过 WebSocket 接收加密消息。
- 私钥用于解密消息。
- 聊天中显示明文消息。
技术堆栈
-
前端:
- React:构建用户界面(聊天窗口、按钮、输入框)。
- Context API 或 Redux:管理应用程序状态(例如,当前用户、活动聊天)。
- GSAP:用于动画(例如,聊天气泡平滑滑入)。
- WebSocket 客户端:与后端建立实时连接。
-
后端:Node.js Express.js:
- 处理 REST API(用于登录、注册、获取消息)。
- JWT(JSON Web 令牌):通过基于令牌的身份验证来保护通信。
- Passport.js:实现身份验证策略(例如,Google 或 Facebook 登录)。
- Socket.IO:处理实时消息传递的 WebSocket 连接。
-
数据库 :
- PostgreSQL:存储持久数据,如用户配置文件、消息和聊天室详细信息。
- Redis(可选):缓存实时数据(例如,活动用户状态、最近发送的消息)。
-
托管和部署:
- 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中文网其他相关文章!

Python和JavaScript的主要区别在于类型系统和应用场景。1.Python使用动态类型,适合科学计算和数据分析。2.JavaScript采用弱类型,广泛用于前端和全栈开发。两者在异步编程和性能优化上各有优势,选择时应根据项目需求决定。

选择Python还是JavaScript取决于项目类型:1)数据科学和自动化任务选择Python;2)前端和全栈开发选择JavaScript。Python因其在数据处理和自动化方面的强大库而备受青睐,而JavaScript则因其在网页交互和全栈开发中的优势而不可或缺。

Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

禅工作室 13.0.1
功能强大的PHP集成开发环境

WebStorm Mac版
好用的JavaScript开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6
视觉化网页开发工具