如何实现双写一致呢?

重生 Java面经 发布时间:2024-01-13 17:54:42 阅读数:11130 1

双写一致性的简介

由于涉及多个系统同时操作,
   那么如何保证双写的准确性
      和一致性呢?
下文笔者将一一道来,如下所示
===============================
1.两阶段提交
2.异步双写
3.事件驱动架构
4.补偿性事务
5.版本控制
两阶段提交(Two-Phase Commit):
  两阶段提交是一种分布式事务协议
  用于确保多个参与者在进行提交或回滚之前达成一致意见
    它包括准备阶段和提交(或回滚)阶段。
     在准备阶段,所有参与者都同意是否可以提交。
      如果所有参与者同意,则进入提交阶段,否则进入回滚阶段。
     虽然这种方法确保了一致性,但它也引入了一些分布式系统的挑战,如单点故障和性能问题。

异步双写: 
   在异步双写模式下,系统首先将写操作应用于一个存储(例如主数据库),
   然后异步地将相同的写操作应用于另一个存储(例如备份数据库)。
  这种方式可以提高性能,但在出现故障时可能导致数据不一致。
   为了解决这个问题,可以在异步双写中引入一些机制
    例:
     在主数据库确认写操作成功后再进行备份数据库的写操作,或者通过定期校验来确保一致性。

事件驱动架构:
    使用事件驱动架构,将写操作转换为事件
     并通过消息队列将事件传递给不同的存储系统。
     每个存储系统都有自己的事件处理器,用于处理接收到的事件。
    这样可以确保写操作在不同存储系统之间的一致性。此模式还支持松散耦合,使得系统更加灵活和可扩展。

补偿性事务: 
    当在两个存储系统中写入数据时,
     可以使用补偿性事务的方式。
      首先,执行第一个存储系统的写操作。
      如果第二个存储系统的写操作失败,
      那么在第一个存储系统上执行回滚或删除操作,以确保数据一致性。
      这种方式较为灵活,但需要处理失败的场景。

版本控制:
     使用版本控制来确保数据的一致性。
      每次写操作都附带一个版本号,
      系统在写操作时检查版本号,以确保写操作不会覆盖较新的数据。
       这需要对数据模型进行适当的设计,以支持版本控制
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202401/17051400417646.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者