当前位置: 首页 > news >正文

悟空建站seo服务全国最新产品代理商

悟空建站seo服务,全国最新产品代理商,网站建设介绍ppt模板下载,乐都网站建设多少钱谈谈一致性 一致性就是数据保持一致#xff0c;在分布式系统中#xff0c;可以理解为多个节点中数据的值是一致的。 强一致性#xff1a;这种一致性级别是最符合用户直觉的#xff0c;它要求系统写入什么#xff0c;读出来的也会是什么#xff0c;用户体验好#xff0c;… 谈谈一致性 一致性就是数据保持一致在分布式系统中可以理解为多个节点中数据的值是一致的。 强一致性这种一致性级别是最符合用户直觉的它要求系统写入什么读出来的也会是什么用户体验好但实现起来往往对系统的性能影响大 弱一致性这种一致性级别约束了系统在写入成功后不承诺立即可以读到写入的值也不承诺多久之后数据能够达到一致但会尽可能地保证到某个时间级别比如秒级别后数据能够达到一致状态 最终一致性最终一致性是弱一致性的一个特例系统会保证在一定时间内能够达到一个数据一致的状态。这里之所以将最终一致性单独提出来是因为它是弱一致性中非常推崇的一种一致性模型也是业界在大型分布式系统的数据一致性上比较推崇的模型 三个经典的缓存模式 缓存可以提升性能、缓解数据库压力但是使用缓存也会导致数据不一致性的问题。一般我们是如何使用缓存呢有三种经典的缓存使用模式 Cache-Aside Pattern Read-Through/Write-through Write-behind Cache-Aside Pattern Cache-Aside Pattern即旁路缓存模式它的提出是为了尽可能地解决缓存与数据库的数据不一致问题。 Cache-Aside读流程 Cache-Aside Pattern的读请求流程如下 Cache-Aside读请求 读的时候先读缓存缓存命中的话直接返回数据 缓存没有命中的话就去读数据库从数据库取出数据放入缓存后同时返回响应。 Cache-Aside 写流程 Cache-Aside Pattern的写请求流程如下 Cache-Aside写请求 更新的时候先更新数据库然后再删除缓存。 Read-Through/Write-Through读写穿透 Read/Write-Through模式中服务端把缓存作为主要数据存储。应用程序跟数据库缓存交互都是通过抽象缓存层完成的。 Read-Through Read-Through的简要流程如下 Read-Through简要流程 从缓存读取数据读到直接返回 如果读取不到的话从数据库加载写入缓存后再返回响应。 这个简要流程是不是跟Cache-Aside很像呢其实Read-Through就是多了一层Cache-Provider而已流程如下 Read-Through流程 Read-Through实际只是在Cache-Aside之上进行了一层封装它会让程序代码变得更简洁同时也减少数据源上的负载。 Write-Through Write-Through模式下当发生写请求时也是由缓存抽象层完成数据源和缓存数据的更新,流程如下 Write-behind 异步缓存写入 Write-behind 跟Read-Through/Write-Through有相似的地方都是由Cache Provider来负责缓存和数据库的读写。它们又有个很大的不同Read/Write-Through是同步更新缓存和数据的Write-Behind则是只更新缓存不直接更新数据库通过批量异步的方式来更新数据库。 Write behind流程 这种方式下缓存和数据库的一致性不强对一致性要求高的系统要谨慎使用。但是它适合频繁写的场景MySQL的InnoDB Buffer Pool机制就使用到这种模式。 操作缓存的时候到底是删除缓存呢还是更新缓存 日常开发中我们一般使用的就是Cache-Aside模式。有些小伙伴可能会问Cache-Aside在写入请求的时候为什么是删除缓存而不是更新缓存呢 Cache-Aside写入流程 我们在操作缓存的时候到底应该删除缓存还是更新缓存呢我们先来看个例子 线程A先发起一个写操作第一步先更新数据库 线程B再发起一个写操作第二步更新了数据库 由于网络等原因线程B先更新了缓存 线程A更新缓存。 这时候缓存保存的是A的数据老数据数据库保存的是B的数据新数据数据不一致了脏数据出现啦。如果是删除缓存取代更新缓存则不会出现这个脏数据问题。 更新缓存相对于删除缓存还有两点劣势 如果你写入的缓存值是经过复杂计算才得到的话。更新缓存频率高的话就浪费性能啦。 在写数据库场景多读数据场景少的情况下数据很多时候还没被读取到又被更新了这也浪费了性能呢(实际上写多的场景用缓存也不是很划算的,哈哈) 双写的情况下先操作数据库还是先操作缓存 Cache-Aside缓存模式中有些小伙伴还是会有疑问在写请求过来的时候为什么是先操作数据库呢为什么不先操作缓存呢 假设有A、B两个请求请求A做更新操作请求B做查询读取操作。 线程A发起一个写操作第一步del cache 此时线程B发起一个读操作cache miss 线程B继续读DB读出来一个老数据 然后线程B把老数据设置入cache 线程A写入DB最新的数据 酱紫就有问题啦缓存和数据库的数据不一致了。缓存保存的是老数据数据库保存的是新数据。因此Cache-Aside缓存模式选择了先操作数据库而不是先操作缓存。 个别小伙伴可能会问先操作数据库再操作缓存不一样也会导致数据不一致嘛它俩又不是原子性操作的。这个是会的但是这种方式一般因为删除缓存失败等原因才会导致脏数据这个概率就很低。小伙伴们可以画下操作流程图自己先分析下哈。接下来我们再来分析这种删除缓存失败的情况如何保证一致性。 数据库和缓存数据保持强一致可以嘛 实际上没办法做到数据库与缓存绝对的一致性。 加锁可以嘛并发写期间加锁任何读操作不写入缓存 缓存及数据库封装CAS乐观锁更新缓存时通过lua脚本 分布式事务3PCTCC 其实这是由CAP理论决定的。缓存系统适用的场景就是非强一致性的场景它属于CAP中的AP。个人觉得追求绝对一致性的业务场景不适合引入缓存。 CAP理论指的是在一个分布式系统中 Consistency一致性、 Availability可用性、Partition tolerance分区容错性三者不可得兼。 ” 但是通过一些方案优化处理是可以保证弱一致性最终一致性的。 3种方案保证数据库与缓存的一致性 缓存延时双删 有些小伙伴可能会说并不一定要先操作数据库呀采用缓存延时双删策略就可以保证数据的一致性啦。什么是延时双删呢 延时双删流程 先删除缓存 再更新数据库 休眠一会比如1秒再次删除缓存。 这个休眠一会一般多久呢都是1秒 这个休眠时间  读业务逻辑数据的耗时 几百毫秒。为了确保读请求结束写请求可以删除读请求可能带来的缓存脏数据。 ” 这种方案还算可以只有休眠那一会比如就那1秒可能有脏数据一般业务也会接受的。但是如果第二次删除缓存失败呢缓存和数据库的数据还是可能不一致对吧给Key设置一个自然的expire过期时间让它自动过期怎样那业务要接受过期时间内数据的不一致咯还是有其他更佳方案呢 删除缓存重试机制 不管是延时双删还是Cache-Aside的先操作数据库再删除缓存都可能会存在第二步的删除缓存失败导致的数据不一致问题。可以使用这个方案优化删除失败就多删除几次呀,保证删除缓存成功就可以了呀~ 所以可以引入删除缓存重试机制 删除缓存重试流程 写请求更新数据库 缓存因为某些原因删除失败 把删除失败的key放到消息队列 消费消息队列的消息获取要删除的key 重试删除缓存操作 读取biglog异步删除缓存 重试删除缓存机制还可以吧就是会造成好多业务代码入侵。其实还可以这样优化通过数据库的binlog来异步淘汰key。 以mysql为例吧 可以使用阿里的canal将binlog日志采集发送到MQ队列里面然后通过ACK机制确认处理这条更新消息删除缓存保证数据缓存一致性
http://www.zqtcl.cn/news/844000/

