秒杀系统设计

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

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

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

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

一、设计要点

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

二、设计原则

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

如果你喜欢本文

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

秒杀系统设计


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

查看所有标签

猜你喜欢:

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

机器学习及其应用2007

机器学习及其应用2007

周志华 编 / 清华大学 / 2007-10 / 37.00元

机器学习是人工智能的一个核心研究领域,也是近年来计算机科学中最活跃的研究分支之一。目前,机器学习技术不仅在计算机科学的众多领域中大显身手,还成为一些交叉学科的重要支撑技术。本书邀请相关领域的专家撰文,以综述的形式介绍机器学习中一些领域的研究进展。全书共分13章,内容涉及高维数据降维、特征选择、支持向量机、聚类、强化学习、半监督学习、复杂网络、异构数据、商空间、距离度量以及机器学习在自然语言处理中的......一起来看看 《机器学习及其应用2007》 这本书的介绍吧!

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

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具