NOTE
1.1 业务系统设计分析思路
1. 需求是什么 - 需求单 - 原型图 2. 为什么要做这个需求 - 用于解决什么问题 - 需求是不是可以不做 - 能不能简化下需求 3. 需求分析 理解概念需要结合系统举例子 3.1. 原有流程是怎样的 找运营或者产品演示流程 读写流程、B端C端流程 3.2. 新流程是怎样的 1. 系统中的角色
这是历史学习笔记,可能存在过时或不完整的理解。
1. 需求是什么
- 需求单
- 原型图
2. 为什么要做这个需求
- 用于解决什么问题
- 需求是不是可以不做
- 能不能简化下需求
3. 需求分析
理解概念需要结合系统举例子
3.1. 原有流程是怎样的
找运营或者产品演示流程 读写流程、B端C端流程
3.2. 新流程是怎样的
3.3. QPS估算
- 假设
DAU(日活跃用户数)为1000W,每个用户操作10次,操作时间分散在24h - 那么
PV(日访问量)=DAU*10=1000W*10=1亿 - 那么
平均QPS(每秒请求量)=访问量/时长=PV/24h=1亿/(24*60*60)=1160 - 那么
峰值QPS(每秒请求量)=平均QPS*10=1160*10=11600
3.4. 带宽估算
优化方式:压缩、分页
4. 方案设计
- 暴露给客户端的是API接口
- 内部通过组合各种数据组件实现
- 数据库
- 缓存
- 搜索引擎
- 消息队列
4.1. 存储设计
-
根据功能要求、请求量、数据量、稳定性、扩展性、成本、存储模型等决定使用哪种存储
-
功能
- Elasticsearch:复杂检索
- MySQL:ACID事务+持久化
- MongoDB:JSON+持久化
- Redis:内存
- Kafka:削峰异步解耦
-
请求量
- B端 or C端
Component Reads per second Writes per second MySQL 10000 5000 Redis 100000 100000 Kafka 100000 100000 MongoDB 20000-50000 10000-25000 -
数据量
- 每天数据量=每天请求量*每次请求数据写入量
- 保存多少天
- Redis容量预估-极数云舟
- 预估表和索引空间容量的方法 - 云+社区 - 腾讯云
Component Max effective capacity MySQL 3TB Redis 16GB-128GB MongoDB -
稳定性
- 读写成功率,可参考服务等级协议的可用性
- 故障切换是手动还是自动,需要多长时间,对业务的影响
-
扩展性
- 是否能支持快速扩容,扩容速度
-
数据模型设计
4.2. 接口设计
- 有几个操作就有几个接口
- 定义接口协议
4.3. 架构设计
4.4. 代码设计
4.5. 核心读写链路
5. 工作量评估
- 一个接口评估0.5-2天
6. 开发
7. 测试
功能测试、单元测试、接口测试、压力测试等 测试.md
8. 发布
9. 运维
- 梳理核心链路日志和监控
- 常见问题定位
10. 优化
11. 总结
- 方案对比
- 遇到的问题以及怎么解决的
- 设计中的亮点
- 为什么引入XXX组件
- 痛点梳理与改进措施
- 请求量、数据量扩大N倍怎么处理
- 重构.md
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看