大型网站架构系列:缓存在分布式系统中的应用(三)

news/2024/5/21 0:35:40/文章来源:https://blog.csdn.net/C18298182575/article/details/88064560

https://mp.weixin.qq.com/s/TrPlYj-3ymiLCIK8dQEiEw

上次主要给大家分享了,缓存在分布式系统中的应用,主要从不同的场景,介绍了CDN,反向代理,分布式缓存,本地缓存的常规架构和基本原理。

因为时间关于,原计划分享《缓存常见问题》的内容,没有讲。本次主要针对缓存的常见个问题,做一个介绍。主要有以下议题:

二、数据一致性

缓存是在数据持久化之前的一个节点,主要是将热点数据放到离用户最近或访问速度更快的介质中,加快数据的访问,减小响应时间。

因为缓存属于持久化数据的一个副本,因此不可避免的会出现数据不一致问题。导致脏读或读不到数据的情况。数据不一致,一般是因为网络不稳定或节点故障导致。根据数据的操作顺序,主要有以下几种情况。

2.1场景介绍

(1)先写缓存,再写数据库

         如下图:

 

 

假如缓存写成功,但写数据库失败或响应延迟,则下次读取(并发读)缓存时,就出现脏读;

(2)先写数据库,再写缓存

         如下图:

 

 

假如写数据库成功,但写缓存失败,则下次读取(并发读)缓存时,则读不到数据;

(3)缓存异步刷新

         指数据库操作和写缓存不在一个操作步骤中,比如在分布式场景下,无法做到同时写缓存或需要异步刷新(补救措施)时候。

 

  此种情况,主要考虑数据写入和缓存刷新的时效性。比如多久内刷新缓存,不影响用户对数据的访问。

2.2解决方法

第一个场景:

这个写缓存的方式,本身就是错误的,需要改为先写持久化介质,再写缓存的方式。

第二个场景:

(1)根据写入缓存的响应来进行判断,如果缓存写入失败,则回滚数据库操作;此种方法增加了程序的复杂度,不建议采用;

(2)缓存使用时,假如读缓存失败,先读数据库,再回写缓存的方式实现。

第三个场景:

(1)首先确定,哪些数据适合此类场景;

(2)根据经验值确定合理的数据不一致时间,用户数据刷新的时间间隔;

2.3 其他方法

(1)超时:设置合理的超时时间;

(2)刷新:定时刷新一定范围内(根据时间,版本号)的数据;

         以上是简化数据读写场景,实际中会分为:

         (1)缓存与数据库之间的一致性;

         (2)多级缓存之前的一致性;

         (3)缓存副本之前的一致性。

 

三、缓存高可用

业界有两种理论,第一套缓存就是缓存,临时存储数据的,不需要高可用。第二种缓存逐步演化为重要的存储介质,需要做高可用。

本人的看法是,缓存是否高可用,需要根据实际的场景而定。临界点是是否对后端的数据库造成影响。

具体的决策依据需要根据,集群的规模(数据,缓存),成本(服务器,运维),系统性能(并发量,吞吐量,响应时间)等方面综合评价。

3.1解决方法

缓存的高可用,一般通过分布式和复制实现。分布式实现数据的海量缓存,复制实现缓存数据节点的高可用。架构图如下:

 

 其中,分布式采用一致性Hash算法,复制采用异步复制。

3.2其他方法

(1)复制双写:缓存节点的复制,由异步改为双写,只有两份都写成功,才算成功。

(2)虚拟层:一致性Hash存在,假如其中一个HASH环不可用,数据会写入临近的环,当HASH可用时,数据又写入正常的HASH环,会导致数据偏移问题。这种情况,可以考虑在HASH环前面加一个虚拟层实现。

(3)多级缓存:比如一级使用本地缓存,二级采用分布式Cahce,三级采用分布式Cache+本地持久化;

方式很多,需要根据业务场景灵活选择。

 

四、缓存雪崩

雪崩是指当大量缓存失效时,导致大量的请求访问数据库,导致数据库服务器,无法抗住请求或挂掉的情况。

         解决方法:

         (1)合理规划缓存的失效时间;

         (2)合理评估数据库的负载压力;

         (3)对数据库进行过载保护或应用层限流;

         (4)多级缓存设计,缓存高可用;

 

五、缓存穿透

         缓存一般是Key,value方式存在,当某一个Key不存在时会查询数据库,假如这个Key,一直不存在,则会频繁的请求数据库,对数据库造成访问压力。

解决方法:

