CDN缓存服务器的更新策略?

2018-08-29 11:17:26来源:不止思考 作者:奎哥热度:

       在互联网项目开发中,缓存的应用是非常普遍了,缓存可以帮助页面提高加载速度,减少服务器或数据源的负载。

  1、为什么需要缓存?

  一般在项目中,最消耗性能的地方就是后端服务的数据库了。而数据库的读写频率常常都是不均匀分布的,大多情况是读多写少,并且读操作(select)还会有一些复杂的判断条件,比如 like、group、join 等等,这些语法是非常消耗性能的,所有会出现很多的慢查询,因此数据库很容易在读操作的环节遇到瓶颈。

  那么通过在数据库前面,前置一个缓存服务,就可以有效的吸收不均匀的请求,抵挡流量波峰。

  另外,如果应用与数据源不在同一个服务器的情况下,中间还会有很多的网络消耗,也会对应用的响应速度有很大影响,如果当前应用对数据实时性的要求不那么强的话,在应用侧加上缓存就能很快速的提升效率。

  2、那使用缓存会遇到哪些问题呢?

  虽然缓存可以提高整体性能,但是它也可能会带来别的问题。例如使用缓存之后,就相当于把数据存放了2份,一份是在数据库中,另一份存放在缓存中。当有新的数据要写入或者旧数据需要更新的时候,如果我们只更新了其中一份数据源,那两边的数据就不一致了,所以这里就存在一个缓存数据与数据库数据如何进行有效且快速的同步问题,才可以保证数据的最终一致性。

  另外,加上缓存服务其实也引入了系统架构的复杂度,因为还需要额外的关注缓存自身带来的下列问题:

  缓存的过期时间问题:设计缓存的过期时间需要非常的有技巧,且必须与业务实际情况相结合。因为如果设计的过期时间太短了,那会导致缓存效果不佳,且还会造成频繁的从数据库中往缓存里写数据。如果缓存设计的过期时间太长了,又会导致内存的浪费。

  缓存的命中率问题:这也是设计缓存中需要存放哪些数据的很重要一点,如果设计的不好,可能会导致缓存命中率过低,失去缓存效果。一般对于热点数据而言,要保证命中率达到70%以上效果最佳。

  缓存的穿透/雪崩问题:是指如果缓存服务一旦宕机或全部丢失,那么有可能一瞬间所有的流量都直接打到了后端数据库上,可能会造成连锁反应,瞬间的请求高峰极有可能导致数据库无法承载。

  3、缓存的更新策略具体有哪些?

  典型的缓存模式,一般有如下几种:

  Cache Aside

  Read/Write Through

  Write Behind

  每种模式都有不同的特点,适应与不同的项目场景,下面来依次看看:

  Cache Aside 模式

  这是大家经常用到的一种策略模式。这种模式主要流程如下:

  应用在查询数据的时候,先从缓存Cache中读取数据,如果缓存中没有,则再从数据库中读取数据,得到数据库的数据之后,将这个数据也放到缓存Cache中。

  如果应用要更新某个数据,也是先去更新数据库中的数据,更新完成之后,则通过指令让缓存Cache中的数据失效。

  这里为什么不让更新操作在写完数据库之后,紧接着去把缓存Cache中的数据也修改了呢?

  主要是因为这样做的话,就有2个写操作的事件了,担心在并发的情况下会导致脏数据,举个例子:假如同时有2个请求,请求A和请求B,并发的执行。请求A是要去读数据,请求B是要去更新数据。初始状态缓存中是没有数据的,当请求A读到数据之后,准备往回写的时候,此刻,请求B正好要更新数据,更新完了数据库之后,又去把缓存更新了,那请求A再往缓存中写的就是旧数据了,属于脏数据。

  那么 Cache Aside 模式就没有脏数据问题了吗?不是的,在极端情况下也可能会产生脏数据,比如:

  假如同时有2个请求,请求A和请求B,并发的执行。请求A是要去读数据,请求B是要去写数据。假如初始状态缓存中没有这个数据,那请求A发现缓存中没有数据,就会去数据库中读数据,读到了数据准备写回缓存中,就在这个时候,请求B是要去写数据的,请求B在写完数据库的数据之后,又去设置了缓存失效。这个时候,请求A由于在数据库中读到了之前的旧数据,开始往缓存中写数据了,此时写进入的就也是旧数据。那么最终就会导致,缓存中的数据与数据库的数据不一致,造成了脏数据。

  不过这种概率比上面一种概率要小很多。所以整体而言 Cache Aside 模式 还是一种比较简单实用的方式。

  Read/Write Through 模式

 

  这个模式其实就是将 缓存服务 作为主要的存储,应用的所有读写请求都是直接与缓存服务打交道,而不管最后端的数据库了,数据库的数据由缓存服务来维护和更新。不过缓存中数据变更的时候是同步去更新数据库的,在应用的眼中只有缓存服务。

  流程就相当简单了:

  应用要读数据和更新数据都直接访问缓存服务

  缓存服务同步的将数据更新到数据库

  这个模式出现脏数据的概率就比较低,但是就强依赖缓存了,对缓存服务的稳定性有较大要求,另外,增加新缓存节点时还会有初始状态空数据问题。

  Write Behind 模式

  这个模式就是 Read/Write Through 模式 的一个变种。区别就是 Read/Write Through 模式的缓存写数据库的时候是同步的,而 Write Behind 模式 的缓存操作数据库是异步的。

  流程如下:

  应用要读数据和更新数据都直接访问缓存服务

  缓存服务异步的将数据更新到数据库(通过异步任务)

  这个模式的特点就是速度很快,效率会非常高,但是数据的一致性比较差,还可能会有数据的丢失情况,实现逻辑也较为复杂。

  以上就是目前三种主流的缓存更新策略,另外还有Refrsh-Ahead模式等由于使用的不是很常见就不详细介绍了。

  缓存是互联网项目中非常普遍的一个提高效率的方案,用法比较多,也比较关键,大家可以一起交流。

