一、《十万级用户》
【业务背景】
假设你现在正在一个创业公司担任 CTO,因为微信工作生活娱乐不区分,已经发生了很多次将敏感信息发错人甚至发错群的尴尬事件了!你司 CEO 决定做一款 IM 工具,为了区别微信和 QQ 大众化的 IM 需 求,你们公司主打安全 IM,这款产品的竞争力如下: 主打私密聊天,严格控制私密好友的数量,而不是像微信一样,买个菜都可能要加个微信
1.存储架构设计==》
【存储性能估算】
| 功能 | 数据量 |
| 注册 | 十万用户注册信息 |
| 登录 | 虽然 IM 是比较活跃的产品,但由于是全新的产品,我们假设十万注册用户,每天活跃用户有40%,登录每天4万 |
| 加好友 | 每个活跃用户最多20个好友,好友关系数 4万 * 20 = 80万 关系数据 |
| 聊天 |
假设每个活跃用户每天向5位好友发送100条消息,则消息数量为:4万 * 5 * 100 = 2000万,且数据当天基本都被删除了,
所以写入、读取、删除次数都可以估算为
2000万
。
|
【存储架构设计如下】

2.计算架构设计==》
【计算性能估算】
| 功能 | 数据量 |
| 注册 |
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
|
【计算架构之负载均衡】

3.可扩展架构设计==》

选择方案1或者方案2都行,方案3拆得过细,反而增加了系统内部复制度,日志的链路追踪,服务降级、熔断、分布式事务都大大增加了内部复杂度、所以微服务不是拆得越细越好,要符合业务发展才是最好的解决方案!
4.高可用架构设计==》

附:MySQL主备夸机房复制就行、Redis不用做夸机房复制、因为储存数据有有效期的。
5.存储架构&计算架构&高可用架构汇总如下表==》

二、《百万用户》
【业务背景】
1.存储架构设计==》
| 功能 | 数据量 |
| 注册 | 100万用户注册信息 |
| 登录 |
百万注册用户,每天活跃用户有40%,登录时读取用户信息是每天
40万QPS。
|
| 加好友 | 每个活跃用户最多20个好友,好友关系数 40万 * 20 = 800万数据 |
| 聊天 |
假设每个活跃用户每天向5位好友发送100条消息,则消息数量为:40万
* 5 * 100 = 2亿,且数据当天基本都被删除了,所以写入 + 读取 + 删除 =
6亿。
|
| 群聊 |
假设活跃用户中有
10%
的用户发起群聊,平均每人每天2个,每个群聊每
天200条消息。
•
消息写入:40万 * 10% * 2(群聊) * 200(消息) = 1600万数据;
•
消息删除次数:等于消息写入数量;
•
消息读取量:1600万 * 5(每个群最多5人) = 8000万/天。
|
注意:这里redis 用到分片、为啥不用数据读写分离、因为数据量都过亿了、需要通过分片进行数据分布式存储!
2.计算架构设计==》
| 功能 | 数据量 |
| 注册 | 每日新注册用户不到1万,可以忽略 |
| 登录 |
虽然 IM 是比较活跃的产品,但由于是全新的产品,我们假
设百万注册用户,每天活跃用户有40%,假设登录时间集
中在早晚4小时,登录 TPS 均值:40万 / 14400 = 30
|
| 加好友 |
每个活跃用户最多20个好友,好友关系数 40万 * 20 = 800
万数据,按照1年内来计算,TPS 可以忽略不计
|
| 聊天 |
假设每个活跃用户每天向5位好友发送100条消息,则消息数量为:
40万 * 5 * 100 = 2亿,假设每天集中在早中晚3个时间段6小时内
(早上1小时中午1小时晚上4小时),TPS 计算为:2亿/(3600*6)
* 3(发+收+删) ≈
30000
|
| 群聊 |
假设活跃用户中有10%的用户发起群聊,平均每人每天2个,每个群
聊每天200条消息,时间段分布和聊天场景一样。
•
消息写入和删除次数:40万 * 10% * 2 *200 * 2(写+删) /
(3600*6) = 1600 TPS;
•
消息读取量:1600 TPS * 5(每个群最多5人) = 8000 QPS
|
如何用户从100万涨到300万、1000万以内、那么需要做架构演进、Nginx替换Lvs原因参见:Lvs & Nginx 对比?_Thomas.Sir的博客-优快云博客
3.可扩展架构设计==》
4.高可用架构设计==》

5.大数据架构设计==》
| 技术选型 | 选择理由 |
| hadoop/spark | 1. 功能强大,可扩展性强;2. 较复杂数据分析师不会用; |
| clickhouse | 1. 兼容 SQL,维护使用简单;2. 性能强劲,OLAP 分析平台 |
6.存储架构&计算架构&高可用架构汇总如下表==》
三、《千万用户》
【业务背景】
【业务域划分】

【分级架构思路】

【计算架构】

【高可用架构】
高可用架构、设计了两种架构:同城双活 && 异地双活,可以根据用户分布范围来定。

四、《亿级用户》
【业务背景】
经过N年的努力,公司的 IM 业务已经跻身业界前三,已经超过6000万用户,作为创业功臣的你,此时正享受成功带来的喜悦。虽然业务发展势头良好,你以为可以高枕无忧了,但“革命尚未成功,同志仍需努力”,业务的发展带来了新的技术挑战。
【分区架构思路】

【架构汇总】

本文详细介绍了从十万级用户到亿级用户的过程中,系统架构的演进,包括存储、计算、可扩展性、高可用性和大数据架构的设计。随着用户数量的增长,从单一的架构逐渐演变为分片、负载均衡、分布式存储和计算,以及高可用的同城双活和异地双活方案,以应对不断增长的业务需求。

10万+

被折叠的 条评论
为什么被折叠?



