与im结缘是在2022年,因为此类系统有足够大的挑战性,所以我对此如痴如醉,之前做过架构以及细节方面的设计,但是一直没有落地。不落地的设计不是好设计。所以有了这个项目。 目前项目处于前期阶段,后期一点点完善并将补上架构图和我能想到的所有设计细节!
想要设计一个好的im系统,是很有难度的,本项目将尽可能达到以下几点:
- 高并发
- 高可用
- 高性能
- 稳定可靠
- 灵活好扩展
- 可观测
想要实现上边的几点,将不可避免的需要集成很多中间件或框架,如下:
- 已集成
- SpringBoot【项目搭建】✅
- Netty【长连接服务器】✅
- Spring Cloud Alibaba Nacos【配置中心】✅
- Dubbo【rpc调用,利用长连接做消息转发】✅
- zookeeper【暂时用处只是dubbo注册,后期如果没有其他用处可能移除,让dubbo注册到nacos】
- Redis【缓存,分布式锁】✅
- RocketMQ【解耦、削峰】✅
- Mybatis Plus【ORM】✅
- Mysql【数据存储】✅
- Spring Cloud GateWay 【网关】✅
- Oauth2 + Spring Security 【认证&鉴权】✅
- 待集成
- Sentinel 【限流】
- docker+k8s【项目部署】
- prometheus + grafana【服务监控】
- SkyWalking 【链路追踪】
- ElasticSearch【聊天记录等搜索】
- Jmeter+python脚本【压测】
- redis集群部署
- elasticsearch集群部署
- canal 数据同步 mysql同步到es
- mysql分库分表
- 等等
- 登录【已实现】✅
- 单聊【已实现】✅
- 群聊【准备采用写扩散模型】
- 消息送达ack【保证消息可靠不丢失】
- 消息有序性【通过消息id来实现】
- 撤回
- 已读
- 离线消息【push+pull】
- 最近会话
- 音视频,位置,语音,图片消息
- 直播
- 等...
其他细节待补充,完善中 ~ 。