这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天
如何做系统设计
- 场景分析,这是一个什么系统,需要哪些功能,多大的并发量
- 存储设计,数据如何组织,sql存储还是nosql存储
- 服务设计,业务功能实现和逻辑整合
- 可扩展性,解决设计缺陷,提高鲁棒性、扩展性
如何发现系统的瓶颈
火焰图分析,链路追踪和性能测试
如何保证可用性和稳定性
通过链路梳理,分析核心链路的构造,分析流量漏斗,分析系统的强弱依赖。
构建可观测性指标,如链路追踪,核心监控,业务报警等
进行全链路的测试,如压力测试,负载测试,容量测试等
稳定性控制,如在系统设计上考虑系统限流,业务兜底,熔断降级等
容灾演练:构建混沌工程,应急手册和容灾预案。
秒杀业务系统设计
秒杀业务的特点由瞬时流量高,读多写少,实时性要求高等,在系统性能上的挑战由高性能,扩展性强,鲁棒性高,反欺诈,关注资源成本,防止超卖,流量管控等
秒杀场景
在功能上一个秒杀场景涉及秒杀活动的发布,秒杀商品的详情页,以及秒杀下单的步骤,在并发上,可能有1万qps。
存储
可以设定有从底到上的三级数据存储结构,分别是mysql-redis-localcache
服务
子服务可以划分为用户服务,风控服务,活动服务和订单服务,基础组件可能要用到ID生成器,缓存组件,MQ组件和限流组件。
扩展
对于设计的系统的扩展性,首先对于流量要进行分类隔离,对流量进行管控,可以采用CDN,本地要做缓存优化,对于数据库层面的扩展,可以考虑水平和竖直扩展等方式。