系统设计| 青训营笔记

42 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第7天 今天直播课讲了字节跳动关于秒杀活动的设计思路。整个项目是一个常见且普通的架构。文中使用了许多传统且的分层方法方法。分为了commonm(返回类),config(配置),controller(控制),covert(转换),dao(持久层),entity(整体),enums(枚举),handler,limtmlock(锁),model(模型),mq,service(服务类),util(工具类)

  • 为什么要做系统设计

    • 个人?
    • 工作?
  • 系统设计的概念是什么

  • 如何做系统设计

    • 4S分析法
  • 如何分析系统瓶颈和优化

    • 火焰图分析
    • 链路分析
    • 全链路压测
  • 如何验证系统的可用性和稳定性

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

我们以entity中的HCategory为例

private static final long serialVersionUID = -70258730050838158L;
/**
 * id
 */
private Long id;
/**
 * 父类目id当id=0时说明是根节点,一级类目
 */
private Long parentId;
/**
 * 类目名称
 */
private String name;
/**
 * 类目级别1-一级,2-二级,3-三级
 */
private Integer level;
/**
 * 是否父类目0-否,1-是
 */
private Integer beParent;
/**
 * 类目状态0-废弃,1-正常
 */
private Integer status;
/**
 * 排序编号,同类展示顺序,数值相等则自然排序
 */
private Integer sortOrder;
/**
 * 创建时间
 */
private Date createTime;
/**e
 * 更新时间
 */
private Date updateTime;

如图所示 我们可以发现entity主要是维护项目中需要的类利用spring来维护项目

private final RedisService redisService;

private final String key;

private final String value;

private static final DefaultRedisScript<Long> redisScript;

private static final String EXPECTED = ", expectedValue=";

static {
    redisScript = new DefaultRedisScript<>();
    redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("unlock.lua")));
    redisScript.setResultType(Long.class);
}

lock中项目使用redis来维护确保了高可用性以及稳定性。

基本概念

  • Spu
  • Sku
  • 秒杀业务的特点

秒杀的挑战

  • 资源有限性
  • 反欺诈
  • 高性能
  • 防止超卖
  • 流量管控
  • 扩展性
  • 鲁棒性

设计秒杀系统

4S分析

  • 场景

  • 存储

  • 功能

  • 扩展