(1)对结果为空的数据也进行缓存,当此key有数据后,清理缓存;

(2)一定不存在的key,采用布隆过滤器,建立一个大的Bitmap中,查询时通过该bitmap过滤;

 

六、分享总结

以上是本周的分享,主要讲解了缓存常见的问题,包括数据一致性,缓存高可用,缓存雪崩,缓存穿透等知识。 

我的分享只是介绍一下知识结构,希望可以起到一个抛砖引玉的作用。因为每个知识点都有一些细化的地方,需要学习的知识点很多,需要大家不断深入学习。

我自己在微信上面建立了一个技术交流群,感兴趣的可以来群里交流学习,扫我助手的二维码让她拉你进群。添加助手回复「Java架构」即可!

今天晚上在微信群里送两本spring cloud的书。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_714606.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站应用之海量数据和高并发解决方案总结一二!

https://mp.weixin.qq.com/s?__bizMzUxOTAxODc2Mg&mid2247483781&idx3&sn19959b3978281e9bcadd7d19d8ecc178&chksmf98141e0cef6c8f6d6d53da7886906308660b6aa820f5d1fc2b55721db23ce9bfa73fe128a44&scene21#wechat_redirect 作者:徐刘根 | …

千万级用户的大型网站,应该如何设计其高并发架构?(彩蛋)

转发自今日头条 目录 (1)单块架构 (2)初步的高可用架构 (3)千万级用户量的压力预估 (4)服务器压力预估 (5)业务垂直拆分 (6)用…

一个开源vue网站博客,nuxt开源网站,前后端分离项目

unNue.com 开媛笔记,基于nuxt ssr首屏服务器端渲染 。用于分享、记录、交流和学习,希望可以帮助到小伙伴们。同时网站在不断更新,创造属于猿(媛)的世界 -$Bao Yalong ..Lets Go! https://unnue.com 简述 前端 Github地…

怎样将优酷网站下载的视频KUX转MP4格式

在休息之余,相信大多数人都会拿手机看电视剧听音乐之类的,最近拍了很多的新片子:《毒液:致命守护者》、《无名之辈》、《亡命救赎》《影》等等优质电影,但是很多的电影都只能在电影院观看的,如果不去电影院…

网站关键词编写方法,注意事项。

1.Title标签&#xff1a; 即网站标题&#xff08;沙发超人&#xff09;&#xff0c;指的是目标关键词或者主关键词在源代码中的表现形式。 代码格式1&#xff1a;<title>关键词1_关键词2_关键词3 – 网站的品牌</title> &#xff08;常用格式&#xff09; 代码格式…

分享一些省心的PPT模板下载网站资源(附5G优质PPT模板)

每次需要做PPT时&#xff0c;总是为找省心的模板二发愁&#xff0c;用搜索引擎搜索“免费PPT模板”时&#xff0c;展示出的大量所谓“免费”的网站。心动的点开一个后&#xff0c;最终却是&#xff1a;开通会员才免费&#xff0c;满满的套路 现在我们急需那些&#xff0c;省去搜…

network 关于PV,网站访问量和服务器带宽的选择

网站用户访问流量图 对于PV&#xff0c;流量和带宽的理解&#xff0c;可以分成几个问题可能更加容易理解 问题1&#xff1a;首先什么是PV 技术角度讲,1个PV是指从浏览器发出一个对网络服务器的Request 网络服务器接到Request之后会开始把该Request对应的一个Page &#xff08…

[IIS网站问题]设置防火墙协议及端口等问题

如果AppWeb网站通过域名公开访问,请选择 域 ;如果AppWeb网站只通过类似 http://192.168.3.107:6789 局域网访问,选择 专用 即可。如果实在搞不懂这个规则,就全选即可。见下图: 另外,名称可以自由定义.

小型的搜索引擎设计_广州网站设计工作室-赛致信息科技

很多人都在为自己企业的网站而发愁&#xff0c;担心的就是自己企业的网站做不好&#xff0c;在开始做网站的时候就很犹豫&#xff0c;不知道究竟该选择哪家网站建设好点&#xff0c;造成这一现状的根本原因就是现在网站建设的行业鱼龙混杂&#xff0c;让很多企业迷茫不知所措&a…

iis10 asp 如何连接mdb_网站500内部服务器错误如何解决 - 最蜘蛛池

