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

82 阅读2分钟

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

系统设计

方法论

标准流程:场景分析;存储设计;服务设计;可扩展性

火焰图分析

链路追踪:

性能测试:

如何保证可用性和稳定性:

链路梳理;可观测性;全链路测试;稳定性控制;容灾演练

电商

商品:具有交易价值和属性的信息载体

SPU:Standard Product Unit

SKU:Stock Keeping Unit 库存 价格信息

秒杀业务特点:瞬时流量高;读多写少;实时性要求高

挑战:资源成本;反欺诈;高性能;防止超卖

如何设计秒杀系统

功能:秒杀活动发布

秒杀商品详情

秒杀下单

存储:MySQL+Redis+Localcache

服务:

子服务:用户服务;风控服务;活动服务;订单服务

基础组件:ID生成器;缓存组件;MQ组件;限流组件

扩展:

流量隔离;CDN(内容分发访问)发起一个请求离着越近,响应时间越快;缓存优化;流量管控;数据库扩展;MQ扩展;Redis扩展(读写分离、一主多从);服务水平扩展

设计秒杀系统的一般步骤如下:

需求分析:确定系统功能、容量要求以及用户的预期体验。

系统架构:根据需求选择合适的技术架构,如分布式、缓存、数据库等。

前置准备:预处理商品信息,如商品数量、价格等。

请求流量控制:通过限流技术避免系统压力过大。

并发处理:通过数据库乐观锁、悲观锁等技术处理并发请求。

结果校验:校验秒杀结果是否正确,保证数据的一致性。

后续优化:通过监控、调优等方式提高系统的可用性。

注意:秒杀系统需要高效、高并发、高可用的解决方案,不仅仅是代码的实现,还需要对系统整体进行优化。

总结

服务无状态:服务是无状态的,可以用K8S做很快的横向拓展

批量写入:批量写入

最终一致性:解释了用Redis做缓存可能导致短暂的不一致,还是要保证最终一致性。