这是我参与「第五届青训营 」笔记创作活动的第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分析
-
场景
-
存储
-
功能
-
扩展