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

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

来源:互联网 日期:2023/11/8 7:05:07 阅读量:(0)

大家好,我是小?,一个漂泊江湖多年的 985 非科班程序员,曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。

1. 引言

前些天所在部门出去团建,于是公司行政和 HR 拉了一个微信群,发布一些跟团和集合信息。

当我正在查看途径路线和团建行程时,忽然一条带着喜意的消息扑面而来,消息上赫然带着八个大字:恭喜发财,大吉大利。

图片图片

抢红包!!原来是公司领导在群里发了个红包,于是引得群员哄抢,气氛其乐融融。

毕竟,团不团建无所谓,不上班就很快乐;抢多抢少无所谓,有钱进就很开心。

打工人果然是最容易满足的生物!</手动狗头 ??>

我看着群里嬉戏打闹的聊天,心中陷入了沉思:微信这个集齐了陌生人聊天、文件分享和抢红包功能的群聊设计确实有点意思,如果在面试或者工作中让我们设计一个群聊系统,需要从哪些方面来考虑呢?

群聊系统设计

面试官:微信作为 10 亿用户级别的全民 App,有用过吧?

我:(内心 OS,说没用过你也不会相信啊~)当然,亲爱的面试官,我经常使用微信来接收工作消息和文件,并且经常在上面处理工作内容。

面试官:(内心 OS:这小伙子工作意识很强嘛,加分!)OK,微信的群聊功能是微信里面核心的一个能力,它可以将数百个好友或陌生人放进一个群空间,如果让你设计一个用户量为 10 亿用户的群聊系统,你会怎么设计呢?

2. 系统需求

2.1 系统特点与功能需求

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

以下是群聊系统常见的几个功能:

图片图片

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

2.2 非功能需求

除了功能需要,当我们面对 10 亿微信用户每天都可能使用建群功能的情景时,还需要处理大规模的用户并发。

这就引出了系统的非功能需求,包括:

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

面试官:嗯,不错,那你可以简要概述一下这几个常用的功能吗?

3. 核心组件

我:好的,我们首先做系统的概要设计,这里涉及到群聊系统的核心组件和基本业务的概要说明。

3.1 核心组件

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

图片图片

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

3.2 业务概要说明

在业务概要说明里,我们关注用户的交互方式和数据存储......

面试官:稍等一下,群聊系统的好友建群功能比较简单,拉好友列表存数据就可以了!你用过面对面建群吧,可以简要说一下如何设计面对面建群功能吗?

我:(内心 OS,还好之前在吃饭时用过面对面建群结账,不然就G了),好的,群聊系统除了拉好友建群外,还支持面对面建群的能力。

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)

分享转发:

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