十万用户规模即时通信(IM)架构设计
创始人
2025-07-05 04:10:25
0

业务背景

假设你现在正在一个创业公司担任 CTO,因为微信工作生活娱乐不区分,已经发生了很多次将敏感信息(可以自行脑补一下)发错人甚至发错群的尴尬事件了!你司 CEO 决定做一款 IM 工具,为了区别微信和 QQ 大众化的 IM 需求,你们公司主打安全 IM,这款产品的竞争力如下:主打私密聊天,严格控制私密好友的数量,而不是像微信一样,买个菜都可能要加个微信。

【公司背景】

1. 技术团队大约10个人,后端6个,前端2个,Android 2个,iOS 还没有;

2. 后端 Java 为主,大部分是 P6~P7;

3. 后端具备 MySQL、微服务、Redis 等开发使用经验;

4. 后端没有大数据和推荐相关经验

业务基本场景

图片图片

1. 每个用户都会通过算法生成非对称的公钥和私钥;

2. 用户发送的消息会通过公钥加密,接收用户的消息使用自己的私钥解密;

3. 只能创建一对一聊天;

4. 聊天消息“阅后即焚”,最多只保留60分钟;

5. 无需使用手机号注册;

6. 每个用户最多20个好友

总体架构思路

老板说我们3年内要做到1千万注册用户,作为 CTO 的你应该如何做架构设计?

十万:落地快,但是如果业务发展很快,架构很快不适应了怎么办?

百万:落地慢一些,但同样面临业务发展过快的风险。

千万:落地时间可能要6个月以上,但基本上3年内无需再动架构。

超前设计,架构真的不用动么?

图片图片

1. 业务规模变化

可以超前化设计应对。

2. 业务多样性

无法预测会做什么功能,业务多样性会导致团队人数增多到多少更加无法预测。

3. 技术发展

无法预测,尤其是和法律政策相关的,例如区块链、国产化等。

十万用户规模存储性能估计算

图片图片

【注册】

十万用户规模

【登录】

虽然 IM 是比较活跃的产品,但由于是全新的产品,我们假设十万注册用户,每天活跃用户有40%,登录每天4万。

【加好友】

每个活跃用户最多20个好友,好友关系数 4万 * 20 = 80万 关系数据

【聊天】

假设每个活跃用户每天向5位好友发送100条消息,则消息数量为:4万 * 5 * 100 = 2000万,且数据当天基本都被删除了,所以写入、读取、删除次数都可以估算为2000万

存储架构设计

图片图片

十万用户规模计算性能估算

图片图片

【注册】

1年达到十万用户注册,注册 TPS 很低。

【登录】

虽然 IM 是比较活跃的产品,但由于是全新的产品,我们假设十万注册用户,每天活跃用户有40%,假设登录时间集中在早晚4小时,登录 TPS均值:4万 / 14400 = 3。

【加好友】

每个活跃用户最多20个好友,好友关系数 4万 * 20 = 80万数据,按照1年内来计算,TPS 可以忽略不计。

【聊天】

假设每个活跃用户每天向5位好友发送100条消息,则消息数量为:4万 * 5 * 100 = 2000万;

假设每天集中在早中晚3个时间段6小时内(早上1小时中午1小时晚上4小时);

• 发送消息 TPS:2000万/(3600*6)≈ 1000;

• 读取消息 QPS = 发送消息 TPS,删除消息 TPS ≈ 发送消息 TPS

计算架构之负载均衡

图片图片

计算架构之缓存架构

图片

可扩展架构设计

图片图片

高可用架构设计 - 同城数据灾备

图片图片

Redis 存储的 IM 消息数据为什么不做跨机房备份?

1.性能问题 2.一致性问题 3.成本问题

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...