当前位置:首页 >  站长 >  建站经验 >  正文

服务器端缓存失效的应对方法经验总结

 2022-03-14 09:40  来源: 网络综合   我来投稿 撤稿纠错

  【推荐】海外独服/站群服务器/高防

缓存失效情况举例

看下这个段伪代码:

local value = get_from_cache(key)

if not value then

value = query_db(sql)

set_to_cache(value, timeout = 100)

end

return value

看上去没有问题,在单元测试情况下,也不会有异常。

但是,进行压力测试的时候,你会发现,每隔100秒,数据库的查询就会出现一次峰值。如果你的cache失效时间设置的比较长,那么这个问题被发现的机率就会降低。

为什么会出现峰值呢?想象一下,在cache失效的瞬间,如果并发请求有1000条同时到了 query_db(sql) 这个函数会怎样?没错,会有1000个请求打向数据库。这就是缓存失效瞬间引起的风暴。它有一个英文名,叫 "dog-pile effect"。

怎么解决?自然的想法是发现缓存失效后,加一把锁来控制数据库的请求。具体的细节,春哥在lua-resty-lock的文档里面做了详细的说明,我就不重复了,请看这里。多说一句,lua-resty-lock库本身已经替你完成了wait for lock的过程,看代码的时候需要注意下这个细节。

传统缓存失效应对策略 为了提高业务访问速度,提升业务读并发,很多用户都会在业务架构中引入缓存层。业务所有读请求全部路由到缓存层,通过缓存的内存读取机制大大提升业务读取性能。缓存中的数据不能持久化 ,一旦缓存异常退出,那么内存中的数据就会丢失,所以为了保证数据完整,业务的更新数据会落地到持久化存储中,例如DB。目前云用户的业务架构一般如下图:

在上图中,大家可以看到,用户的更新数据直接持久化到DB, 业务读请求直接请求缓存数据,所以业务需要解决缓存失效问题,即解决因为数据变更导致缓存中的数据失效的问题。 目前业务解决缓存失效问题的解决方法一般是业务实现DB、缓存双写。通过业务双写解决缓存失效,存在如下的问题:

代码侵入性比较强,需要双写两份存储,任何对DB的数据变更,都需要同时更新缓存,代码层面后期可维护程度不高

用户请求线程里同步调用缓存,对缓存存在强以来,遇到缓存超时等异常时,没有办法做到有效的重试,遇到异常给用户返回系统错误、操作失败等信息,严重影响用户体验

用户请求线程里同步完成DB、缓存双写,变更请求链路长,访问延迟大,影响用户体验

RDS数据订阅消费,轻松解决缓存失效

在阿里巴巴内部同样也遇到了缓存失效的问题,随着业务架构得不断调整优化,我们已经沉淀出一套高可靠、极优雅得缓存失效架构。即通过数据传输提供的数据订阅功能,异步获取DB(例如公共云上的RDS)的增量数据,根据增量数据进行缓存失效。具体的架构类似下图:

在这个架构里面,缓存更新流程如下:

1.业务完成DB更新后即返回请求

2.数据订阅通过日志解析方式实时解析并订阅DB的增量更新数据,当发现DB有数据更新时,将增量数据推送给下游消费者

3.下游消费业务一旦接收到增量更新数据,即调用消费线程进行缓存更新

至此完成整个缓存更新过程。

从上面的缓存失效流程,可以看出这种缓存失效机制:

1.更新路径短,延迟低: 缓存失效为异步流程,业务更新DB完成后直接返回,不需要关心缓存失效流程,整个更新路径短,更新延迟低

2.应用简单可靠:应用无需实现复杂双写逻辑,只需启动异步线程监听增量数据,更新缓存数据即可

3.应用更新无性能消耗:因为数据订阅是通过解析DB的增量日志来获取增量数据,获取数据的过程对业务、DB性能无损

小结 数据订阅功能为阿里云数据传输提供的一种数据分发方式。通过数据订阅实现的缓存失效策略,让业务更新更快捷,让业务逻辑更简单、更可靠。

数据订阅只是数据传输提供的一种传输方式,除数据订阅之外,数据传输还提供了数据实时同步,不停服迁移等多种传输能力,如需了解数据传输更多详情,请猛击数据传输。

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
服务器
服务器系统

相关文章

  • 金i奖榜单揭晓!坤前计算机荣膺“2023服务器创新企业奖”

    2023年6月26日,由中国科学院《互联网周刊》、中国社会科学院信息化研究中心、eNet研究院、德本咨询联合主办的2023(第五届)创新发展论坛成功举办,同期被视为互联网产业发展创新风向标的“金i奖”重磅发布。在竞争激烈的服务器领域,坤前计算机再度上榜,荣膺“2023服务器创新企业奖”。研发创新布局

    标签:
    服务器
  • RAKsmart有奖问答,爆款VPS免费领,前30名送随机微信红包!!!

    为更好的了解客户需求及RAKsmart自信不足,即日起,RAKsmart将推出有奖问卷调查,参与问卷调查即可领取SV1024MVPS使用一个月,同时,前30名参与问卷调查,可领取微信红包随机1~10元不等,送完即止,快来参与吧!活动时间:美国西岸圣何塞时间06/26/2023~07/10/2023问

    标签:
    服务器
  • 站群服务器有哪些优势?

    站群服务器是单独为一个网站或者多个网站配置独立IP的一种服务器。企业或是用户如果想组建多个网站的话就需要用站群服务器了。站群服务器可以提高搜索引擎多个网站的关注度,提高网站文章的收录以及网站文章的访问量。

    标签:
    服务器
  • 从VPS切换到云服务器的几大理由

    有很多文章比较VPS和云服务器,选择哪种解决方案来提供最佳效率。尽管很多人仍在使用VPS,但其中许多人已对云服务器拥有简单的认知,且已有意图从VPS迁移到云服务器。然而在这样做之前,您需要更加深入了解云服务器,它的优势超过VPS,而不仅仅是因为“云”已成为业务托管部署的新趋势。

    标签:
    服务器
  • 云服务器与物理机有哪些区别?

    物理机就是独立的一台服务器,可以理解成物理机为一个大房子,这个房子的归属权就在你手里,而云服务器是大房子里的一个房间。

热门排行

信息推荐