雪崩

Redis雪崩,击穿,穿透

ⅰ亾dé卋堺 提交于 2019-12-03 09:32:06
缓存雪崩:redis服务器挂掉导致请求大量涌至数据库;缓存穿透:大量缓存中不存在的请求key访问直接落到数据库,一般是恶意攻击;缓存击穿:热点key在请求高峰失效,瞬间大量请求落到数据库; 来源: https://www.cnblogs.com/znzuinb/p/11785536.html

Redis雪崩,击穿,穿透

匿名 (未验证) 提交于 2019-12-03 00:44:02
缓存雪崩:redis服务器挂掉导致请求大量涌至数据库;缓存穿透:大量缓存中不存在的请求key访问直接落到数据库,一般是恶意攻击;缓存击穿:热点key在请求高峰失效,瞬间大量请求落到数据库; 来源:博客园 作者: 一个平凡的程序猿 链接:https://www.cnblogs.com/znzuinb/p/11785536.html

数据库 | Redis 缓存雪崩解决方案

匿名 (未验证) 提交于 2019-12-03 00:44:02
Redis 雪崩 缓存层承载着大量的请求,有效保护了存储层。但是如果由于缓存大量失效或者缓存整体不能提供服务,导致大量的请求到达存储层,会使存储层负载增加,这就是缓存雪崩的场景。 解决缓存雪崩,可以从以下几个方面入手。 1.保持缓存层的高可用性 使用Redis 哨兵模式或者Redis 集群部署方式,即便个别Redis 节点下线,整个缓存层依然可以使用。除此之外,还可以在多个机房部署 Redis,这样即便是机房死机,依然可以实现缓存层的高可用。 2.限流降级组件 无论是缓存层还是存储层都会有出错的概率,可以将它们视为资源。作为并发量较大的分布式系统,假如有一个资源不可用,可能会造成所有线程在获取这个资源时异常,造成整个系统不可用。降级在高并发系统中是非常正常的,比如推荐服务中,如果个性化推荐服务不可用,可以降级补充热点数据,不至于造成整个推荐服务不可用。常见的限流降级组件如 Hystrix、Sentinel 等。 3.缓存不过期 Redis 中保存的 key 永不失效,这样就不会出现大量缓存同时失效的问题,但是随之而来的就是Redis 需要更多的存储空间。 4.优化缓存过期时间 设计缓存时,为每一个 key 选择合适的过期时间,避免大量的 key 在同一时刻同时失效,造成缓存雪崩。 5.使用互斥锁重建缓存 在高并发场景下,为了避免大量的请求同时到达存储层查询数据、重建缓存

consul、eureka、nacos对比

匿名 (未验证) 提交于 2019-12-03 00:08:02
eureka 不支持 consul 支持 但用起来偏麻烦,不太符合springBoot框架的命名风格,支持动态刷新 nacos 支持 用起来简单,符合springBoot的命名风格,支持动态刷新 eureka 依赖:依赖ZooKeeper 应用内/外:直接集成到应用中,依赖于应用自身完成服务的注册与发现, ACP原则:遵循AP(可用性+分离容忍)原则,有较强的可用性,服务注册快,但牺牲了一定的一致性。 版本迭代:目前已经不进行升级 集成支持:只支持SpringCloud集成 访问协议:HTTP 雪崩保护:支持雪崩保护 界面:英文界面,不符合国人习惯 上手:容易 consul 依赖:不依赖其他组件 应用内/外:属于外部应用,侵入性小 ACP原则:遵循CP原则(一致性+分离容忍) 服务注册稍慢,由于其一致性导致了在Leader挂掉时重新选举期间真个consul不可用。 版本迭代:目前仍然进行版本迭代 集成支持:支持SpringCloud K8S集成 访问协议:HTTP/DNS 雪崩保护:不支持雪崩保护 界面:英文界面,不符合国人习惯 上手:复杂一点 nacos 依赖:不依赖其他组件 应用内/外:属于外部应用,侵入性小 ACP原则:通知遵循CP原则(一致性+分离容忍) 和AP原则(可用性+分离容忍) 版本迭代:目前仍然进行版本迭代 集成支持:支持Dubbo 、SpringCloud

hystrix熔断

匿名 (未验证) 提交于 2019-12-02 23:42:01
Ŀ¼ 背景 :分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务 雪崩效应。 为了应对服务雪崩, 一种常见的做法是手动服务降级,而Hystrix的出现,给我们提供了另一 种选择。 出现雪崩原因 :服务调用者不可用、重试增加流量、服务提供者不可用 服务不可用场景 :硬件故障、程序Bug、缓存击穿、用户大量请求 重试增加流量场景 :代码重试调用、用户重复调用 hystrix熔断策略 :流量阈值控制、熔断开关控制、熔断间断性尝试服务状态 官方流程图 : (1)构建一个command,command 有两种模式:一种是正常的线程模式,另外一种是观察者模式。 (2)执行command 命令,执行command有四种方式:execute(以同步阻塞方式执行command的 run方法)、queue(以异步方式执行command的run方法)、observe(事件注册前执行run/construct)、 toObservable(事件注册前执行run/construct) (3)缓存命中验证:验证当前请求是否命中缓存,如果命中缓存直接返回命中结果。 (4)熔断开关判定:打开直接进去command的回退逻辑 (5)信号量或者线程池容量判定:判断当前的command对应的请求数量是否超过最大信号量或者线程池 阈值,超过则进入异常处理逻辑fallback

