IM - 系统架构设计

1. 概述

IM系统架构设计,如下图,主要分为两部分:

  • 云盘系统Cpan(蓝色部分)。为了兼容已有云盘系统,提供Web SMIM Portal,接收来自云盘用户的IM需求,包含消息收发好友列表
  • 即时通讯系统IM(黄色部分)。支持Desktop和Mobile两大终端的用户IM需求,包含登录登出通讯录个人中心消息收发与搜索群组管理

本文重点介绍即时通讯IM的系统设计,包含设计思路、每个模块的功能、主要流程介绍、常见问题解答。

im-architecture.jpg

2. 系统设计

im-architecture-c4model.jpg

2.1. 系统目标

企业级即时通讯系统,在提高团队沟通协作效率的基础上,实现万物互联场景

  • 团队沟通协作,相关功能包含:即时通讯、云盘、多人会议、日程管理、任务管理,等
  • 万物互联,相关功能包含:三方系统助手、Webhook支持、公共Robot

2.2. 设计思路

  • 微服务架构,保证服务的双向扩展,具有较好的容灾性
  • 控制信令流数据分离,更好地保证控制信令的高可用,以及流数据的即时性
  • 消息总线,更好地保证微服务的高内聚低耦合特性,可实现同步异步的业务数据流
  • 数据库读写分离,深入分析业务需求,合理设计数据库模型,尽可能达到读写分离,尽可能不使用数据库事务
  • 服务幂等,业务级别实现横向扩展

3. 模块介绍

im-context.png

3.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系统架构。从宏观层面,希望大家有一个初步的认识。

接下来,本专题将深入介绍核心功能的实现逻辑。(请客官坐稳扶好)

你可能感兴趣的:(IM - 系统架构设计)