这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
今天课程是实践课,课上学习了如何实现一个秒杀系统。之前的课程中一直学习的是Go语言,但这次实践课使用的却是java,不过从系统设计的角度出发,语言并不是最关键的因素。
首先在设计系统前,我们需要一些方法论来指导设计过程。系统设计是为了达成某种目的,通过个体组成整体的过程。达到的系统需要在多个方面进行评估,比如可用性、安全性、扩展性、可维护性、耦合性、伸缩性等等。做系统设计一般分为四个流程:场景分析、存储设计、服务设计和可拓展性。场景分析负责决定系统使用于什么场景,需要哪些功能、支持多大并发量;存储设计处理数据的组织方式,存储使用的数据库引擎;服务设计负责业务功能实现和逻辑整合;可拓展性部分解决设计缺陷,提高鲁棒性、扩展性。
对于一个系统,我们可以通过火焰图分析、链路追踪、性能测试三个方法来发现其瓶颈,以达到进一步优化。
一个好的系统需要保证可用性和稳定性,为了做到这两点,我们可以进行链路梳理、观测、全链路测试、稳定性控制、容灾演练的方法来进行测试和优化。
对于具体的电商秒杀系统,我们首先要分析该系统的特点。秒杀业务具有瞬时流量高、读多写少、实时性要求高这三个特点,而且还需要考虑超买超卖、性能、欺诈等方面的问题。利用之前学到的系统分析流程,我们分析秒杀系统的功能需要支持:秒杀活动发布、商品详情、秒杀下单。并发上需要支持万人以上参与秒杀。存储方面使用MySQL,Redis,Localcache三层存储以提高性能。服务方面需要提供用户服务、风控服务、活动服务、订单服务的子服务,使用ID生成器,缓存组件、MQ组件、限流组件来实现。