No.179# IM即时通信知识点梳理

2023-02-23 16:36:35 浏览数 (2)

引言

客服答疑、私信、群聊、直播等全部或者部分场景往往公司必须的。

本文主要走查下IM即时通信的逻辑架构以及常用的消息处理策略。

本文主要内容有:

  • 逻辑架构分层
  • 通信基本场景
  • 消息处理策略

一、逻辑架构分层

1、逻辑架构图示
2、逻辑分层说明
  • 负载均衡:提供四层/七层负载均衡
  • 网关长连:提供长连接网关、该层也包含第三方厂商消息推送通道
  • 路由分发:根据分发到不同的业务场景中的转发服务,避免和长连接耦合
  • 业务逻辑:处理与即时通信相关的业务,单聊、群聊、打赏等
  • 内网网关:负责各个域特殊场景对接和交互
3、消息推送通道
  • 消息通过长连实现消息通信和推送
  • 长连接的心跳维护和保活
  • 当APP退出长连接关闭时可选择第三方辅助通道推送
  • 第三方厂商通道有:苹果手机APNs(Apple Push Notification service)服务、安卓手机GCM(Google Cloud Messaging)服务、厂商公共推送服务。
4、消息发送流程
  • userA发送一条消息到userB
  • userA发送一条消息
  • 消息通过IM系统存储
  • IM系统推送该消息到userB

二、通信基本场景

通信基本场景有:消息内容、消息索引、最近联系人、未读消息等。

未读还可以分为:会话未读以及总未读,需要各自单独维护。

另外架构也与场景关联,如果一个群聊允许5000人和一个只有3个人的群聊会有极大差异。

1、消息内容
  • 消息内容ID
  • 消息内容
  • 消息类型
  • 生产时间
2、消息索引
  • 用户ID
  • 关联用户ID
  • 收发消息类型
  • 消息内容ID
3、最近联系人
  • 用户ID
  • 关联用户ID
  • 消息内容ID

三、消息处理策略

1、发送重试策略
  • 发送消息需要收到IM端回执
  • 若未收到或超时需重试策略
2、幂等处理策略
  • 发送侧针对重试消息生成唯一的messageId
  • IM端根据messageId进行去重
3、消息推送确认
  • IM将消息推送给终端用户侧
  • 终端用户侧返回ack确认机制
  • 未收到消息IM端将重新推送
  • 终端用户侧会对消息幂等处理
4、消息的顺序性
  • IM服务端提供序号生成器
  • 保证群级别消息的顺序性
  • 序号生成器分布式高可用
  • 客户端对接收到的再整流
5、消息的安全性
  • 私有二进制协议代替Json等
  • 使用非对称加密传输协议
  • DNS被劫持和篡改等
6、处理的原子性
  • 使用分布式锁实现
  • 使用分布式事务实现
  • 原子操作的命令和脚本

0 人点赞