这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
今天和大家分享如何根据业务去进行一个系统的评估和设计。
系统设计之秒杀系统
如何评估一个系统
这里给出几个指标:可用性 易用性 可维护性 安全性 性能 扩展性 耦合性 伸缩性
设计系统的流程范式(4S分析法)
我们分析一个系统如何去做时,可以利用到以下的 4S 分析法
- 场景分析( Scenario ):什么系统,需要哪些功能,多大并发量
- 储存设计( Storage ):数据如何存储,Sql 存储,NoSql 存储
- 服务设计( Service ):业务能力实现和逻辑整合
- 可扩展性( Scale ):解决设计缺陷,提高鲁棒性,拓展性
如何发现系统瓶颈
- 火焰图分析:利用一些成熟的框架分析单个服务的 CPU ,内存占用等生成对应火焰图;
- 链路分析:对一套业务下的微服务进行链路追踪,分析出该业务需要用到的每个微服务的耗时情况;
- 性能测试:对服务进行压力测试,延迟测试等,从而得到其性能情况。
如何保证可用性和稳定性
- 链路梳理:找到核心链路;梳理流量漏斗;分析强弱依赖;
- 可观测性:对系统进行链路追踪,核心监控和业务报警;
- 全链路测试:通过压力测试(高负载高并发),容量测试来对链路测试;
- 稳定性控制:系统限流,业务兜底,熔断降级(如果发生了熔断则牺牲一些功能保证系统平稳运行)
- 容灾演练:测试混沌工程,完善应急手册,提供容灾预案
秒杀项目商城案例
商城案例的挑战:资源成本,高性能,扩展性,防止超卖,反欺诈,流量管控,鲁棒性等
我们利用4S分析法,分析其场景,储存,服务,扩展:
- 场景:主要场景包括
秒杀活动发布,秒杀商品详情,秒杀下单;其带来的并发挑战:QPS 1w+,TPS 1k+ (一个万人同时参与的场景) - 储存:Mysql + Redis => 做出符合整体项目的E-R图
- 服务:用户服务,风控服务,活动服务,订单服务
- 扩展:流量隔离,CDN,缓存优化,流量管控,数据库拓展,服务水平扩展,MQ 扩展,Redis 扩展,服务垂直扩展