秒杀系统设计

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

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

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

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

一、设计要点

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

二、设计原则

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

如果你喜欢本文

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

秒杀系统设计


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

查看所有标签

猜你喜欢:

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

App研发录:架构设计、Crash分析和竞品技术分析

App研发录:架构设计、Crash分析和竞品技术分析

包建强 / 机械工业出版社 / 2015-10-21 / CNY 59.00

本书是作者多年App开发的经验总结,从App架构的角度,重点总结了Android应用开发中常见的实用技巧和疑难问题解决方法,为打造高质量App提供有价值的实践指导,迅速提升应用开发能力和解决疑难问题的能力。本书涉及的问题有:Android基础建设、网络底层框架设计、缓存、网络流量优化、制定编程规范、模块化拆分、Crash异常的捕获与分析、持续集成、代码混淆、App竞品技术分析、项目管理和团队建设等......一起来看看 《App研发录:架构设计、Crash分析和竞品技术分析》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

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

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具