IM - 系统架构设计
2021-09-12 本文已影响0人
红薯爱帅
1. 概述
IM系统架构设计,如下图,主要分为两部分:
- 云盘系统Cpan(蓝色部分)。为了兼容已有云盘系统,提供
Web SM
和IM Portal
,接收来自云盘用户的IM需求,包含消息收发
、好友列表
等 - 即时通讯系统IM(黄色部分)。支持Desktop和Mobile两大终端的用户IM需求,包含
登录登出
、通讯录
、个人中心
、消息收发与搜索
、群组管理
等
本文重点介绍即时通讯IM
的系统设计,包含设计思路、每个模块的功能、主要流程介绍、常见问题解答。
2. 系统设计
im-architecture-c4model.jpg2.1. 系统目标
企业级即时通讯系统,在提高团队沟通协作效率
的基础上,实现万物互联
场景
- 团队沟通协作,相关功能包含:即时通讯、云盘、多人会议、日程管理、任务管理,等
- 万物互联,相关功能包含:三方系统助手、Webhook支持、公共Robot
2.2. 设计思路
-
微服务架构
,保证服务的双向扩展,具有较好的容灾性 -
控制信令
与流数据
分离,更好地保证控制信令
的高可用,以及流数据
的即时性 -
消息总线
,更好地保证微服务的高内聚
和低耦合
特性,可实现同步
或异步
的业务数据流 -
数据库读写分离
,深入分析业务需求,合理设计数据库模型
,尽可能达到读写分离,尽可能不使用数据库事务
-
服务幂等
,业务级别实现横向扩展
3. 模块介绍
im-context.png3.1. Portal
定位
- IM用户的第一入口,通信协议gRPC
- 反向代理Passport、Account、Group、Search、Robot等微服务模块
功能
- 实现用户Session保持,而不是每次Request都携带Token
- 实现Request/Response的统一规范化,达到协议格式清晰可维护
- 实现复杂业务流,例如用户的一个Request,可能需要拆解成多个后台Request,由不同的微服务协作完成
- 支持后台微服务地址可配置
- 支持幂等,可横向扩展
3.2. Passport
定位
- SSO(Single Sign On)服务,实现所有系统的统一登录认证,支持多种登录方式,输出JWT
功能
- 注册功能,支持
表单注册
(含手机号验证、Email验证),及与已有账号系统对接
- 登录功能,支持
账号登录
、二维码登录
、手机号登录
等多种登录方式 - 登出功能,支持一键
全系统
登出(保存业务系统的callback) -
当前
或历史
登录操作查看,包含登录设备、登录时间、登录方式、登录IP等信息 - 支持RBAC模型(Role-Based Access Control,基于角色的访问控制)
- 支持幂等,可横向扩展
- 支持账号基本信息的CRUD操作,包含姓名、手机号、邮箱、工号、出生年月、性别等
3.3. Account
定位
- IM账号的专有信息管理
功能
- 支持IM系统专有信息的CRUD操作,包含用户团队组织架构、好友信息,以及
IM Setting
相关信息,例如皮肤、页面布局等 - 支持IM用户获取
可用SM地址
列表,路由策略可基于办公地点就近
、团队默认SM
等因素判定 - 支持幂等,可横向扩展
3.4. Search
定位
- 历史消息的检索
功能
- 消息搜索功能,可基于日期、群组、发送人、接收人、消息关键字进行筛选,支持分页和排序
- 支持幂等,可横向扩展
3.5. Group
定位
- 群组管理
功能
- 群组的创建与解散
- 群组的修改功能,包含修改名称、公告及管理员
- 群组邀请与移除成员,邀请时支持新人查看最近N条记录
- 群组退出和置顶功能
- 群组静默功能,可只静默Robot消息,或全部静默
- 支持幂等,可横向扩展
3.6. Robot
定位
- 支持
人与物
、物与物
的互联,此处的物
,可指一个软件系统、一个IoT设备等
功能
- 基于群组,添加常用第三方Robot,例如Sentry、Prometheus、Gitlab等
- 基于群组,支持自定义机器人,通过Webhook完成消息通知
- 支持添加公共Robot为好友,例如打卡通知、天气提醒、日程管理等
- 支持幂等,可横向扩展
3.7. Storage
定位
- 支持对象存储
功能
- 图片的上传与展示,展示参数可支持水印、指定比例的缩放,或者人工智能识别等
- 文件的上传与下载,支持上传进度和下载进度
- 图片展示及文件下载的权限校验
- 定时清理功能,保存最近3个月,或者最多1G
- 支持幂等,可横向扩展
3.8. Router
定位
- Broker的维护者
功能
- 提供API,实现Broker的
服务发现
功能,包含注册、注销,以及回调当前在线的Broker,通知其新上线的Broker信息 - 维护
在线用户路由表
,即OnlineUserId(OnlineGroupId)
与Broker
的对应关系(用户上线/下线信息,由每个Broker主动发送给Router) - 当
在线用户路由表
发生变化时,通知到每个Broker - 支持幂等,可横向扩展
3.9. SM (Session Manager)
定位
- IM用户的第二入口,通信协议gRPC
- 维护
IM系统与用户
的全双工
TCP通道
功能
- IM用户全双工TCP通道的创建、维护、使用和销毁,其中,维护可采用
定时心跳
- IM消息的收发,需要保证
IM消息四大特性
- 记录
当前在线用户列表
- 每次启动与退出,需要在Account服务完成注册和注销,可通过Redis实现
- 支持幂等,可横向扩展
3.10. MQ
定位
- 消息总线,实现各个微服务的低耦合和双向可扩展
功能
- 消息的成功投递,MQ完成持久化后才算成功投递
- 消息的安全消费,消息处理成功,且有下一个服务明确接棒,才算安全消费
3.11. Recorder
定位
- 消息记录员
功能
- 监听IM系统所有消息,完成消息入库
- 支持幂等,可横向扩展
3.12. Auditor
定位
- 消息审计员
功能
- 审计内容:消息内容是否合法,不包含反党叛国、黄赌毒等语义
- 审计设备:移动设备不能接收文件
- 消息鉴权:鉴权sender与receiver是否好友(或同事)、sender是否是群组成员,等
- 支持幂等,可横向扩展
4. 小结
本文结合IM主流需求,阐述了IM系统架构。从宏观层面,希望大家有一个初步的认识。
接下来,本专题将深入介绍核心功能的实现逻辑。(请客官坐稳扶好)