专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

如何保证缓存与数据库双写时的数据一致性?第2部分

  这是该系列的最后一篇文章。上一篇我们介绍了为什么需要缓存,也介绍了ReadAside的流程和潜在的问题,当然也解释了如何提高ReadAside的一致性。尽管如此,ReadAside还不足以满足高一致性要求。
  ReadAside会导致问题的原因之一是因为所有用户都可以访问缓存和数据库。当用户同时操作数据时,由于操作顺序的各种组合而导致不一致。
  那么我们就可以通过限制操作数据的行为来有效避免不一致,这就是后面几个方法的核心概念。通读
  读取路径从缓存中读取数据如果缓存数据不存在通过缓存从数据库读取缓存返回给应用客户端
  写入路径无所谓,通常与WriteThrough或WriteAhead结合使用。
  潜在问题
  这种方式最大的问题是不是所有的缓存都支持,本文的Redis例子不支持这种方式。
  当然,有些缓存是支持的,比如NCache,但是NCache也有它的问题。
  首先,它不支持很多客户端SDK。。NETCore是原生支持语言,剩下的选项不多了。
  另外,它分为开源版和企业版,但是要知道,如果开源版的人用的不是很多,那么出了问题就悲剧了。即便如此,企业版不仅需要支付基础设施费用,还需要支付软件许可证费用。
  如何提高
  NCache的成本很高,是否可以自己实现ReadThrough?答案是肯定的。
  对于应用程序来说,我们并不关心它背后有什么样的缓存,只要它足够快地为我们提供数据,这就是我们所需要的。因此,我们可以将Redis封装为一个独立的服务,称为数据访问层(DAL),内部有一个API服务器来协调缓存和数据库。
  应用程序只需要使用定义的API从DAL中获取数据,而不需要关心缓存如何工作或数据库在哪里。直写
  读取路径不用管,实际工作一般都是通过ReadThrough完成的。
  写入路径只为缓存而写的数据通过缓存更新数据库
  潜在问题
  与ReadThrough一样,并非每个缓存都受支持,必须自行实现。
  此外,缓存并非设计用于数据操作。很多数据库都有缓存不具备的能力,尤其是关系型数据库的ACID保证。
  更重要的是,缓存不适合数据持久化。当应用程序写入缓存并认为更新已完成时,缓存可能仍会因为某种原因而丢失数据。然后,当前的更新将永远不会再发生。
  如何提高?
  与ReadThrough一样,必须实施DAL,但ACID和持久性问题仍未克服。于是,
  WriteAhead诞生了。提前写
  读取路径不用管,实际工作一般都是通过ReadThrough完成的。
  写入路径只为缓存而写的数据通过缓存更新数据库
  潜在问题
  同样,许多缓存也不支持WriteAhead。尽管读取路径和写入路径看起来与WriteThrough相同,但其背后的实现却大不相同。
  WriteAhead是为了解决WriteThrough的问题而产生的,所以先介绍一下。
  我们还将实现一个DAL,但与WriteThrough不同,它实际上是一个内部消息队列而不是缓存。从上图可以看出,整个DAL架构变得更加复杂。要正确使用消息队列,需要更多的领域知识和更多的人力资源来设计和实现。
  如何提高?
  通过使用消息队列,可以有效保证变化的持久性,同时消息队列也保证了一定的原子性和隔离性,虽然没有关系型数据库那么完备,但仍然具有基本的可靠性。
  此外,消息队列可以将碎片化的更新合并成批次。例如,当一个应用程序想要更新三个缓存以便发送三个消息时,DALworker可以将这三个消息合并为一个SQL语法以减少对数据库的访问。
  需要注意的是必须使用消息队列来保证消息的顺序,因为对于数据库的更新来说,先插入再删除和先删除再插入的意义是截然不同的。每个消息队列确保消息顺序的方法略有不同:
  1)Kafka,可以通过使用正确的分区键来实现。
  2)RocketMQ,可以基于队列(分区)的顺序消费,顺序消费,分为全局顺序消费,和局部顺序消费。
  全局顺序消费:只能有一个数据队列(queue),和一个消费者实例。原因是RocketMQ只提供在单个queue上使用FIFO顺序的有序消息。多个queue之间并不能保证消息的严格先后性。
  局部顺序消费:通常在实际应用中,我们需要将同一个订单号的相关操作,按照规则(可以是hash或取模等)发送到同一个queue上(使用MessageQueueSelector),然后消费者实例,使用顺序消费模式消费消息(使用MessageListenerOrderly)
  然而,实现WriteAhead的复杂度非常高。如果您负担不起这样的复杂性,那么ReadAside是更好的选择。双重删除
  我们已经讨论了两种主要类型的缓存模式,它们是读一边通读、通写、预写
  这两种类型之间最根本的区别是实现的复杂性。以ReadAside为例,实现起来非常容易,做对也非常简单。但是,ReadAside在很多交互下很容易产生各种cornercase。
  另一方面,通过实现DAL可以避免cornercases,但是正确实现DAL非常困难,并且需要广泛的领域知识才能正确实现,这进一步使DAL难以实现。
  那么,DAL是减少极端案例数量的唯一方法吗?不,不是真的。
  这就是DoubleDelete模式试图解决的问题。
  读取路径从缓存中读取数据如果缓存数据不存在改为从数据库读取并写回缓存
  该过程与ReadAside完全相同。
  写入路径先清除缓存然后将数据写入数据库稍等片刻,然后再次清除缓存
  潜在问题
  DoubleDelete的目的是尽量减少因ReadAsidecornercases而导致灾难的时间。
  整个不一致完全取决于等待时间,等于最大等待时间。
  但如何等待也是一个棘手的实际问题。如果让client本来就开始处理,那么cornercase2的killed场景还是解决不了。如果其他人以异步的方式执行,那么这之间的通信契约和工作流控制就会很复杂。
  如何提高
  与ReadAside相同的极端情况2,但同样,它可以通过正常关闭来减少。结论
  在这篇文章中,我们介绍了很多提高一致性的方法。通常,当一致性不是关键要求时,缓存过期就足够了并且需要非常低的实现工作量。事实上,广泛使用的CDN只是使用CacheExpiry的其中一种情况。
  随着场景越来越关键,对一致性要求越来越高,那就考虑用ReadAside甚至DoubleDelete来实现。这两种方法的正确实现足以使一致性满足大多数场景。
  然而,随着一致性要求的不断提高,需要更复杂的实现,例如ReadThrough和WriteThrough甚至WriteAhead。虽然这可以提高一致性,但成本也很高。首先,它需要足够的人力和领域知识来实施。此外,实施的时间成本和事后的维护成本也明显更高。此外,运营这样的基础设施还有额外的费用。
  为了进一步提高一致性,需要使用更先进的技术,如共识算法,以多数共识的方式保证缓存和数据库内容的一致性。这也是TAO背后的理念,但我不打算介绍这么复杂的做法,毕竟我们不是Meta,至少我不是。
  在一般的组织中,对一致性的要求没有那么严格,比方说,10个或更多的9,一般的组织无法操作如此复杂和庞大的架构。
  因此,在本文中,我选择了我们都可以实现的做法,但即使是简单的做法,如果正确实施,也已经具有足够高的一致性。

