这是我参与「第五届青训营 」笔记创作活动的第8天
系统设计
方法论
标准流程:场景分析;存储设计;服务设计;可扩展性
火焰图分析
链路追踪:
性能测试:
如何保证可用性和稳定性:
链路梳理;可观测性;全链路测试;稳定性控制;容灾演练
电商
商品:具有交易价值和属性的信息载体
SPU:Standard Product Unit
SKU:Stock Keeping Unit 库存 价格信息
秒杀业务特点:瞬时流量高;读多写少;实时性要求高
挑战:资源成本;反欺诈;高性能;防止超卖
如何设计秒杀系统
功能:秒杀活动发布
秒杀商品详情
秒杀下单
存储:MySQL+Redis+Localcache
服务:
子服务:用户服务;风控服务;活动服务;订单服务
基础组件:ID生成器;缓存组件;MQ组件;限流组件
扩展:
流量隔离;CDN(内容分发访问)发起一个请求离着越近,响应时间越快;缓存优化;流量管控;数据库扩展;MQ扩展;Redis扩展(读写分离、一主多从);服务水平扩展
设计秒杀系统的一般步骤如下:
需求分析:确定系统功能、容量要求以及用户的预期体验。
系统架构:根据需求选择合适的技术架构,如分布式、缓存、数据库等。
前置准备:预处理商品信息,如商品数量、价格等。
请求流量控制:通过限流技术避免系统压力过大。
并发处理:通过数据库乐观锁、悲观锁等技术处理并发请求。
结果校验:校验秒杀结果是否正确,保证数据的一致性。
后续优化:通过监控、调优等方式提高系统的可用性。
注意:秒杀系统需要高效、高并发、高可用的解决方案,不仅仅是代码的实现,还需要对系统整体进行优化。
总结
服务无状态:服务是无状态的,可以用K8S做很快的横向拓展
批量写入:批量写入
最终一致性:解释了用Redis做缓存可能导致短暂的不一致,还是要保证最终一致性。