原出处&#xff1a;最蜘蛛池原文链接&#xff1a;网站500内部服务器错误如何解决&#xff1f; - 最蜘蛛池在SEO工作过程中&#xff0c;我们偶尔会遇到http500内部服务器错误&#xff0c;这样的问题&#xff0c;它是一个明显的http状态码&#xff0c;它告诉站长&#xff0c;你的…

linux svn服务的维护,Linux服务器搭建svn环境方法详解_网站服务器运行维护,Linux,svn...

关于nginx location指令详解_网站服务器运行维护^~ 开头,注意这不是一个正则表达式(是提升优先级的字符串匹配)–它的目的是优先于正则表达式的匹配。如果该location是最佳匹配&#xff0c;则不再进行正则表达式检测。下面由Linux教程栏目给大家介绍Linux服务器搭建svn环境的方…

如何找到网站服务器的源代码_如何花3-5分钟找到网站Bug?

如何使用GA审核网站&#xff1f;只需7个步骤&#xff08;以下为问题形式出现&#xff09;&#xff0c;就会快速查出哪里出现了问题。1、网站上有损坏的页面吗&#xff1f;操作概览&#xff1a;行为>网站内容>页面标题维度&#xff0c;过滤“找不到页面”如果访问者访问错…

搜索引擎提交软件_网站如何被搜索引擎快速收录?

搭建好了你自己的网站&#xff0c;一定会有一个疑问&#xff0c;怎么让网站被搜索引擎快速收录&#xff1f;别人可以在搜索引擎搜到你的网站呢&#xff1f;我们总说怎么优化网站&#xff0c;怎么优化关键词&#xff0c;目的都是为了提升排名&#xff0c;提高网站在搜索引擎的收…

提高网站性能之 —— 减少图片HTTP 请求的方案

《Higb Performance Web Sites》&#xff08;中文名&#xff1a;“高性能网站建设指南”&#xff09;这本书对于前端工程师来说&#xff0c;绝对值得一读。本人有幸从公司借阅了&#xff0c;但不幸的是感觉翻译有点怪怪的。尤其是在翻译CSS Sprites的关键部分&#xff0c;让人不…

php网站模板包括增删改查,PHP实现简单的增删改查

前面一章已经将php环境搭建好了&#xff0c;现在开始学习使用php实现简单的增删改查。前提是WampServer和mysql安装好了。1.用代码在mysql中新建一个叫myphp的数据库&#xff0c;在myphp数据库中建立一个user表。⑴在WampServer的安装目录下找到www文件夹&#xff0c;我的在E:\…

21个为您的网站和博客提供的免费视频播放器

2019独角兽企业重金招聘Python工程师标准>>> 很多设计师在都会在他们的网站使用视频播放器。在线视频播放器无需为简单的用户和Web开发人员提供过多的介绍&#xff0c;它简单易用&#xff0c;为您建站时提供了灵活性和创造性&#xff0c;您可以添加无限数量的视频&a…

你的网站上显示Alexa世界排名的代码(表)

Alexa世界排名众多站长已经不会陌生了&#xff0c;今年将它炒的非常厉害&#xff0c;众多网站不论是拉广告还是做宣传都会以Alexa世界排名作为依据。因此&#xff0c;在这里就把Alexa排名的代码为各位需要的站长们介绍一下&#xff1a; 第一种&#xff1a;排名按钮式代码 说明&…

手机网站重构

前言 做WEB重构的同学都应该知道,我们一般需要在一个操作系统 (Windows XP)和4种以上的浏览器(IE678,Firefox,Chrome,Opera等)上测试页面的兼容性。 相对而言,手机上的页面兼容性测试,相当痛苦!手机光操作系统都有S60V3,S60V5,MTK,Android, Windows Mobile等等,每个操作系统上除…

换服务器原网站数据会丢失吗,ecs服务器更换操作系统后原服务器数据还在吗?...

ecs服务器更换操作系统后原服务器数据还在吗&#xff1f;这个知识点非常重要&#xff0c;我这里的话给大家简单的介绍一下&#xff0c;首先的话我们服务器如果更换操作系统重装操作系统&#xff0c;其实都是一个意思&#xff0c;更换系统之后呢&#xff0c;我们原来的数据库原来…

利用TP-Link+花生壳建立属于自己的网站

最近很想做一个自己的网站&#xff0c;苦于没有经费&#xff0c;也没有服务器&#xff0c;更加没有经验&#xff0c;所以只能寻找免费的解决方案。 身边有的工具只有一台TP-link&#xff0c;手提式电脑和能上网的环境&#xff0c;所以果断利用TP-link&#xff0c;没有TP-link的…