写点什么

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

  • 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:002979

评论

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

智慧报工系统

深圳亥时科技

数字身份发展趋势前瞻:身份即服务

芯盾时代

身份安全 iam Idaas SaaS应用

未来已来,软件行业的下一个风口在哪里?

天津汇柏科技有限公司

人工智能 软件

鸿蒙开发实战:揭秘页面与项目生命周期,实现精准监控

王二蛋和他的张大花

鸿蒙

鸿蒙实战开发:网络层的艺术——优雅封装与搭建指南(上)

王二蛋和他的张大花

鸿蒙

TDengine 集群能力:超越 InfluxDB 的水平扩展与开源优势

TDengine

tdengine 时序数据库 数据库·

HyperWorks批处理网格的类型设置

智造软件

CAE软件 hyperworks BatchMesher

Python淘宝数据挖掘与词云图制作指南

代码忍者

API 接口 pinduoduo API

平顶山等保测评机构有哪些?电话多少?

行云管家

等保 等保测评 平顶山

【CoCollider】让系统和应用适配如此简单

iofomo

开发 Android; ios 开发 应用适配 API 测试

鸿蒙实战开发:网络层的艺术——优雅封装与搭建指南(下)

王二蛋和他的张大花

鸿蒙

鸿蒙网络编程系列43-仓颉版HttpRequest下载文件示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

CST软件如何实现S-parameter随其他参数变化的1D曲线

思茂信息

教程 cst cst仿真软件

在昇腾Ascend 910B上运行Qwen2.5推理

GPUStack

AI 大模型 昇腾 生成式AI NPU

鸿蒙OS创新实践:动态声控话筒开发指南

王二蛋和他的张大花

鸿蒙

7thonline第七在线7大价值助力品牌实现智能化商品管理

第七在线

浅谈机器学习,聊聊训练过程,就酱!

蛋先生DX

神经网络 机器学习 深度学习

鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

IDEA中通义灵码的使用技巧

威哥爱编程

IDEA Java. 通义灵码 AI辅助

畅享云边大模型!火山引擎 x 地瓜机器人,大模型网关能力免费开放

火山引擎边缘云

边缘计算 机器人 智能IoT边缘服务 大模型 边缘智能

堡垒机有远程协助解决难题功能吗?哪家的好用?

行云管家

网络安全 堡垒机

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