不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • Python

  • GO

  • Java

  • 业务问题

    • 01.微博消息推送Feed流设计
    • 02.秒杀系统架构 ✅
    • 03.支持10万QPS的会员系统 ✅
    • 04.支付系统的设计 ✅
    • 05.即时通讯系统设计
      • 01.即时通讯系统设计
        • 0、需求说明
        • 1、总体架构设计
        • 2、长连接的管理
        • 1)WebSocket 或 TCP 连接
        • 2)连接池管理
        • 3、消息推送的优化
        • 1)消息推送架构
        • 2)消息可靠性
        • 4、离线消息处理和历史消息存储
        • 1)离线消息处理
        • 2)历史消息存储
        • 5、消息延迟和网络抖动的处理机制
        • 1)网络抖动处理
        • 2)消息延迟优化
    • 06.外卖系统设计
    • 07.打车系统设计
    • 09.内容分发网络CDN设计
    • 13.日志系统的设计
    • 14.百亿规模浏览记录
    • 15.十亿数据批量写入mysql
  • 关键技术

  • 项目常识

  • 计算机基础

  • 常识
  • 业务问题
xiaonaiqiang
2024-09-23
目录

05.即时通讯系统设计

架构设计

  • 客户端通过WebSocket/TCP与服务器保持长连接,消息推送模块确保消息可靠到达,消息队列缓冲高并发消息
  • 离线消息模块存储并推送离线消息,历史消息模块保存记录,网络抖动处理模块通过心跳包、超时机制保障消息不丢失

长连接管理

  • WebSocket适合浏览器/移动端,TCP适合非浏览器应用
  • 连接池管理活跃用户长连接,心跳机制检测连接,断线重连保障体验

消息推送优化

  • 消息路由确保准确送达,负载均衡避免单点故障
  • ACK机制确认消息到达,重传机制保障可靠性

离线与历史消息处理

  • 离线消息缓存于Redis,上线后推送
  • 历史消息存储于MySQL/MongoDB,索引优化查询效率,定期压缩归档

延迟与抖动处理

  • 网络抖动时,客户端缓存消息,服务器重传未送达消息
  • 优先级队列优先发送紧急消息,分片传输减少大消息延迟,流控机制动态调整推送速度

# 01.即时通讯系统设计

# 0、需求说明

  • 设计要点:关注的是消息的实时性、可靠性、离线消息处理、消息队列设计、长连接维护等
  • 关键点:
    • 长连接的管理(WebSocket 或 TCP 连接)
    • 消息推送的优化,如何确保消息到达
    • 离线消息处理和历史消息存储
    • 消息延迟和网络抖动的处理机制

# 1、总体架构设计

  • 即时通讯系统的设计需要确保高实时性、高可靠性、支持离线消息和消息队列等关键特性
  • 客户端:与服务器建立长连接,处理消息的发送和接收
  • 长连接管理模块:通过WebSocket或TCP连接保持与客户端的实时通信
  • 消息推送模块:负责消息的路由和转发,确保消息能够可靠地到达目标客户端
  • 消息队列系统:缓冲和调度未发送或延迟的消息,保障系统的高并发能力
  • 离线消息处理模块:存储离线用户的消息并在用户重新上线时推送
  • 历史消息存储模块:保存消息的历史记录,以供查询
  • 网络抖动和消息延迟处理模块:通过心跳包、超时机制等,确保网络波动时消息不丢失

# 2、长连接的管理

# 1)WebSocket 或 TCP 连接

  • WebSocket是一种基于HTTP协议的全双工通信协议,适合现代Web应用
  • 而TCP连接则提供了更底层、更灵活的控制能力
  • WebSocket:适用于基于浏览器的客户端和现代移动应用,能通过HTTP握手后保持长连接
  • TCP连接:适用于非浏览器应用(如桌面客户端、特定设备),其可靠性和性能更高

# 2)连接池管理

  • 连接池:

    • 为每个活跃用户维护一个持久连接,系统使用连接池对每个客户端的长连接进行管理
    • 通过连接池优化多连接的管理,减少资源消耗和重复的连接创建销毁
  • 心跳机制:

    • 周期性发送心跳包检测连接的有效性,以便及时断开无效连接
  • 断线重连:

    • 设计断线重连机制,允许客户端在网络中断时能够自动重连,保证用户体验的连续性

# 3、消息推送的优化

# 1)消息推送架构

  • 消息路由:
    • 采用中心化的消息路由服务器(如消息中转服务器),确保消息通过最优路径发送给目标用户
    • 消息路由系统通过用户ID或Session ID映射到对应的设备和连接,确保消息可以准确送达
  • 负载均衡:
    • 在高并发场景下,采用多服务器或集群的方式
    • 通过负载均衡(如Nginx、HAProxy)将请求分发至不同的消息服务器,避免单点故障

# 2)消息可靠性

  • ACK机制:
    • 每次消息发送后,客户端需返回ACK(确认包)来确认消息已成功到达
    • 如果在设定时间内未收到ACK,消息推送模块会进行重传
  • 重传机制:
    • 在网络不稳定或延迟较大时,系统需要提供重试机制
    • 确保未确认的消息会再次尝试发送,直到收到确认或超过重试次数

# 4、离线消息处理和历史消息存储

# 1)离线消息处理

  • 消息缓存:
    • 当目标用户离线时,消息会暂时存储在离线消息队列中,等待用户上线后推送
    • 可以通过Redis等内存缓存系统来快速存储这些离线消息
  • 消息推送策略:
    • 用户上线后,系统会将离线期间的消息推送给用户
    • 考虑到用户的网络带宽,消息推送可以按批次或按优先级推送

# 2)历史消息存储

  • 存储方式:
    • 采用数据库系统(如MySQL、MongoDB等)保存历史消息,支持查询和回溯
    • MongoDB可以较好地支持文档型存储结构,并且具有很好的扩展性
  • 索引优化:
    • 为了提高历史消息的查询效率,可以根据消息的时间戳、发送者、接收者等字段进行索引优化
  • 数据压缩和归档:
    • 为减少存储空间,历史消息可以采用压缩方式(如gzip)存储,定期对超过一定时间的历史消息进行归档处理

# 5、消息延迟和网络抖动的处理机制

# 1)网络抖动处理

  • 重传和缓存机制:
    • 在网络抖动较大时,客户端可以缓存一部分待发送的消息等待网络恢复稳定后发送
    • 服务器端也可暂存未能成功送达的消息
  • 超时检测:设置消息的超时时间,当消息超过规定时间未送达时,重新进行传输
  • 智能重试机制:系统应根据当前网络状况调整重试频率和重传次数,避免因频繁重传导致带宽浪费

# 2)消息延迟优化

  • 优先级队列:为不同类型的消息设置优先级(如紧急消息、普通消息),优先发送高优先级的消息
  • 分片传输:对于大消息(如图片、视频等),可以进行分片传输,每个分片独立确认,减少传输时间
  • 流控机制:动态调整消息推送的速度,防止在客户端接收能力有限时因大量消息推送导致延迟过高
上次更新: 2025/2/19 16:42:39
04.支付系统的设计 ✅
06.外卖系统设计

← 04.支付系统的设计 ✅ 06.外卖系统设计→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式