责任编辑:潘威

为您推荐

IBTC2011王松:CDN与CLOUD云服务在广电三网融合背景下的应用

DVBCN讯2011年6月7日-8日白玉兰国际广播影视技术论坛(IBTC)在上海大宁福朋喜来登集团酒店举行。IBTC2011是第17届上海电视节的重要学术活动之一。本届论坛将围绕“云技术与广电三网融合”这一主题,展开全国性的、权威性的研讨。DVBCN数字电视中文网作为本届论坛的独家支持媒体将对“IBTC2011”进行全程播报。点击进入专题在本届IBTC2011“云技术与广电三网融合”论坛上,北京蓝汛通信技术有限责任公司CEO王松发表演讲的主题为《CDN与CLOUD云服务在广电三网融合背景下的应用》。

CDN让网络访问体验日趋完美

近日,艾肯家电网签约国内知名的CDN网站加速服务提供商北京快网,北京快网将为艾肯家电网提供提全站CDN加速服务。记者了解到,目前国内比较大的门户网站为现实网站的高速访问,早已使用了CDN网络加速。目前,包括腾讯、新浪、搜狐、网易、酷六、红袖添香等众多网站都采用了北京快网的CDN网络加速服务这一服务。据《中国互联网年度综合报告2009-2011》数据显示,预计至2011年互联网市场规模将达到1300亿,互联网总用户数将达到6亿。网民数量的持续提升同时也让互联网服务发展如火如荼,视频、SNS、垂直网站等新兴网站层出不穷,在带来全新商机的同时,也让互联网带宽、服务器等资源捉襟见肘。而CDN服务提供商

移动互联网将推动电视产业的变革

目前有30多人的技术团队和10多人的运营团队。手机电视两种不同的运营思路中国移动有个手机视频的客户端,这个客户端本人曾经体验过,对这个产品的感觉并不好,这个软件走的是中国移动WAP的网络,是运营商的网络,其目的就是想把用户固定在自己的网络上,不断的推出自己的服务,增加自己的粘附性。而且最让用户郁闷的是当有WiFi时并不能使用,而且对于那些3G用户来说同样不能使用。手机电视采用的是互联网的方式,国外的用户只要有网络同样可以观看。如果用户对流量费用有顾忌的话,可以选择在无线的情况下观看,非常的方便。据张总介绍,手机电视完全采用的是互联网的方式,用户任意选择登陆的网络,

传雅虎董事会成员肯尼有意竞选CEO

9月29日消息,据国外媒体报道,雅虎董事会成员、国际上最大的CDN服务商Akamai总裁大卫·肯尼(DavidKenny)公开表示有意竞选雅虎CEO。国际上最大的CDN服务商Akamai总裁大卫·肯尼知情人士透露,肯尼目前还在管理Akamai的业务,但确定要公开竞选雅虎CEO。该人认为,肯尼对雅虎内部发生的一切非常清楚,知道自己在干什么。昨天,肯尼曾与雅虎产品团队工作人员进行数小时长谈。近日,他还曾与包括私募公司在内的雅虎投资方、股东交换了意见。某科技媒体认为,肯尼适宜担