这是我参与「第五届青训营」笔记创作活动的第10天
一、本堂课重点内容
- 系统设计方法论
- 电商秒杀业务介绍
- 课程实践
- 课程总结
二、详细知识点介绍
引言
- 为什么要做系统设计
- 个人?
- 工作?
- 系统设计的概念是什么
- 如何做系统设计
- 4S分析法
- 如何分析系统瓶颈和优化
- 火焰图分析
- 链路分析
- 全链路压测
- 如何验证系统的可用性和稳定性
- 链路梳理
- 可观测性
- 全链路测试
- 稳定性控制
- 容灾演练
电商和秒杀
基本概念
- Spu
- Sku
- 秒杀业务的特点
秒杀的挑战
- 资源有限性
- 反欺诈
- 高性能
- 防止超卖
- 流量管控
- 扩展性
- 鲁棒性
设计秒杀系统
4S分析
- 场景
- 存储
- 功能
- 扩展
系统架构图
三、实践练习例子
秒杀流程
四、课后个人总结
高并发的系统架构都会采用分布式集群部署,服务上层有着层层负载均衡,并提供各种容灾手段(双火机房、节点容错、服务器灾备等)保证系统的高可用,流量也会根据不同的负载能力和配置策略均衡到不同的服务器上。下图中描述了用户请求到服务器经历了三层的负载均衡:
总体来说,秒杀系统是非常复杂的。我们这里只是简单介绍模拟了一下单机如何优化到高性能,集群如何避免单点故障,保证订单不超卖、不少卖的一些策略,完整的订单系统还有订单进度的查看,每台服务器上都有一个任务,定时的从总库存同步余票和库存信息展示给用户,还有用户在订单有效期内不支付,释放订单,补充到库存等等。
我们实现了高并发抢票的核心逻辑,可以说系统设计的非常的巧妙,巧妙的避开了对DB数据库IO的操作,对Redis网络IO的高并发请求,几乎所有的计算都是在内存中完成的,而且有效的保证了不超卖、不少卖,还能够容忍部分机器的宕机。我觉得其中有两点特别值得学习总结:
-
负载均衡,分而治之。通过负载均衡,将不同的流量划分到不同的机器上,每台机器处理好自己的请求,将自己的性能发挥到极致,这样系统的整体也就能承受极高的并发了,就像工作的的一个团队,每个人都将自己的价值发挥到了极致,团队成长自然是很大的。
-
合理的使用并发和异步。自epoll网络架构模型解决了c10k问题以来,异步越来被服务端开发人员所接受,能够用异步来做的工作,就用异步来做,在功能拆解上能达到意想不到的效果,这点在nginx、node.js、redis上都能体现,他们处理网络请求使用的epoll模型,用实践告诉了我们单线程依然可以发挥强大的威力。服务器已经进入了多核时代,go语言这种天生为并发而生的语言,完美的发挥了服务器多核优势,很多可以并发处理的任务都可以使用并发来解决,比如go处理http请求时每个请求都会在一个goroutine中执行,总之:怎样合理的压榨CPU,让其发挥出应有的价值,是我们一直需要探索学习的方向。