【实战篇】从1万到100万DAU架构经历了哪些变化

0 阅读4分钟

这篇文章详细拆解一个语音社交App从1万DAU增长到100万DAU过程中,架构层面的每一次关键变化。每个阶段的挑战、决策、取舍,都写清楚。

一、整体演进路线

整体演进路线

二、1万DAU阶段

2.1 架构现状

在这里插入图片描述

2.2 核心指标

指标数值
在线峰值1000
QPS500
消息延迟200ms
可用性99%

2.3 遇到的问题

问题现象解决方案
单机瓶颈CPU经常80%+垂直扩容(8核16G)
数据库慢查询部分接口响应慢加索引
第三方SDK限制融云免费版有限制升级付费版

2.4 关键决策

· 用第三方IM,不自研

· MySQL主从,读分离

· Redis缓存热点数据

三、5万DAU阶段(过渡期)

3.1 架构变化

在这里插入图片描述

3.2 核心变化

变化说明
服务多实例从单机变成2台服务器
Nginx负载流量分发
Redis主从提升可用性
基础监控Prometheus + Grafana

3.3 遇到的问题

问题现象解决方案
会话不一致用户登录状态不同步Redis集中存储Session
日志分散多台机器日志难查ELK日志聚合
配置分散配置修改需要重启引入配置中心

四、10万DAU阶段

4.1 架构变化

在这里插入图片描述

4.2 核心变化

变化说明
服务拆分从单体拆分为6个服务
MySQL分库分表按用户ID分16个库
消息队列引入RabbitMQ异步处理
服务发现Nacos
熔断降级Sentinel

4.3 分库分表策略

分库规则:  
user_id % 16 = 库编号  
  
示例:  
user_id = 10011001 % 16 = 9 → db_9  
user_id = 20022002 % 16 = 2 → db_2  
  
分表规则:  
每库按业务分表  
db_9.user_profile  
db_9.user_relation  
db_9.gift_record

4.4 遇到的问题

问题现象解决方案
跨库事务分库后事务难处理本地消息表
服务雪崩一个服务慢拖垮其他熔断器
数据倾斜部分库压力大热点数据单独处理

五、50万DAU阶段

5.1 架构变化

在这里插入图片描述

5.2 核心变化

变化说明
消息队列升级RabbitMQ → Kafka(更高吞吐)
Redis集群化16节点集群
数据库扩展16库 → 32库
全链路监控Jaeger
容器化Docker + K8s

5.3 IM自研

背景: 第三方IM成本随用户增长线性上升,开始规划自研。

策略:

  1. 先自研非核心场景(系统通知、客服消息)

  2. 核心流量继续走第三方

  3. 逐步迁移

六、100万DAU阶段

6.1 架构变化

┌─────────────────────────────────────────────────────┐
│ 客户端 │
└───────────────────────┬─────────────────────────────┘

┌─────────▼─────────┐
│ DNS智能解析 │
└─────────┬─────────┘

┌───────────────┼───────────────┐
│ │ │
┌───────▼───────┐ ┌─────▼─────┐ ┌───────▼───────┐
│ 北京机房 │ │ 上海机房 │ │ 广州机房 │
│ (主) │ │ (从) │ │ (从) │
└───────────────┘ └───────────┘ └───────────────┘

6.2 核心变化

变化说明
多机房部署北京、上海、广州三机房
IM核心自研核心流量走自研IM
边缘加速CDN + 边缘节点
智能路由就近接入、故障切换

6.3 多机房数据同步

数据同步策略:
· 用户数据:异步同步(允许短暂不一致)
· 房间数据:按创建者所在地存储,跨机房读缓存
· 消息数据:异步同步
· 配置数据:实时同步

Redis同步:
· 北京机房:主
· 上海机房:从
· 广州机房:从

七、各阶段对比总表

指标1万DAU10万DAU100万DAU
架构单体微服务分布式+多机房
服务数1620+
数据库2实例16库32库
Redis1实例4节点16节点
消息队列RabbitMQKafka
服务器数220200+
团队规模4人15人50人
可用性99%99.5%99.9%
消息延迟200ms100ms50ms

八、关键经验

8.1 架构演进原则

原则说明
按需演进不要过度设计,够用就好
渐进式一次只改一个点
可回滚每次改动都能回滚
监控先行改动前先加监控

8.2 避免的坑

说明
过早优化1万DAU就搞微服务,浪费
技术崇拜追求新技术,忽视稳定性
忽视监控没监控的系统是盲人摸象
团队膨胀人多不等于效率高

下篇预告: 《多城市多地部署社交系统架构实战》——深入多机房部署的技术细节。

持续输出社交App开发实战经验,关注我,一起成长。