范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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

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

早起创造奇迹,大家都在读这本起床后的黄金一小时如果有以下困难的话想早起,但早起对你来说仍然十分困难尽管早起,但没有按照节奏推进自己的工作总觉得很忙碌,一天的时间忙不完,需要熬夜处理。推荐起床后的黄金一小时这本书。这本书的作者是发布新品?不是的,索尼只想作死10月12日,索尼发布了两款紧凑型WUXGA3LCD激光投影机VPLP630HZ和VPLP530HZ。根据官方给出的资料,这两款投影机具有高亮度,易安装和方便操作的特性,可用于企业20亿元打造的常德假古城,节假日也空无一人,店铺关门宛如鬼城在房地产和旅游兴起的时候,我国各地先后新建了大量的古镇古城,有些是根据当地某些历史人文重新打造出来的,而有的则是纯粹在一片空地建起一片仿古建筑,没有任何的人文故事加持,而当这阵风过从幼师到月薪22K的Python开发,大专毕业的她是如何做到的?在积云,她的故事每天都在上演!你也可以成为那个她!积云教育为广大学子提供了良好的学习平台,越来越多的学子通过积云获得改变!今天给大家分享的是积云教育2020届人工智能专业毕业生小月刘昆G20各方应加强宏观政策协调防止一些国家政策调整产生严重负面外溢效应刘昆G20各方应加强宏观政策协调防止一些国家政策调整产生严重负面外溢效应财联社10月14日电,13日至14日,二十国集团(G20)财长和央行行长会议在美国华盛顿以线上线下相结合方式我国成功发射5米SSAR01星北京时间2022年10月13日6时53分,我国在太原卫星发射中心使用长征二号丙运载火箭,成功将5米SSAR01星发射升空,卫星顺利进入预定轨道,发射任务获得圆满成功。该卫星主要为应旭辉控股集团商业营运维持正常,正与相关债权人推进达成友好解决方案21世纪经济报道记者唐韶葵上海报道10月13日午间,旭辉控股(集团)有限公司(00884。HK)发布一则澄清公告,称近日市场关切该公司离岸债务的支付和其他相关事宜,旭辉董事会希望澄芙蓉国评论丨从我出发,以进击姿态喜迎二十大金宇10月16日,中国共产党第二十次全国代表大会将在北京召开,全国人民正以饱满的政治热情,迎接党的二十大到来。广大党员干部要胸怀大我境界永葆无我情怀保持忘我状态,坚持从我出发奔赴新硬的也快泄的也快,可以试试这个办法办事经常硬度不够,而且时间还短,不到两分钟,还有夜尿增多,怕冷,手脚冰凉,头晕耳鸣的问题,记忆力也不好,还总是脱发白发这样的情况,这在中医上来讲和两个方面有关,一是肾阳不足,二是肾便秘必看只需三招实现拉屎自由在我们日常的生活中,便秘本来就是一种比较常见的疾病,要知道现代人的饮食并非特别健康,将以不规律的作息,很容易就会出现便秘的现象,如果长时间存在便秘现象,必定会危害到自身的健康,所以头发稀少别犯愁一个人的外表也与头发的数量密切相关。特别是,气氛的美丽真的取决于美丽和头发的体积。因此,对于一些脱发的人来说,头发稀少确实会影响他们的外表。如果我的头发很薄,我该怎么办?让我们看看
首播10集口碑大爆,甜宠又爆笑,鹅厂又悄悄甩出了王炸剧国剧续作难产已经是不争的事实,今年好不容易让大家等到了唐朝诡事录的第二部,但庆余年2,赘婿2等作品始终没有放出新消息。尤其是赘婿2,由于播出时间相对较晚,原班人马回归可能性更大。再华纳确认真人快打12开发中将于今年内发布今日(2月24日)外媒IGN报道称,华纳兄弟探索全球投资战略执行副总裁AndrewSlabin在2022年第四季度财报电话会议上确认,真人快打12在开发中,将于今年内发布。Andr2月21日王者体验服更新,专精项羽被削弱!今天体验服的一波更新加强了元歌,削弱了专精项羽,专精项羽的二技能两刀的伤害全部削弱,二技能前期冷却时间增加一秒,由九秒变成十秒。前期削弱明显,后期的差别不大。元歌加强元歌本体和傀儡实测11款无线充电宝哪款充电快容量大,还便携?结果来了!出游聚会出差通勤,在外难免遇上手机电量告急。偏偏共享充电宝充得又慢又费钱,有线充电宝笨重凌乱一堆线别急,本期无线充电宝评测,说不定能一键解决你的手机用电焦虑。结合粉丝征集平台销量品夜光杯到菜场去在上海,我与食物的距离大多是依靠人机交互拉近的。甚至,在买菜应用的备注栏,我常常填着放家门口即可,谢谢。我害怕门铃响起后与骑手小哥的正面交锋。在骑手送来的蔬菜中,常常有微小的瑕疵,魔术师拉塞尔变成熟了,他能得分和传球,还不经常失误湖人名宿魔术师约翰逊近日接受了采访,谈及重返湖人的丹吉洛拉塞尔。我觉得丹吉洛真的成长了,变成熟了。他能得分。他能传球。他不经常失误。这也是我喜欢他的地方。他和安东尼戴维斯的挡拆将会朱婷再获得分王个人MVP称号!恩师古德蒂200万欧元买回来!2月23日,中国女排国家队的队长超级巨星朱婷真的闪耀欧洲啊!女排欧联杯14决赛8进4的首回合比赛中,斯坎迪奇队飞到德国,遭遇德国豪门波茨坦队。最终双方激战了三局,斯坎迪奇以总比分320222023年度吉林省青少年自由式滑雪雪上技巧锦标赛长白山开赛2023年2月22日至23日,20222023年度吉林省青少年自由式滑雪雪上技巧锦标赛,在长白山和平滑雪场举行。本次比赛由吉林省体育局吉林省雪上运动管理中心主办,长白山和平滑雪场,首位完成退籍的归化?秘鲁媒体萧涛涛本周三签署恢复国籍文件直播吧2月23日讯据秘鲁媒体RadioOvacin消息,26岁的萧涛涛本周三与当地移民局取得联系,并签署了恢复国籍的相关文件。现在,文件将送至内政部签署,待文件返回给移民局,萧涛涛国乒女队饭圈文化严重,陈梦等人深受其害,正能量自媒体值得关注近期上映的电影中国乒乓票房不佳,除了导演组自身原因外,也从侧面说明乒乓球在国内虽然贵为国球,但仅仅是一项少人关注的小众项目,至少在当今还很难与足球篮球排球等大球项目的粉丝数量相提并小小孵化器孕育本土创新大能量走进位于上海张江的JLABS强生创新孵化器,就能看到一间蛋形会议室,会议室外面的橙色灯光微微闪烁,仿佛创新的生命正在孕育成长。近日,新时代新机遇跨国企业在中国网上主题宣传报道组来到