这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
如何评估一个系统
评估一个系统包括很多角度:可用性、易用性、安全性、性能、可维护性、扩展性、耦合性、伸缩性。
系统设计的定义
- 系统:关联的个体、规则运作、组成工作的整体
- 设计:设想和计划、目的、过程安排
- 为了达成某种目的,通过个体组成整体的过程。
系统设计
- 场景分析(Scenario):什么系统,需要哪些功能,多大的并发量。
- 存储设计(Storage):数据如何组织,Sql存储,NoSql存储。
- 服务设计(Service):业务功能实现和逻辑整合。
- 可扩展性(Scale):解决设计缺陷,提高鲁棒性,扩展性。 简称4s设计模式。
如何发现系统的瓶颈
- 火焰图分析
- 链路追踪
- 性能测试
如何保证可用性和稳定性
- 链路梳理:核心链路、流量漏斗、强弱依赖。
- 可观测性:链路追踪、核心监控、业务报警。
- 全链路测试:压力测试、负载测试、容量测试。
- 稳定性控制:系统限流、业务兜底、熔断降级。
- 容灾演练:混沌工程、应急手册、容灾预案。
秒杀业务的特点
- 瞬时流量高
- 读多写少
- 实时性要求高
秒杀的挑战
资源成本、高性能、扩展性、防止超卖、反欺诈、流量监控、鲁棒性。
系统架构
- 用户层:web、Ios、Android
- 接入层:Nginx
- 应用层:发布活动、秒杀详情、秒杀下单、ID生成器、限流组件、MQ组件、Cache组件
- 基础层:Redis、RocketMQ、MySQL
秒杀流程
用户抢购--下单-->秒杀系统(登录校验->User服务、风控校验->风控服务、活动校验->Redis、预扣库存->Redis【i】)--削峰-->MQ--消费MQ-->订单服务(超时检查->订单超时检查、扣减库存(取消&下单失败库存回补)->MySQL->i)--支付-->支付系统。
总结
本次课程老师重点带我们看了代码的编写,讲解了重点代码的实现功能逻辑。还有重点用到的知识点,虽说有些技术我没有学过,像Nginx、Redis等,但对于代码的理解总体上还是可以接受的。也从这个秒杀系统的案例中可以看出对于系统的负载、性能需要很大的优化。代码部分也要谨慎编写每一块功能。使得效率变得更加高效。才能使高峰期系统能够正常的工作,完成用户的需求。