1. 引出主题
IM整体涉及的内容比较多, 做技术方案设计需要慎重, 可以先从功能列表以及核心case逐步的总结出技术方案
本文Agenda:
1. 查看功能列表
2. 核心case分析
3. 总结技术方案设计
适合阅读的对象:
1. 想要入门IM
2. 想要了解IM的方案设计是如何得出的
2. 如何做技术方案设计
1. 查看功能列表
功能清单 | ||||
| 一级分类 | 二级分类 | 三级分类 | 核心信息 |
用户管理 | 用户管理 | 注册 | 用户名+邮箱+密码 | |
登录 | 普通登录 | 用户名+密码 | ||
邮箱+密码 | ||||
忘记密码 |
| |||
好友管理 | 添加好友 | 陌生人搜索 | 邮箱/联系人ID | |
二维码 | ||||
添加好友列表 | 手机联系人 | |||
最近添加的联系人 | ||||
好友列表 |
| |||
用户Profile | 个人Profile |
| ||
好友Profile |
| |||
陌生人Profile |
| |||
好友查询 |
|
| ||
好友删除 |
|
| ||
IM | 会话模块 | 最近会话 | 最近会话列表 | 单聊+群聊+公众号 按照时间排序 |
发起会话 |
| |||
删除会话 |
| |||
会话置顶/取消置顶 |
| |||
会话未读数 |
| |||
会话查询 |
| |||
单聊 | 创建单聊 |
| ||
单聊编辑 |
| |||
发起群聊 |
| |||
消息免打扰 |
| |||
查找聊天记录 |
| |||
清空聊天记录 |
| |||
举报/投诉 |
| |||
群聊 | 创建群聊 |
| ||
群编辑 |
| |||
成员编辑 |
| |||
群聊名称 |
| |||
群公告 |
| |||
群管理 |
| |||
查找聊天记录 |
| |||
群置顶 |
| |||
保存到通讯录 |
| |||
公众号 |
|
| ||
消息模块 | 消息类型 | 文本消息 |
| |
语音消息 |
| |||
视频消息 |
| |||
文本翻译 |
| |||
机器人消息 |
| |||
系统消息 |
| |||
消息推送 | 推送消息展示 |
| ||
消息管理 | 消息搜索 |
| ||
消息搜索 |
| |||
单条消息操作 | 消息发送 |
| ||
消息删除 |
| |||
消息撤回 |
| |||
消息复制 |
| |||
消息转发 |
| |||
观测 | 系统可观测 | 业务漏斗 |
|
|
监控报警 |
|
| ||
问题排查 |
|
| ||
行为链路监测 |
|
|
从上图中, 我们可以总结出, 这个产品整体是包含了三部分的内容
1. 用户管理(包含登录App的用户个人+用户好友)
2. IM(会话+消息)
3. 系统可观测
2. 关键Case分析
问题的关键是要解决关键的问题
用户管理是一个比较老生常谈的话题, 可以先忽略. 可观测是技术内部的事情. 核心的是IM中的case. IM中比较重要的是消息的发送, 消息的接收, 以及会话的变更.
1. 消息的发送
分为几个步骤:
由于消息存在发送失败的可能, 站在用户的视角, 消息发送失败后, 是要能够重新发送的.
因而消息的发送, 分为以下几个步骤:
以普通的文本为例:
1. 用户输入信息
2. 消息本地入库, 设置为发送中.
3. 消息上屏.
4. 消息接口发送.
5. 消息发送状态变化.
如果是视频类等需要本地预处理的消息:
1. 用户选择文件
2. 消息本地入库, 设置为发送中
3. 消息上屏
4. 消息中的文件预处理(文件压缩 + 文件上传)
5. 本地消息更新
6. 消息发送
7. 消息发送状态变化
消息发送的图示如下
消息重发的图示如下
2. 消息的接收
消息的接收分为如下几个大的步骤
1. 客户端收到消息(主动拉取/被动接收)
2. 客户端检查消息的有效性
3. 消息入db库+进入到内存
4. 消息上屏
3. 会话的变更
会话变更的种类比较多, 如新创建了会话, 会话的属性更新(lastMsg, 未读数提醒类型), 会话删除等.
我们以新创建会话 和 会话的属性变更两个为例.
打开会话
会话属性变更
以会话提醒类型更改为例
4. 从核心case得出的IM的架构设计总结