秒杀系统设计

栏目: 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中"投机取巧"地限制 用户同时登陆

如果你喜欢本文

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

秒杀系统设计


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

查看所有标签

猜你喜欢:

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

程序员的数学

程序员的数学

结城浩 / 管杰 / 人民邮电出版社 / 2012-10 / 49.00元

如果数学不好,是否可以成为一名程序员呢?答案是肯定的。 本书最适合:数学糟糕但又想学习编程的你。 没有晦涩的公式,只有好玩的数学题。 帮你掌握编程所需的“数学思维”。 日文版已重印14次! 编程的基础是计算机科学,而计算机科学的基础是数学。因此,学习数学有助于巩固编程的基础,写出更健壮的程序。 本书面向程序员介绍了编程中常用的数学知识,借以培养初级程序员的数学思维。读......一起来看看 《程序员的数学》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具