写点什么

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

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

评论

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

时下最火的App自动化利器:Toast原理解析及操作实例,快速上手无障碍!

测吧(北京)科技有限公司

测试

OpenTiny Vue 3.14.0 正式发布,增加了 MindMap 思维导图等3个新组件

OpenTiny社区

vue.js 开源 前端 Web 组件库

2024-03-20:用go语言,自 01背包问世之后,小 A 对此深感兴趣。 一天,小 A 去远游,却发现他的背包不同于 01 背包,他的物品大致可分为 k 组。 每组中的物品只能选择1件,现在他想

福大大架构师每日一题

福大大架构师每日一题

Prompt工程师压箱底绝活——Prompt的基本组成部分、格式化输出与应用构建

飞桨PaddlePaddle

百度 百度飞桨 开发者说 Prompt 飞桨星河社区

2024内蒙古等保备案办理流程指引

行云管家

网络安全 等保备案 内蒙古

亮点功能: 私有节点&组织内节点

都广科技

DevOps

ai绘画免费图生图!一键生成免费可商用图片。

彭宏豪95

人工智能 办公软件 AIGC AI绘画 效率软件

挖掘M2 Pro 32G UMA内存潜力:在Mac上本地运行清华大模型ChatGLM2-6B

百度开发者中心

人工智能 自然语言处理 LLM 语言生成

毫末DriveGPT再获证明!斩获nuSecnces自动驾驶公开数据集NDS最佳成绩

极客天地

九连冠!禅道再获2023年「常用测试管理工具」第一名

禅道项目管理

一分钟了解深度算法

小齐写代码

【论文速读】| 增强静态分析以实现实用漏洞检测:一种集成大语言模型的方法

云起无垠

快速上手App自动化测试利器,Toast原理解析及操作实例

霍格沃兹测试开发学社

Ollama:打造本地开源大模型聊天应用的实践

百度开发者中心

人工智能 大模型 openai

Java & Go泛型对比

FunTester

EMQX ECP + NeuronEX 产品发布会:从边到云的实时工业互联数据平台

EMQ映云科技

mqtt mqtt broker

究竟什么样的数据库,才能承接RTA广告这个技术活!

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 广告投放

HarmonyOS卡片刷新服务,信息实时更新一目了然

HarmonyOS SDK

HarmonyOS

iLogtail 2.0 来了;通义灵码下载量破百万丨阿里云云原生 2 月产品月报

阿里巴巴云原生

阿里云 云原生

1秒内审核3万条SQL:如何用规范识别与解决数据库风险?

NineData

数据库 sql 安全管控 研发效率 NineData

跨平台整合:如何在不同系统中使用淘宝商品详情API

tbapi

淘宝商品详情接口

【堡垒机】企业购买堡垒机的七大需求你知道吗?

行云管家

网络安全 数据安全 堡垒机

利用RAG技术打破大模型幻觉

百度开发者中心

人工智能 图谱 大模型

Mistral AI vs. Meta:两大 Top 开源模型的对比

Baihai IDP

程序员 AI LLM 白海科技 Baihai IDP

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