秒杀系统设计

栏目: Java · 发布时间: 6年前

内容简介:一致性 、高可用、高并发情况下的高性能

点击蓝色“ 乔志勇笔记 ”关注我哟

加个“ 星标 ”,第一时间获取推送的文章哦!

一、设计要点

一致性 、高可用、高并发情况下的高性能

二、设计原则

1、数据要尽量少

2、请求数尽量少

3、路径要尽量短

4、依赖要尽量少

5、不要有单点

三、业务上的实践

1、定时上架 "购买按钮"

2、增加答题秒杀

3、减少不必要的装饰功能

4、刷新抢宝 时 刷新指定部分页面

5、采用发送优惠券,抽奖活动,分散流量

四、技术上的实践

(1) 动静分离

1)数据分离:

动态数据:个性化的数据,时间或地域数据

2) 考虑要点 :

1、静态数据的储存

实体机单机部署

统一的cache 层

上cdn

2、动静结合方式

服务端ESI 方案 :freemarker 适用于普通的商品推荐

客户端CSI 方案 : 异步ajax 适用于秒杀推荐

(2)热点数据

1、发现热点数据

静态、动态发现

2、处理热点数据

实时缓存,业务隔离,请求加队列限制

(3) 流量消峰

1、排队

2、答题

3、分层过滤

(4) 一致性的减库存

1)下单减库存 逻辑简单 ,性能更好

2)没有复杂的 SKU 库存和总库存这种联动关系 ,可以用 redis 减库存

3)针对InnoDB锁竞争,可以优化

1、应用层做排队

2、数据库层做排队

(5)高可用的兜底方案(层级递增)

1、降级

2、限流

基于排队策略:

客户端 线程数限流,设置请求超时时间

服务端基于QPS做限流保护

3、拒绝服务

防止系统宕机:

在最前端的 Nginx 上设置过载保护,当机器负载达到某个值时直接拒绝 HTTP 请求并返回 503 错误码,在 Java 层同样也可以设计过载保护

参考:许令波的设计秒杀系统

参考实践代码:https://gitee.com/QiaoZhiYong/spring-boot-seckill

https://github.com/qiaozhiyong/miaosha

近期文章:

5种分布式锁实现的对比?

Java并发编程学习体系

java8 Stream 史上最全总结

Java 网络编程"初探"

redis 知识点总结

java 核心技术学习总结 (一)

spring中"投机取巧"地限制 用户同时登陆

如果你喜欢本文

请长按二维码,关注 乔志勇笔记

秒杀系统设计


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Database Design and Implementation

Database Design and Implementation

Edward Sciore / Wiley / 2008-10-24 / 1261.00 元

* Covering the traditional database system concepts from a systems perspective, this book addresses the functionality that database systems provide as well as what algorithms and design decisions will......一起来看看 《Database Design and Implementation》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试