假期适合带孩子游玩的城市,从上海出发2小时可达,回头率很高世界那么大,我想去看看,几年前顾少强的这个最具有情怀的辞职信不知让多少人为之感慨。在钢筋混凝土的城市中我们每天忙碌得像陀螺一样,赶地铁挤公交加班不停地应酬,仿佛使人活成了一条缺氧的1974年,小女孩玩火意外烧毁房子,44年后才知她焚毁一箱勋功章抗美援朝胜利的背后,是无数个悲壮的冰雕连!,抗美援朝的胜利,让帝国主义最终成为了纸老虎,我国也迎来真正的民族独立自由。在这场伟大胜利的背后,是无数个悲壮故事,是无数个屡立战功的无名如果你是这4个姓氏之一,可能不是炎黄子孙,而是上古蚩尤的后裔我们中华民族常常自称为炎黄子孙,炎黄就是我国上古时期传说中的炎帝和黄帝,他们被遵为中国古代的人文初祖。其实,除了炎帝和黄帝之外,还有一个人也是华夏的先祖,他就是蚩尤。传说中黄帝打败距离地球15亿公里温度只有180度,那里或存在超乎想象的生命形式浩瀚的宇宙,隐藏着太多奥秘,比如说科学家们怀疑宇宙中可能存在进化超过上亿年的生命形态,他们的每个动作都异常缓慢,体型十分庞大,生活在炼狱般的星球,星球上散发出人类难以理解的恶臭。如一位知青后代的苦恼接父亲回城养老,父亲却连夜跑回了老家李耀武当年娶了插队女知青,在当时可是引起了不小轰动,李家沟全队老乡都来道喜,李耀武父亲更是笑得合不拢嘴,儿子李耀武可算是给李家长脸了,李耀武父亲也是一点没有含糊,给李耀武大办了婚礼秋天补钙要趁早,建议中老年人多吃4种高钙食物,滋补身体人一旦年纪大了,身体里的各种元素就会慢慢消散衰败,也因此,中老年人的身体才会每况愈下。所以经常吃一些补充身体元素的食物,是当务之急。钙质,是人体最需要的重要元素之一,中老年人缺了钙微淼财商教育旅游业有机会迎来春天?口罩的反复导致人们出行受限,给旅游行业带来前所未有的冲击。与此同时,露营等户外活动模式成为旅游爱好者新宠,在全国各地持续火爆,成为2022年朋友圈的新宠。尽管近年来旅游业经济下滑严过个暖和的冬天,石墨烯发热取暖器开始普及,双11选择不少在北方,很多地方供暖是11月15日开始,来年3月15日结束,那么这11月初,以及3月末的时间点,有时候还挺冷的。评价君以前这段时间一直是硬抗过来的,后来买了电热油汀取暖器,而现在发花开不止在春天在人们的眼中,春天是百花齐放争奇斗艳,是万物复苏,欣欣向荣。可它们不知道的是花开不止在春天,成功亦不止在舞台。人们常说,大学,是梦开始的地方。它奠定了我们闯荡人生的基石,架起了我们喜欢在冬天穿各种毛衣头条创作挑战赛想在冬季留住一个私藏的春天喜欢在冬天穿各种毛衣纱线带着特有的温柔在时间的涌动里感受季节的脉络与走向一针一线,都是温暖的感觉就像这件米色毛衣一样把繁复融入到纱线中把简约到了冬天头皮屑特别多,每天洗头也没用,该怎么办?都说聚是一团火散是满天星,但当满天星变成头皮屑洋洋散散地飘落在肩膀上时,没人想拍拍你的肩膀为你加油。身边的同事觉得你邋遢不洗头时,你却没勇气直接承认自己有毛病。公交车上没人想靠近你
河北巨贪马旭田落马疯狂敛财6029亿,央视此人有2714套房河北巨贪马旭田落马疯狂敛财6029亿,央视此人有2714套房中国贪官猖獗,人民深受其害。近日,爆出了一位吓坏央视的贪官他受贿6029亿元,拥有2714套房子,他的房产证甚至达到了1油电混动车能买吗?换一个电瓶特别贵吗?目前的电动汽车存在电池瓶颈难以突破电池污染难以解决对基础设施依赖性较大等问题,相比而言燃油混动汽车是一个很好地解决方案,既能利用加油站的基础设施,也能够利用电机驱动带来的平顺性动力怎么证明你是一个山西人?nia吃酸菜都蘸醋。夜来在路半半踩着个大扩略茅料,料见梁上赶大车那个愣货搂着个袭人的闺女到处个溜了。呀呀,乃闺女可会咯次了,把个愣小子逗得笑得个灸下了。唉,不说了,秋风凉扫的,看n云南哪些地方的人喝酒厉害?喝酒,之于云南的许多少数民族来说不仅仅是一种饮食习惯,更形成了一种区域性的特色文化。独特的地理环境和纷繁复杂的多民族文化,造就了云南人对于酒的特殊的情感,无论是祭祀节日狂欢交流中,手机缓存从1G到目前最高12G,为什么系统总是占去一半?越大不是剩得越多吗?在悟空问答上的260个问题,只写接地气的科技内容,欢迎关注。并没有占据一半啊我之前用坚果R18128刚开机的时候系统占用在35左右,最高也就在40,也就是差不多占用3G左右的运存吧科技与互联巨头更愿意在以下中部哪些城市建研发中心?武汉,虽然我不是武汉人,但是我仍认为是武汉。首先,标题是科技与互联巨头更愿意在以下中部哪些城市建研发中心,请注意看下关键词科技,互联网,研发中心,武汉相对来说,经济,科研,教育水平北跨这片经开区的核心板块,要当排头兵3月23日,经开区泾渭新城2023年高质量发展大会召开。从主题名西安北跨泾渭当先可以看出,这座新城在西安北跨中应当起到的火车头作用。事实上,从西安发布北跨战略后,这块规划面积58平财政部国家税务总局延续和优化实施多项税费优惠政策经济日报北京3月27日讯(记者曾金华)财政部国家税务总局27日发布系列公告,明确延续和优化实施多项阶段性税费优惠政策。为支持小微企业和个体工商户发展,两部门明确,自2023年1月1生态环境部将以更大的减排量来冲抵经济增量和气候异常带来的不确定性3月28日,生态环境部召开3月例行新闻发布会。会上,生态环境部大气环境司司长刘炳江表示,今年经济全面恢复,增量确实是比较大,这在预料之中。我们以更大的减排量来冲抵经济增量和气候异常推动经济高质量发展甘孜州出台30条政策措施来源四川日报近日,甘孜州全面推动经济高质量发展的若干政策措施印发,十方面共30条政策措施着力推动甘孜州经济向好发展。在加大金融扶持力度方面,甘孜州将持续优化乡村振兴金融服务和绿色金一米五的身高穿什么款的衣服好看?我是时尚号作者,平时喜欢研究服装穿搭,希望回答对您有帮助!小个子女生娇小玲珑又可爱,穿衣服可以多使用单品搭配或色彩,突出腰线显身高同时,还能彰显自己品味,短外套,小脚裤,针织裙和长
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网