本项目为个人练习项目,未经生产环境验证
本项目为个人练习项目,未经生产环境验证
本项目为个人练习项目,未经生产环境验证
1. 项目介绍
该项目的背景是旨在构建一个功能完善的聊天系统,支持私聊和群组聊天,并能够传输多种格式的消息内容,如文本、图片、文件等。
项目的整体需求可以归纳为三大类:
- 基础数据管理:包括用户信息管理、好友关系维护以及群组数据的增删改查。这部分相对是比较常规的,主要围绕数据库表的 CRUD 操作。
- 聊天消息功能:核心在于消息的发送、接收和撤回功能的实现。技术难点主要集中在如何保障消息不丢失、不重复、不乱序,以及实时推送,确保通信的可靠性与时效性。
- 第三方服务集成:例如文件存储、链路追踪、日志记录与系统可观测性等,这些服务为系统提供基础设施支持和运行保障。
基于上述需求,系统采用分层架构,主要包括以下几个模块:
- 网络接入层:负责处理客户端的连接请求,这里面主要涉及的是两个方面,第一个有状态的websocket,第二个无状态的http协议
- 业务逻辑层:系统的核心业务处理均在该层完成,采用 gRPC 协议实现微服务化架构。服务按功能划分为多个模块,包括用户服务(user)、群组服务(group)、推送服务(push)、会话服务(conversation)、消息服务(msg)、关系服务(relation)等。
- 数据存储层:依赖多种数据库和中间件以支撑高性能的数据访问与系统协作。MongoDB 用于存储结构化数据,Redis 用于缓存、分布式锁、序列号分发以及用户状态管理,Kafka 提供异步消息队列支持,MinIO 则承担文件存储功能。
架构图如下:
2. 核心流程
2.1. 消息功能流程
2.2. 聊天消息数据流转链路
客户端->msg rpc -> kafka -> 分配序号 -> 持久化 -> 在线推送
2.3. 视频通话流程
视频通话功能基于livekit 实现