您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

6个常见的高并发缓存问题,你知道几个?

时间:2019-09-05 11:15:05  来源:  作者:

前言

一般来说,现在的互联网应用网站或者App,它的整体流程可以用我们这个图里展示的来表示,用户请求开始,从这个界面是最里面的浏览器和APP,到网络转发,再到应用服务,最后到存储,这纯属可能是数据库文件系统,然后再返回到界面呈现内容。

6个常见的高并发缓存问题,你知道几个?

 

随着互联网的普及,内容信息越来越复杂,用户数和访问量越来越大,我们的应用需要支撑更多的并发量,同时,我们的应用服务器和数据库服务器所做的计算也越来越多,但是,往往我们的应用服务器的资源是有限的,而且技术变革是缓慢的,所以每秒能接收请求次数也是有限的,或者说文件的读写也是有限的。

如何能有效利用有限的资源来提供尽可能大的吞吐量呢?一个有效的办法就是引入缓存,打破图中的标准的流程,每个环节中请求可以从缓存中直接获取目标数据并返回,从而减少他们的计算量,来有效提升响应速度,让有限的资源服务更多的用户,像我们这个图里展示的缓存的使用,它其实可以出现在1到4的各个环节中。

缓存一致性问题

当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。

这就比较依赖缓存的过期和更新策略。一般会在数据发生更改的时,主动更新缓存中的数据或者移除对应的缓存。

6个常见的高并发缓存问题,你知道几个?

 

 

缓存并发问题

缓存过期后将尝试从后端数据库获取数据,这是一个看似合理的流程。但是,在高并发场景下,有可能多个请求并发的去从数据库获取数据,对后端数据库造成极大的冲击,甚至导致 “雪崩”现象。

此外,当某个缓存key在被更新时,同时也可能被大量请求在获取,这也会导致一致性的问题。那如何避免类似问题呢?

我们会想到类似“锁”的机制,在缓存更新或者过期的情况下,先尝试获取到锁,当更新或者从数据库获取完成后再释放锁,其他的请求只需要牺牲一定的等待时间,即可直接从缓存中继续获取数据。

6个常见的高并发缓存问题,你知道几个?

 

 

缓存穿透问题

缓存穿透在有些地方也称为“击穿”。很多朋友对缓存穿透的理解是:由于缓存故障或者缓存过期导致大量请求穿透到后端数据库服务器,从而对数据库造成巨大冲击。

这其实是一种误解。真正的缓存穿透应该是这样的:

在高并发场景下,如果某一个key被高并发访问,没有被命中,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求达到数据库,而当该key对应的数据本身就是空的情况下,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力。

可以通过下面的几种常用方式来避免缓存传统问题:

1、缓存空对象

对查询结果为空的对象也进行缓存,如果是集合,可以缓存一个空的集合(非null),如果是缓存单个对象,可以通过字段标识来区分。这样避免请求穿透到后端数据库。

同时,也需要保证缓存数据的时效性。这种方式实现起来成本较低,比较适合命中不高,但可能被频繁更新的数据。

2、单独过滤处理

对所有可能对应数据为空的key进行统一的存放,并在请求前做拦截,这样避免请求穿透到后端数据库。这种方式实现起来相对复杂,比较适合命中不高,但是更新不频繁的数据。

6个常见的高并发缓存问题,你知道几个?

 

 

缓存颠簸问题

缓存的颠簸问题,有些地方可能被成为“缓存抖动”,可以看做是一种比“雪崩”更轻微的故障,但是也会在一段时间内对系统造成冲击和性能影响。一般是由于缓存节点故障导致。业内推荐的做法是通过一致性Hash算法来解决。

缓存的雪崩现象

缓存雪崩就是指由于缓存的原因,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。

导致这种现象的原因有很多种,上面提到的“缓存并发”,“缓存穿透”,“缓存颠簸”等问题,其实都可能会导致缓存雪崩现象发生。这些问题也可能会被恶意攻击者所利用。

还有一种情况,例如某个时间点内,系统预加载的缓存周期性集中失效了,也可能会导致雪崩。为了避免这种周期性失效,可以通过设置不同的过期时间,来错开缓存过期,从而避免缓存集中失效。

从应用架构角度,我们可以通过限流、降级、熔断等手段来降低影响,也可以通过多级缓存来避免这种灾难。

此外,从整个研发体系流程的角度,应该加强压力测试,尽量模拟真实场景,尽早的暴露问题从而防范。

6个常见的高并发缓存问题,你知道几个?

 

 

缓存无底洞现象

该问题由 facebook 的工作人员提出的, facebook 在 2010 年左右,memcached 节点就已经达3000 个,缓存数千 G 内容。

他们发现了一个问题---memcached 连接频率,效率下降了,于是加 memcached 节点,添加了后,发现因为连接频率导致的问题,仍然存在,并没有好转,称之为”无底洞现象”。

6个常见的高并发缓存问题,你知道几个?

 

 

目前主流的数据库、缓存、Nosql、搜索中间件等技术栈中,都支持“分片”技术,来满足“高性能、高并发、高可用、可扩展”等要求。

有些是在client端通过Hash取模(或一致性Hash)将值映射到不同的实例上,有些是在client端通过范围取值的方式映射的。当然,也有些是在服务端进行的。

但是,每一次操作都可能需要和不同节点进行网络通信来完成,实例节点越多,则开销会越大,对性能影响就越大。

主要可以从如下几个方面避免和优化:

1、数据分布方式

有些业务数据可能适合Hash分布,而有些业务适合采用范围分布,这样能够从一定程度避免网络IO的开销。

