该项目是一个企业级即时通讯(IM)系统,采用分布式微服务架构设计,提供高性能、高可用的即时通讯解决方案。
- 网关层:Spring Cloud Gateway
- 通信层:Netty WebSocket
- 服务层:Spring Boot、Dubbo
- 存储层:MySQL、Redis
- 消息队列:RocketMQ
- 注册中心:Nacos
- 监控告警:opentelemetry
- im-api-gateway: HTTP请求网关,负责API请求的路由和鉴权
- im-ws-gateway: WebSocket网关,基于Netty实现,处理实时消息的收发
- im-user: 用户管理服务,处理用户注册、登录等基础功能
- im-friend: 好友关系服务,管理用户间的好友关系
- im-room: 聊天室服务,支持单聊、群聊等多种场景
- im-msg-store: 消息存储服务,保证消息可靠性和持久化
- im-push: 消息推送服务,确保消息实时送达
- im-common: 公共组件,包含工具类和通用配置
- im-framework: 框架层,提供统一的技术标准和规范
- im-rpc-api: RPC接口定义,实现服务间通信
- im-entity: 实体类定义,包含数据库映射关系
用户发送消息的过程包括以下步骤,确保消息的最终一致性和高可用性:
-
消息发送:
- 用户在客户端发送消息,首先通过WebSocket连接到 im-ws-gateway。
- im-ws-gateway 负责将消息转发到消息队列(RocketMQ)以解耦发送和接收过程。
-
消息接收与校验:
- im-receiver 服务从消息队列中获取消息,并进行基础校验,如检查发送者是否有发送权限。
- 校验通过后,im-receiver 将消息重新发布到队列中,等待进一步处理。
-
消息处理:
- im-processor 服务从队列中订阅消息,负责消息的持久化存储到数据库中。
- 处理完成后,消息通过消息队列传递给同步服务。
-
消息同步:
- im-sync 服务负责从队列中获取已处理的消息,并将其同步到所有在线的接收者。
- 同步服务确保所有接收者都能实时接收到最新消息。
-
失败处理:
- 在任何步骤中,如果处理失败,相关服务可以将消息重新发送回队列,进行重试,确保消息不会丢失。
-
im-receiver:
- 负责接收来自WebSocket网关的消息。
- 进行消息的初步校验和权限检查。
- 将校验通过的消息推送到消息队列中。
-
im-processor:
- 从消息队列中订阅消息。
- 负责消息的持久化存储。
- 将处理完成的消息推送到同步服务的队列。
-
im-sync:
- 负责从处理服务接收消息。
- 将消息同步到所有在线的接收者,确保消息的实时性和一致性。
这种微服务架构设计支持高并发处理,通过消息队列的削峰填谷能力,保证系统在高负载情况下的稳定性。同时,服务之间的解耦使得系统更容易扩展和维护。
- 服务无状态化,支持水平扩展
- 支持分布式多机房部署,异地容灾
- 消息队列削峰填谷
- 核心服务多副本部署
- 可全链路数据加密
- 用户身份认证
- 消息防重放
- 敏感词过滤
- 单聊/群聊支持
- 消息类型:文本、图片、语音、视频等
- 在线状态管理
- 消息提醒与免打扰
- 历史消息查询
- 消息实时性:99.9%消息延迟<500ms
- 系统容量:单集群支持百万级在线用户
- 消息可靠性:消息到达率99.99%
- 系统可用性:99.99%
- 支持业务功能水平扩展
- 支持存储容量垂直扩展
- 开发环境
- 测试环境
- 预发布环境
- 生产环境
- 基于Kubernetes编排
- 支持服务自动扩缩容
- 统一的日志收集和监控
- 消息回执
- 消息撤回
- 消息转发
- 消息压缩
- 连接复用
- 智能路由
- 缓存优化
- 系统性能监控
- 业务指标监控
- 异常实时告警
- 配置中心
- 服务治理
- 链路追踪
- 日志分析