# 《分布式IM系统》通用模型-第01节:分布式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/15uoKuaGL (opens new window)

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

  • 本章难度:★★☆☆☆
  • 本章重点:对分布式IM即时通讯系统的通用交互模型进行设计,通用模型涵盖:各系统和服务之间的交互模型,用户终端与大后台平台和即时通用服务之间的交互模型。重点掌握通用交互模型的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。
  • 课程视频:https://t.zsxq.com/15uoKuaGL (opens new window)

大家好,我是冰河~~

数据交互模型是数据在网络中传输的重要基础模型,设计好数据模型,不仅对数据在网络中传输起着至关重要的作用,同时还规范了数据在客户端与服务端和服务端各系统之间的数据交互规范。

# 一、前言

分布式IM即时通讯系统整体涵盖大后端平台,SDK接入服务、即时通讯后端服务、OpenAI大模型接入服务、大前端UI等项目工程,因此,数据在分布式IM即时通讯系统中传输时,不只是在客户端与服务端之间交互,还会涉及到服务端各系统之间的数据交互,此时,我们可以在客户端与服务端之间,服务端各系统之间的数据交互过程中,抽象出通用的数据模型。

# 二、本章诉求

对分布式IM即时通讯系统中客户端与服务端之间,服务端各系统之间通用的和共用的数据交互流程进行抽象和提炼,并对数据交互过程中的数据模型进行设计和实现。重点掌握通用交互模型的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

# 三、模型数据梳理

在梳理模型数据之前,我们再来看看分布式IM即时通讯系统的容器化架构设计图,如图1-1所示。


可以看到,在分布式IM即时通讯系统的设计中,数据不仅仅在客户端与大后端平台/即时通讯服务之间进行传输,也会在大后端平台和即时通讯服务两个后端服务之间进行传输。所以,我们需要将这些传输的数据进行梳理,提炼并设计出通用的数据模型。

我们可以仔细思考下,大致梳理出如下十种通用数据模型。

  • 登录信息模型:用户使用分布式IM即时通讯系统的功能时,需要对用户的登录信息进行校验,只有校验通过的用户才能正常使用系统的功能,此时就需要设计用户的登录信息模型。
  • Session信息模型:用户登录系统后,如何管理用户的登录信息,这就涉及到Session信息的管理,此时就需要设计Session的数据模型。
  • 用户信息模型:用户在系统中发送消息时,如何绑定消息和发送者的信息?此时,就需要单独设计用户的信息模型。
  • 心跳数据模型:客户端与即时通讯服务之间建立长连接后,为了避免长期未使用造成的断连问题,需要在客户端与即时通讯服务之间设计心跳机制,此时就需要设计心跳数据模型。
  • 私聊数据模型:用户在系统中可以与其他用户实现一对一单聊,此时,就需要实现私聊数据模型。
  • 群聊数据模型:用户在系统中可以实现在群组中聊天,群组中的群成员都能接收到当前用户的聊天内容,此时,就需要实现群聊的数据模型。
  • 通用发送数据模型:即时通讯服务向客户端响应登录结果,发送心跳数据、发送单聊消息和群聊消息,即时通讯服务都会以通用发送数据模型来发送数据。此时,就需要设计和实现通用发送数据模型。
  • 通用接收数据模型:用户通过大后端平台发送消息时,大后端平台会通过即时通讯SDK向RocketMQ集群发送消息,即时通讯服务集群会监听RocketMQ集群中对应的Tocpic数据,此时的数据交互就是通过通用接收数据模型来完成的。此时,就需要设计和实现通用接收数据模型。
  • 响应结果数据模型:发送消息成功后,需要响应消息的发送结果,此时,就是以响应结果数据模型来完成的。因此,就需要设计和实现响应结果的数据模型。
  • RocketMQ数据模型:当用户发送消息时,会涉及到数据在RocketMQ中的传输过程,此时,就需要设计和实现RocketMQ的数据模型。

# 四、数据模型设计

# 查看完整文章

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