2、IO优化

可以充分利用连接池,NIO等技术来尽可能降低连接开销,增强并发连接能力。

3、数据访问方式

一次性获取大的数据集,会比分多次去获取小数据集的网络IO开销更小。

当然,缓存无底洞现象并不常见。在绝大多数的公司里可能根本不会遇到。



Tags:高并发   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
前面几周,讲过Nginx的日志配置:Nginx | 超详细!Nginx 日志配置实践,然后也讲了Nginx的进程模型,底层原理等:Nginx为什么快到根本停不下来?没看过的可以先看看(链接点击可跳转)。 例...【详细内容】
2020-06-26   高并发  点击:(0)  评论:(0)  加入收藏
一、高并发简介在互联网的业务架构中,高并发是最难处理的业务之一,常见的使用场景:秒杀,抢购,订票系统;高并发的流程中需要处理的复杂问题非常多,主要涉及下面几个方面: 流量管理,逐...【详细内容】
2020-06-23   高并发  点击:(0)  评论:(0)  加入收藏
一、4大具有代表性的并发模型及其优缺点4大具有代表性的并发模型:Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,select模型和poll模型、Epoll模型。...【详细内容】
2020-06-03   高并发  点击:(1)  评论:(0)  加入收藏
在做网络服务的时候tcp并发服务端程序的编写必不可少。tcp并发通常有几种固定的设计模式套路,他们各有优点,也各有应用之处。下面就简单的讨论下这几种模式的差异:单进程,单线程...【详细内容】
2020-06-02   高并发  点击:(2)  评论:(0)  加入收藏
缓存穿透介绍:当查询一个不存在的数据,此时缓存是不命中的,就会去查询 db,这将导致每次查询这个不存在的数据都要去访问 db,缓存就没有意义了。如果不怀好意的人利用不存在的数...【详细内容】
2020-05-17   高并发  点击:(1)  评论:(0)  加入收藏
每到节假日和过年,需要外出通行的人几乎都会遇到一个问题:抢火车票!当全国上亿人都在固定的时间段抢票,服务器动辄就要承受上百万级并发的情况时,你就会明白,一个支持高并发的服务...【详细内容】
2020-05-10   高并发  点击:(2)  评论:(0)  加入收藏
究竟什么样的系统算是高并发系统?今天,我们就一起解密高并发业务场景下典型的秒杀系统的架构,结合高并发专题下的其他文章,学以致用。...【详细内容】
2020-04-20   高并发  点击:(7)  评论:(0)  加入收藏
高并发服务器逻辑处理瓶颈,如何解决?首先我们先了解什么是并发!并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上...【详细内容】
2020-04-18   高并发  点击:(7)  评论:(0)  加入收藏
1.概述在本文中,我们将讨论为建立高度并发的应用程序而逐渐建立的一些设计原理和模式。但是,值得注意的是,设计并发应用程序是一个广泛而复杂的主题,因此,没有任何教程可以声称对...【详细内容】
2020-03-30   高并发  点击:(4)  评论:(0)  加入收藏
Redis的高并发和快速原因1.Redis基于内存,内存的读写速度非常快;2.Redis是单线程的,为上下文切换线程节省了大量时间;3.Redis使用多路复用技术来处理并发连接。 非阻塞IO的内部...【详细内容】
2020-03-25   高并发  点击:(11)  评论:(0)  加入收藏
什么是高并发高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时处理很多请求。高并发相关的一些指标有响应时间、吞吐量、每秒查...【详细内容】
2020-03-18   高并发  点击:(3)  评论:(0)  加入收藏
高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等。 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到...【详细内容】
2020-03-15   高并发  点击:(13)  评论:(0)  加入收藏
处理高并发无非就是四大的方法 分流、缓存、降级、限流1、分流实现方式最简单的是增加多台机器,目的是为了扩容基本思路是 tomcat(万以下,tomcat顶峰700并发)=》nginx(3-4万并发)=...【详细内容】
2020-03-12   高并发  点击:(12)  评论:(0)  加入收藏
每到节假日期间,一二线城市返乡、外出游玩的人们几乎都面临着一个问题:抢火车票!虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会。尤其是春节...【详细内容】
2020-01-29   高并发  点击:(1)  评论:(0)  加入收藏
需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。这个...【详细内容】
2020-01-08   高并发  点击:(62)  评论:(0)  加入收藏
在开发分布式高并发系统时有三把利器用来保护系统:缓存、降级、限流缓存缓存的目的是提升系统访问速度和增大系统处理容量降级降级是当服务出现问题或者影响到核心流程时,需要...【详细内容】
2020-01-02   高并发  点击:(17)  评论:(0)  加入收藏
在软件架构设计过程中,解决软件高并发问题,软件可用性,及软件伸缩性等,最好的解决方案就是服务器进行集群,然后负载均衡转发了。那么负载均衡有哪几种方案可供选择,各自的又有什么...【详细内容】
2019-12-27   高并发  点击:(46)  评论:(0)  加入收藏
概述创建多个并发线程、模拟多个访问者同时对某一URL进行访问,可对任何基于url的资源进行并发性能测试.压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况...【详细内容】
2019-12-24   高并发  点击:(5)  评论:(0)  加入收藏
最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。...【详细内容】
2019-12-16   高并发  点击:(22)  评论:(0)  加入收藏
Nginx现在是非常火爆的web服务器,她使用更少的资源,支持更多的并发连接数,实现了linux的epoll模型。Nginx采用的是多进程单线程和多路IO复用模型。使用了I/O多路复用技术的Ng...【详细内容】
2019-11-26   高并发  点击:(99)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条