这是我参与「第五届青训营 」笔记创作活动的第11天
本篇文章主要从理论方面进行介绍系统设计的相关知识。
1.系统设计方法论
如何评价一个系统?
主要从以下几个方面进行介绍和评价:可用性、安全性、扩展性、易用性、性能、耦合性、可维护性、伸缩性。
系统设计的定义:为了达成某种目的,通过个体组成整体的过程。
-
系统:关联的个体、规则运作、组成工作的整体
-
设计:设想和计划、目的、过程安排
-
系统设计的流程包括:场景、存储、服务、扩展
系统设计的可用性和稳定性:
-
链路梳理:核心链路、流量漏斗、强弱依赖
-
可观测性:链路追踪、核心监控、业务报警
-
全链路测试:压力测试、负载测试、容量测试
-
稳定性控制:系统限流、业务兜底、熔断降级
-
容灾演练:混沌工程、应急手册、容灾预案
2.电商秒杀业务
电商业务主要包含三个主体:货、人、场
-
货:供给侧:商品、商家、供应链
-
人:消费者侧:消费者、用户、流量来源
-
场:交易环境:线下商场、线上电商
在进行电商服务时,我们需要了解到商品的概念,何为商品?
商品:具有交易价值和属性的信息载体
-
秒杀业务的特点:瞬时流量高、读多写少、实时性要求高
-
秒杀所具有的挑战:资源成本、反欺诈、高性能、防止超卖、流量管控、扩展性、鲁棒性
3.设计秒杀系统
设计一个秒杀系统,主要从四个方面进行介绍:
-
场景:
-
功能:秒杀活动发布、秒杀商品详情、秒杀下单
-
并发:万人参与秒杀、QPS 1W+、TPS 1k+
-
-
存储:
- MySQL -> Redis -> Localcache
-
服务:
-
子服务:用户服务、风控服务、活动服务、订单服务
-
基础组件:ID生成器、缓存组件、MQ组件、限流组件
-
-
扩展:
- 流量隔离、CDN、缓存优化、流量管控、数据库扩展、MQ扩展、Redis扩展、服务水平扩展、服务垂直扩展
-
系统架构:
-
用户层:WEB、IOS、Android
-
接入层:Nginx
-
应用层:发布活动、秒杀详情、秒杀下单、ID生成器、限流组件、MQ组件、Cache组件
-
基础层:Redis、RocketMQ、MySQL
-
最后,总结来说,系统设计主要是三个方面:服务无状态、批量写入、最终一致性
4.总结
本文主要从系统设计的方法论、电商秒杀业务以及设计秒杀系统等方面进行介绍,为我们讲述了如何进行制作一个系统,课堂中老师为我们介绍了关于系统的代码的编写过程,讲述比较详细的,但还需要更多时间的理解。
5.引用
本篇文章的主要内容来自于字节录播课程。