# 《分布式IM系统》需求设计-第04节:分布式IM即时通讯系统技术流程梳理

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
课程视频:https://t.zsxq.com/144SWUMPi (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本节难度:★★★☆☆
  • 本节重点:从技术角度梳理分布式IM即时通讯系统的流程,用户请求交互链路、发送消息交互链路、单聊交互链路和群聊交互链路,使研发人员能够从技术角度理解分布式IM即时通讯系统的整个技术流程与技术交互过程。
  • 课程视频:https://t.zsxq.com/144SWUMPi (opens new window)

大家好,我是冰河~~

在前面的文章中,我们对建设分布式IM即时通讯系统过程中要实现的目标与存在的挑战有了大致的了解。并且大致梳理了分布式IM即时通讯系统的功能需求和业务流程,心中大概明确了要开发哪些功能。除了这些,作为技术人员,我们还要从技术的角度梳理下分布式IM即时通讯系统的交互流程。

# 一、前言

运营或产品经理从实际场景和业务角度提出对应的业务需求后,作为研发人员,不仅需求理解场景和业务需求,还需要将这些场景和业务需求转化成技术实现方案。从技术的角度出发,来梳理需要实现的逻辑与交互流程,例如,用户请求交互链路、发送消息交互链路、单聊交互链路和群聊交互链路等,这样才能从整体链路上理解分布式IM即时通讯系统的实现。

# 二、本章诉求

在正式设计和编码实现分布式IM即时通讯系统之前,除了要理解业务需求和业务流程外,作为技术人员,还有一项非常重要的事情,那就是从技术角度好好梳理下分布式IM即时通讯系统的请求链路,交互逻辑和技术流程,以便更好的设计和研发分布式IM即时通讯系统。

本章,就从技术的角度出发,梳理下分布式IM即时通讯系统的用户请求交互链路、发送消息交互链路、单聊交互链路和群聊交互链路。

# 三、用户请求交互链路

从技术的角度来讲,用户通过客户端访问分布式IM即时通讯系统,一般都是通过域名来访问的,通过域名访问系统,就需要DNS服务器做域名解析,将域名解析成对应的IP地址来访问指定的服务器。进入服务器后,会通过Kong/OpenResty/Nginx进入系统的业务网关,再到我们部署的后端平台,IM即时通讯服务。由后端平台、IM即时通讯服务再到基础服务,由基础服务再到数据存储服务。向客户端返回数据时,再按照相反的顺序层层返回。整体链路如图4-1所示。


可以看到,当用户通过域名访问分布式IM即时通讯系统时,会经过如下的请求链路。

(1)用户通过PC/H5/小程序/APP访问分布式IM即时通讯系统时,请求可能会分为HTTP请求、TCP请求或者是WebSocket请求,不管是哪种请求,都会先经过DNS服务器对域名进行解析,解析出IP地址,通过IP地址定位到最终的服务器。

(2)请求进入服务器后,会先经过Kong/OpenResty/Nginx等流量网关或者负载均衡器,将请求发往业务网关。

(3)请求进入业务网关后,如果是HTTP请求,则业务网关会将请求路由到后端平台,如果后端平台此时的业务需要发送即时消息,则后端平台会通过集成的SDK向IM即时通讯服务发送即时消息。如果是TCP请求或者WebSocket请求,则业务网关会将请求路由到IM即时通讯服务,由IM即时通讯服务来处理即时消息。

(4)后端平台和IM即时通讯服务接收到请求后,进行对应的业务处理后,都会调用基础服务的接口来进一步处理业务。

(5)基础服务执行完业务逻辑,会将数据写入数据存储服务,比如Redis、MySQL、ES等数据存储服务中。

(6)后端平台会集成IM即时通讯SDK,并且会集成对接OpenAI大模型的SDK。

当分布式IM即时通讯系统处理完业务逻辑向客户端响应结果数据时,会经过如下的响应链路。

(1)如果客户端只是调用后端平台的接口,来执行后端平台的逻辑,例如搜索用户、查看好友列表、搜索群组、查看群列表等不涉及即时通讯的逻辑时,后端平台处理完业务逻辑并记录相关的数据后,就会按照与请求相反的链路响应数据。

(2)如果客户端调用后端平台的接口,通过后端平台的接口来发送即时消息时,后端平台处理完业务逻辑并记录相应的数据后,会通过集成的SDK服务向IM即时通讯服务发送即时消息,IM即时通讯服务接收到消息后,会通过客户端与IM即时通讯服务建立的长链接,向客户端发送即时消息。

(3)如果客户端是通过WebSocket或者TCP等协议向IM即时通讯服务发送消息,IM即时通讯服务处理完业务逻辑并记录数据后,会通过客户端与IM即时通讯服务建立的长链接,向客户端发送即时消息。

# 四、发送消息交互链路

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码