相关文章:

  • 做网上购物网站杭州房产网官方网站
  • 汕头市网站建设分站公司站长网站大全
  • c2c的网站名称和网址深圳设计公司办公室
  • 建设银行企业版网站做微网站平台
  • 北京企业网站建设电话长沙建设工程信息网
  • 大型综合门户网站开发扁平化个人网站
  • 怎么做代理人金沙网站长沙 网站运营
  • 商城网站开发的目的和意义鲜花类网站建设策划书范文
  • 什么类型的公司需要做建设网站的iis7 网站权限设置
  • 信誉好的商城网站建设火车头 wordpress 发布
  • 龙岩做网站抚顺 网站建设
  • wordpress怎么设置广告位青州网站优化
  • 网站的备案编号高端网站建设谷美
  • 佛山智能网站建设地址设计资溪做面包招聘的网站
  • 荆州网站建设多少钱国外网站设计理念
  • 网站备案成功后wordpress文字加框
  • 中小企业怎么优化网站西安网站建设求职简历
  • 网站开发者模式怎么打开商城网站建设特点有哪些
  • 网站登录按纽是灰色的做网站的前途怎么样
  • 常州城乡建设局网站霸榜seo
  • 网站响应样式如何制作自己的公众号
  • 网站的友情连接怎么做免费收录链接网
  • 太原网站设计排名wordpress 设置语言
  • 南京模板建站定制网站网站单页面怎么做的
  • 宁夏住房建设厅网站石家庄最新今天消息
  • 写网站软件tomcat部署wordpress
  • 怎么做下载网站吗分析一个网站
  • 网站建设禁止谷歌收录的办法做挂网站
  • 佛山优化网站公司做购物网站需要多少钱
  • 山东网站建设维护营销型网站是什么样的