这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天.
老师此次课首先提及设计系统会存在的问题,为什么要开发一个系统,如何落地一个系统,怎么保证系统的可用性与稳定性。针对于一个系统进行评估,可以从可用性,稳定性,扩展性,耦合性等方面入手。 但是对于整个系统的设计而言并没有统一的规则,为了设计一个系统需要从场景分析,存储设计,服务设计以及可扩展性四个方面入手。
在系统瓶颈方面,可以从火焰图分析,链路追踪,性能测试等方面着手,链路追踪针对于微服务,当每个服务需要调用下层服务时,会追踪到下层服务的某个特定实例,每个实例包含cpu状态等,以便于进行分析。
老师提到在平时业务中比较重要的一块是秒杀业务,因为秒杀一般在某个特定的时间点集中性比较强,瞬时流量非常高,容易使得服务器崩溃。并且是读取状态多于写入状态。系统的实时性要求也非常高。所以在这一块秒杀业务中所处地位比较重要,需要特定分析。秒杀会带来许多问题,面临很大的挑战,如黑产进行攻击,欺诈消费,如本来供应10件商品却被超卖为100件,针对于此类问题在实际情况中是非常严重的。
在秒杀场景下进行一个系统分析。从场景分析,存储设计,服务设计以及可扩展性上进行分析。在场景下,功能,秒杀活动的发布,秒杀商品详情以及秒杀下单功能,同时需要设计并发的数量,如万人秒杀,QPS以及TPS数量。在功能设计完后,需要知道底层存储问题,从mysql到缓存Redis再到更快的Localcache存储。
在存储设计中,需要先规划好其类目表。找出商品信息及其关联信息。对于服务而言,需要分析子服务以及基础组件相关概念,子服务包含用户服务,封控服务,活动服务,订单服务等。基础组件由生成器,缓存,限流组件等,以应对突发状况。
在扩展方面,秒杀问题与常规电商服务需要进行流量隔离,因为在秒杀过程中流量巨大影响到其他商品常规流量。
对于系统架构,需要不同的层进行框架规划
在秒杀过程中需要分析其流程图,用户会进入秒杀系统,每个系统被提交到最终的数据库中,但是如果中途出现bug,如购买的件数库存不足时需要对待写入数据进行回滚到缓存中的操作。所以需要设计出完整的流程图。最后老师讲解了相关的java代码。此次课难度大。从单独秒杀案例中分析系统的设计,描述啦系统分析的不同场景以及存储,扩展应对方式。下去需要花时间仔细查看代码来分析其原理。