您当前位置:资讯中心 >服务器 >浏览文章

听说你会架构设计?来,弄一个微信群聊系统

来源:互联网 日期:2023/11/1 18:10:45 阅读量:(0)

1. 引言

大家好,我是小?。

当我那天拿着手机,正在和朋友们的微信群里畅聊着八卦新闻和即将到来的周末计划时,忽然一条带着喜意的消息扑面而来,消息正中间写着八个大字:恭喜发财,大吉大利。

图片图片

抢红包!!相信大部分人对此都不陌生,那微信的这个群聊系统是如何设计的,让我们可以方便地聊天、分享图片和表情,还有那个神奇的红包功能呢?

这个问题一直困扰着,于是我决定深入了解一下,看看微信的群聊系统背后的设计是怎样的。

微信群聊系统设计

微信作为 10 亿用户级别的全民 App,想必大家都用过,微信建群功能是微信里面核心的一个能力,它可以将数百个好友或陌生人放进一个群空间。

图片图片

或许你已经在微信上体验过很多次群组聊天,但你是否好奇过这个背后的系统是如何设计的呢?

今天我们就来探讨一下。

2. 系统需求

2.1 系统特点与功能需求

微信群聊功能是社交应用的核心功能之一,它允许用户创建自己的社交圈子,与家人、朋友或共同兴趣爱好者进行友好地交流。

以下是微信群聊系统的核心功能:

图片图片

  • 创建群聊:用户可以创建新的聊天群组,邀请其他好友用户加入或与陌生人面对面建群。
  • 群组管理:群主和管理员能够管理群成员,设置规则和权限。
  • 消息发送和接收:允许群成员发送文本、图片、音频、视频等多种类型的消息,并推送给所有群成员。
  • 实时通信:消息应该能够快速传递,确保实时互动。
  • 抢红包:用户在群聊中发送任意个数和金额的红包,群成员可以抢到随机金额的红包。

2.2 非功能需求:应对高并发、高性能、海量存储

当我们面对 10 亿微信用户每天都可能使用建群功能的情景时,就需要处理大规模的用户并发。这就引出了系统的非功能需求,包括:

  • 高并发:系统需要支持大量用户同时创建和使用群组,以确保无延迟的用户体验。
  • 高性能:快速消息传递、即时响应,是数字社交的关键。
  • 海量存储:系统必须可扩展,以容纳用户生成的海量消息文本、图片及音视频数据。

3. 概要设计

在概要设计中,我们考虑了系统的核心组件和基本业务的概要设计。

3.1 核心组件

微信群聊系统中,会涉及到如下核心组件和协议。

图片图片

  • 客户端:接收手机或 PC 端微信群聊的消息,并实时传输给后台服务器
  • Websocket传输协议:支持客户端和后台服务端的实时交互,开销低,实时性高,常用于微信、QQ 等 IM 系统通信系统
  • 长连接集群:与客户端进行 Websocket 长连接的系统集群,并将消息通过中间件转发到应用服务器
  • 消息处理服务器集群:提供实时消息的处理能力,包括数据存储、查询、与数据库交互等
  • 消息推送服务器集群:这是信息的中转站,负责将消息传递给正确的群组成员
  • 数据库服务器集群:用于存储用户文本数据、图片的缩略图、音视频元数据等
  • 分布式文件存储集群:存储用户图片、音视频等文件数据

3.2 业务概要设计

群聊创建

  • 唯一ID分配:当用户请求创建一个新群组时,系统生成一个唯一的群组 ID,通常可以使用分布式 ID 生成器如雪花算法(Snowflake)或直接使用数据库自增 ID。这里我们为了实现简便,采用 MySQL 的自增 ID。
  • 群组信息存储:将群组 ID 和相关信息(例如群名、创建者 ID 等)存储在群组数据库中。
  • 成员关联:将群主添加为群组的创始成员,同时创建者也会成为管理员。
  • 消息历史记录:为了确保新成员能够访问以前的消息,将此新群组的群组 ID 与用户消息关联存储。

除了拉好友建群,微信还实现了面对面建群的能力。

接下来,我们深入探讨了三到四个核心功能的详细设计,包括面对面建群、消息发送与接收及抢红包功能。

4. 面对面建群

用户发起面对面建群,并输入一个 4 位数的随机码,周围的用户输入该随机码后可加入群聊,面对面建群功能通常涉及数据表设计和核心业务交互流程如下。

4.1 数据库表设计

  1. User 表:存储用户信息,包括用户 ID、昵称、头像等。
  2. Group 表:存储群组信息,包括群 ID、群名称、创建者 ID、群成员个数等。
  3. GroupMember 表:关联用户和群组,包括用户 ID 和群 ID。
  4. RandomCode 表:存储面对面建群的随机码和关联的群 ID。

4.2 核心业务交互流程

图片图片

用户 A 在手机端应用中发起面对面建群,并输入一个随机码,校验通过后,等待周围(50 米之内)的用户加入。此时,系统将用户信息以 HashMap 的方式存入缓存中,并设置过期时间为 3min。

{随机码,用户列表[用户A(ID、名称、头像)]}
关键字:
声明:我公司网站部分信息和资讯来自于网络,若涉及版权相关问题请致电(63937922)或在线提交留言告知,我们会第一时间屏蔽删除。
有价值
0% (0)
无价值
0% (10)

分享转发:

发表评论请先登录后发表评论。愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。