点击蓝色“ 乔志勇笔记 ”关注我哟
加个“ 星标 ”,第一时间获取推送的文章哦!
一致性 、高可用、高并发情况下的高性能
1、数据要尽量少
2、请求数尽量少
3、路径要尽量短
4、依赖要尽量少
5、不要有单点
1、定时上架 "购买按钮"
2、增加答题秒杀
3、减少不必要的装饰功能
4、刷新抢宝 时 刷新指定部分页面
5、采用发送优惠券,抽奖活动,分散流量
1)数据分离:
动态数据:个性化的数据,时间或地域数据
2) 考虑要点 :
1、静态数据的储存
实体机单机部署
统一的cache 层
上cdn
2、动静结合方式
服务端ESI 方案 :freemarker 适用于普通的商品推荐
客户端CSI 方案 : 异步ajax 适用于秒杀推荐
1、发现热点数据
静态、动态发现
2、处理热点数据
实时缓存,业务隔离,请求加队列限制
1、排队
2、答题
3、分层过滤
1)下单减库存 逻辑简单 ,性能更好
2)没有复杂的 SKU 库存和总库存这种联动关系 ,可以用redis 减库存
3)针对InnoDB锁竞争,可以优化
1、应用层做排队
2、数据库层做排队
基于排队策略:
客户端 线程数限流,设置请求超时时间
服务端基于QPS做限流保护
防止系统宕机:
在最前端的 Nginx 上设置过载保护,当机器负载达到某个值时直接拒绝 HTTP 请求并返回 503 错误码,在 Java 层同样也可以设计过载保护
参考:许令波的设计秒杀系统
参考实践代码:https://gitee.com/QiaoZhiYong/spring-boot-seckill
https://github.com/qiaozhiyong/miaosha
近期文章:
5种分布式锁实现的对比?
Java并发编程学习体系
java8 Stream 史上最全总结
Java 网络编程"初探"
redis 知识点总结
java 核心技术学习总结 (一)
spring中"投机取巧"地限制 用户同时登陆
如果你喜欢本文
请长按二维码,关注 乔志勇笔记