系统设计理论篇 | 青训营笔记

93 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

今天和大家分享如何根据业务去进行一个系统的评估和设计。

系统设计之秒杀系统

如何评估一个系统

这里给出几个指标:可用性 易用性 可维护性 安全性 性能 扩展性 耦合性 伸缩性

设计系统的流程范式(4S分析法)

我们分析一个系统如何去做时,可以利用到以下的 4S 分析法

  1. 场景分析( Scenario ):什么系统,需要哪些功能,多大并发量
  2. 储存设计( Storage ):数据如何存储,Sql 存储,NoSql 存储
  3. 服务设计( Service ):业务能力实现和逻辑整合
  4. 可扩展性( Scale ):解决设计缺陷,提高鲁棒性,拓展性

如何发现系统瓶颈

  • 火焰图分析:利用一些成熟的框架分析单个服务的 CPU ,内存占用等生成对应火焰图;
  • 链路分析:对一套业务下的微服务进行链路追踪,分析出该业务需要用到的每个微服务的耗时情况;
  • 性能测试:对服务进行压力测试,延迟测试等,从而得到其性能情况。

如何保证可用性和稳定性

  • 链路梳理:找到核心链路;梳理流量漏斗;分析强弱依赖;
  • 可观测性:对系统进行链路追踪,核心监控和业务报警;
  • 全链路测试:通过压力测试(高负载高并发),容量测试来对链路测试;
  • 稳定性控制:系统限流,业务兜底,熔断降级(如果发生了熔断则牺牲一些功能保证系统平稳运行)
  • 容灾演练:测试混沌工程,完善应急手册,提供容灾预案

秒杀项目商城案例

商城案例的挑战:资源成本高性能扩展性防止超卖反欺诈流量管控鲁棒性

我们利用4S分析法,分析其场景,储存,服务,扩展:

  • 场景:主要场景包括秒杀活动发布秒杀商品详情秒杀下单;其带来的并发挑战:QPS 1w+,TPS 1k+ (一个万人同时参与的场景)
  • 储存:Mysql + Redis => 做出符合整体项目的E-R图
  • 服务:用户服务,风控服务,活动服务,订单服务
  • 扩展:流量隔离,CDN,缓存优化,流量管控,数据库拓展,服务水平扩展,MQ 扩展,Redis 扩展,服务垂直扩展