系统设计(秒杀系统)| 青训营笔记

127 阅读2分钟

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

如何评估一个系统

评估一个系统包括很多角度:可用性、易用性、安全性、性能、可维护性、扩展性、耦合性、伸缩性。

系统设计的定义

  • 系统:关联的个体、规则运作、组成工作的整体
  • 设计:设想和计划、目的、过程安排
  • 为了达成某种目的,通过个体组成整体的过程。

系统设计

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

如何发现系统的瓶颈

  • 火焰图分析
  • 链路追踪
  • 性能测试

如何保证可用性和稳定性

  • 链路梳理:核心链路、流量漏斗、强弱依赖。
  • 可观测性:链路追踪、核心监控、业务报警。
  • 全链路测试:压力测试、负载测试、容量测试。
  • 稳定性控制:系统限流、业务兜底、熔断降级。
  • 容灾演练:混沌工程、应急手册、容灾预案。

秒杀业务的特点

  • 瞬时流量高
  • 读多写少
  • 实时性要求高

秒杀的挑战

资源成本、高性能、扩展性、防止超卖、反欺诈、流量监控、鲁棒性。

系统架构

  • 用户层:web、Ios、Android
  • 接入层:Nginx
  • 应用层:发布活动、秒杀详情、秒杀下单、ID生成器、限流组件、MQ组件、Cache组件
  • 基础层:Redis、RocketMQ、MySQL

秒杀流程

用户抢购--下单-->秒杀系统(登录校验->User服务、风控校验->风控服务、活动校验->Redis、预扣库存->Redis【i】)--削峰-->MQ--消费MQ-->订单服务(超时检查->订单超时检查、扣减库存(取消&下单失败库存回补)->MySQL->i)--支付-->支付系统。

总结

本次课程老师重点带我们看了代码的编写,讲解了重点代码的实现功能逻辑。还有重点用到的知识点,虽说有些技术我没有学过,像Nginx、Redis等,但对于代码的理解总体上还是可以接受的。也从这个秒杀系统的案例中可以看出对于系统的负载、性能需要很大的优化。代码部分也要谨慎编写每一块功能。使得效率变得更加高效。才能使高峰期系统能够正常的工作,完成用户的需求。