写点什么

为了实现一致性,我们从事务方案转移到流处理方案

  • 2016-03-20
  • 本文字数:1049 字

    阅读完需:约 3 分钟

当系统变得越来越复杂,数据库会被拆分为多个更小的库,如果借助这些衍生库实现像全文搜索这样的功能,那么如何保证所有的数据保持同步就是一项很有挑战性的任务了,在最近的 QCon 伦敦会议上, Martin Kleppmann 通过演讲阐述了他的观点。

使用多个数据库时,最大的问题在于它们并不是互相独立的。相同的数据会以不同的形式进行存储,所以当数据更新的时候,具有对应数据的所有数据库都需要进行更新。保证数据同步的最常用方案就是将其视为应用程序逻辑的责任,通常会对每个数据库进行独立的写操作。这是一个脆弱的方案,如果发生像网络故障或服务器宕机这样的失败场景,那么对一些数据库的更新可能会失败,从而导致这些数据库之间出现不一致性。Kleppmann 认为这并不是能够进行自我纠正的最终一致性,至少相同的数据再次进行写操作之前,无法实现一致性:

这不是最终一致性,它更像是持续的不一致性。

传统的方案使用事务来实现原子性,但是 Kleppmann 认为这只有在一个数据库的时候才有效,如果是两个不同的数据存储的话,那么这就不太可行了。分布式事务(又称为两阶段提交)支持跨多个存储系统,但是Kleppmann 认为它也面临自身的挑战,如较差的性能和运维问题。

我们重新回过头来看一下这个问题,Kleppmann 认为有一种很简单的解决方案,那就是按照系统的顺序对所有的写操作进行排序,并且确保所有人在随后读取时遵循相同的顺序。他将其与确定性的状态机复制(deterministic state machine replication)进行了类比,对于相同的起始状态,给定的输入流在多次运行时将会始终产生相同的状态转换。

在leader(主)数据库中,同时会将所有的写入操作按照处理的顺序存储为流,然后一个或多个follower 数据库就能读取这个流并按照完全相同的顺序执行写入。这样的话,这些数据库就能更新自己的数据并成为leader 数据库的一致性备份。对于Kleppmann 来说,这是一个非常具有容错性的方案。每个follower 都遵循它在流中的顺序,在出现网络故障或宕机时,follower 数据库能够从上一次的保存点开始继续进行处理。

Kleppmann 还提到在实现上述场景时,使用 Kafka 作为工具之一。目前,他正在编写一个实现, Bottled Water ,在这个实现中,他使用了 PostgreSQL 来抽取数据变化,然后将其中继到 Kafka 中,代码可以在 GitHub 上获取到。

InfoQ 最近也发布了一个关于使用 Kafka 进行开发的演讲。

QCon 的参会者已经聆听到了 Kleppmann 的演讲, InfoQ 的读者稍后将也能看到。他还将演讲的slide 发布了出来。

查看英文原文: Moving from Transactions to Streams to Gain Consistency

2016-03-20 19:002969

评论

发布
暂无评论
发现更多内容

Office 2019 for Mac永久激活版

小玖_苹果Mac软件

Acrobat Pro DC 2023 for Mac(PDF编辑器)中文版

小玖_苹果Mac软件

Adobe Acrobat Pro DC下载 Adobe Acrobat Pro DC破解 Acrobat Pro DC 2023下载

AutoCAD 2024 for Mac(cad设计绘图工具)v2024.3中文激活版

小玖_苹果Mac软件

After Effects 2021 for Mac(AE 2021) 直装激活版

小玖_苹果Mac软件

JProfiler 14 for Mac(Java开发分析工具)14.0激活版

小玖_苹果Mac软件

Tampermonkey for Mac(油猴Safari浏览器插件)4.20.6184 中文版

小玖_苹果Mac软件

Tampermonkey插件 Tampermonkey 下载

2024年汇总非技术精选文章的合集

Y11

大数据 架构 前端 后端

商业版vs开源版:一图看懂云消息队列 RocketMQ 版核心优势

阿里巴巴云原生

阿里云 RocketMQ 云原生

高效开发Gradle架构设计图解/掌握项目工程自动化技巧(精通篇一)

肖哥弹架构

Java 项目管理

AIGC 产品经理训练营-毕业总结

卡西毛豆静爸

AIGC

Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍

阿里巴巴云原生

阿里云 云原生 dubbo

朗新科技集团如何用云消息队列 RocketMQ 版“快、准、狠”破解业务难题?

阿里巴巴云原生

阿里云 云原生

AnyGo for Mac(虚拟定位软件)6.9.5免激活版

小玖_苹果Mac软件

AnyGo下载 AnyGo中文版 AnyGo for Mac AnyGo 中文破解

工程类项目管理软件哪款适合你?9款热门工具优缺点

易成研发中心

AirServer 7 for Mac(Mac专用投屏工具)v7.2.6永久激活版

小玖_苹果Mac软件

AIrServer下载 AIrServer激活版 AIrServer mac

Beyond Compare 4 for Mac(好用的文件对比工具)4.4.7(28397)中文版

小玖_苹果Mac软件

地平线 bev 参考算法板端一致性验证教程

地平线开发者

算法 自动驾驶; 算法工具链 地平线征程5

适合项目管理的新手和专家的8款好用软件

易成研发中心

Microsoft Remote Desktop for Mac(微软远程连接工具)中文直装版

小玖_苹果Mac软件

为了实现一致性,我们从事务方案转移到流处理方案_语言 & 开发_Jan Stenberg_InfoQ精选文章