缓存雪崩、穿透、预热、更新、降级的概括

匿名 (未验证) 提交于 2019-12-02 23:06:17
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/imjavaxb/article/details/88592234 一、缓存雪崩 由于原有的缓存失效,新缓存未到期间(如设置缓存时间采用了相同的过期时间),导致请求直接访问数据库,而对数据库造成过大的压力导致数据库宕机,从而产生一系列连锁反应造成整个系统崩 溃; 二、缓存穿透 缓存与数据库都没有,导致在缓存和数据库都查不到数据而返回空(两次无用的查询)--缓存命中率 三、缓存预热 在系统上线前将数据库数据提前加载到缓存里 四、缓存更新 清除过期缓存,更新缓存 五、缓存降级 由于访问量剧增导致服务出现问题时,应尽可能舍弃非核心服务以保存核心服务 文章来源: https://blog.csdn.net/imjavaxb/article/details/88592234

缓存中的击穿和缓存中雪崩以及解决方案

守給你的承諾、 提交于 2019-12-02 12:52:27
什么是缓存击穿问题 一些用户在双十一的时候恶意请求一些缓存中不存在的数据,由于一般的逻辑都是查询缓存不存在就切换查数据库,而数据库也不存在,就会抛出大量异常,引起数据库宕机。 解决办法: ①使用互斥锁排队,什么意思?查Redis时为空的时候就加锁,查到数据后再释放锁,其他线程查是空就要再外面 等,这种做法会让吞吐量降低 ②布隆过滤器,什么意思?相当于hashset,快速判断key是否在容器中,如果没有直接返回,这样就不用去查数据库了。 什么是缓存雪崩 击穿是恶意行为,那么雪崩就是过期问题。一个时间段,大量的键过期而导致查不到数据。然后都去访问数据库导 致连接异常。 解决办法: 1.互斥锁 2建议备份缓存 3.修改键过期时间 来源: https://blog.csdn.net/weixin_44787000/article/details/102761319

redis 常见问题总结

筅森魡賤 提交于 2019-12-02 05:27:15
1.缓存穿透是什么? 缓存穿透,是指查询一个数据库一定不存在的数据 问题: 想象一下,如果查询传入的参数是-1,会怎么样?? 这个-1,一定是不存在的对象。当每次用-1 去查询数据库的时候,每次查询的结果都为空,每次又都不会进行缓存,假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库。即便是采用UUID,也是很容易找到一个不存在的key,进行攻击。 解决办法: 采用缓存空值的方式 如果从数据库查询的对象为空,也放入缓存,但是设置缓存的时间较短,比如设置为60s 三、缓存雪崩 1.缓存雪崩是什么?? 缓存雪崩:在某一个时间段,缓存集中过期失效 问题:雪崩的原因之一: 在写文本的时候,马上就要到双十二零点,很快就会迎来一波抢购,这波商品比较集中的放入了缓存,假设缓存一个小时,那么到了凌晨一点钟的时候,这批商品的缓存就都过期了,而对这批商品的访问查询,都落到了数据库上,对于数据库而言,就会产生周期性的压力波峰。 解决办法: 采用不同分类商品,缓存周期不同。 在同一分类中的商品,加上一个随机因子,这样尽可能的分散缓存过期时间。 热门类的商品缓存时间长一些,冷门类目的商品缓存时间短一些,也能节省缓存服务的资源。 其实,集中过期倒不是非常致命 比较致命的缓存雪崩,是缓存服务器某个节点宕机或断网 而缓存服务节点的宕机,对数据库服务器造成的压力是不可预知的

缓存雪崩,缓存穿透,缓存预热,缓存热备

北战南征 提交于 2019-12-02 05:00:24
缓存雪崩,缓存穿透,缓存预热,缓存热备是在做缓存设计或者缓存应用时经常遇到的概念,也是缓存应用过程中必须熟知及知道 的东西。 缓存雪崩 当缓存处于单点情况下,一旦缓存服务器崩溃,所有的请求就会落到数据库层,此时,如果由于访问量过大则会导致数据库宕机,进而导致整个网站或服务不可用,这种缓存故障就是俗称的缓存雪崩。 解决方案:解决缓存雪崩故障,就得解决单点问题,提高缓存高可用性,建立分布式的高可用缓存系统,一台缓存服务器挂了,另外的一台起来继续工作,更不能影响其他的缓存系统。 缓存穿透 如果某个key对应的数据不存在,而又未对该key做缓存,所以每次请求都会穿过缓存直接到数据库进行查询,并发量高的情况下进而导致数据库直接宕机,这就是缓存穿透。 解决方案:解决缓存穿透,如果做了缓存就要把null值或者空列表等也要缓存起来。如果是恶意攻击一个不存在的key,在控制层做频率限制是必须的。 缓存预热 新的缓存系统没有任何缓存数据,在缓存重建数据的过程中,系统性能和数据库负载都不太好,所以最好是在系统上线之前就把要缓存的热点数据加载到缓存中,这种缓存预加载手段就是缓存预热。 缓存热备 缓存热备即当一台缓存服务器不可用时能实时切换到备用缓存服务器,不影响缓存使用。集群模式下,每个主节点都会有一个或多个从节点来当备用,一旦主节点挂点,从节点立即充当主节点使用。 来源: https://blog