速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

评论

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

HyperWorks的Loose Shrink Warp Mesh

智造软件

教程 CAE软件 hyperworks

TapData 「邀请函」:前方组队乘风破浪中,要一起加入吗?

tapdata

深圳招聘 生态渠道负责人 销售招聘 SaaS产品海外运营经理 Python开发工程师

用户参与的力量:提升软件开发项目的用户参与度

易成研发中心

项目管理 程序员 软件项目

全面解析交易所开发:源码、搭建公司选择与开发费用

区块链软件开发推广运营

交易所开发 链游开发 钱包开发 链游开发dapp开发 链游开发dapp开发公链开发

Bartender 4 for mac 让你的菜单栏井然有序!

理理

Studio One 6 Pro for mac专业的音乐创作编辑软件

Mac相关知识分享

大数据行业怎么定义?是否需要堡垒机?

行云管家

大数据 堡垒机 大数据行业

鸿蒙网络编程系列46-仓颉版Web组件加载网页的三种方式

长弓三石

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

怎么在ppt中替换字体?分享3个ppt必备的使用技巧!

职场工具箱

效率工具 职场 PPT 办公软件 AI生成PPT

BOM是什么?怎么创建BOM?BOM有什么分类?

积木链小链

ERP BOM ERP软件

macOS免费好用的硬盘测速工具 Blackmagic Disk Speed Test

Rose

人工智能 | 文生视频大模型

测试人

软件测试

从源码分析,MySQL优化器如何估算SQL语句的访问行数

华为云开发者联盟

MySQL innodb GaussDB 慢SQL

Alfred 5 for Mac(苹果效率提升工具)

Mac相关知识分享

在 Mac 上运行 Windows 的最佳方式 :VMware Fusion(vm虚拟机)

理理

7thonline第七在线出席FASHION PRO 30菁英对话:时尚行业深度洞察

第七在线

TinyVue v3.19.0 正式发布!Tree 组件终于支持虚拟滚动啦!

OpenTiny社区

开源 前端 组件库 OpenTiny TinyVue

鸿蒙网络编程系列45-仓颉版HTTPS证书自选CA校验示例

长弓三石

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

比特币价格飙升的背后:多重因素的综合分析

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

日照等保测评机构有哪些?电话多少?

行云管家

等保 堡垒机 日照

2024年Java后端开发最全面试攻略,不管你工作几年,都得看看

采菊东篱下

java面试

Markdown 文本编辑器Typora for Mac中文版

Mac相关知识分享

大数据从业者必知必会的Hive SQL调优技巧

京东科技开发者

Axure RP 10 for Mac中文汉化版 附Axure RP 10 永久激活码

Rose

Royal TSX for Mac桌面管理软件远程管理

Mac相关知识分享

SMART Utility for mac功能强大的磁盘诊断工具

Mac相关知识分享

《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析

数新网络官方账号

sql

基于OLAP湖仓一体架构,火山引擎ByteHouse助力企业降本增效

字节跳动数据平台

OLAP 湖仓一体

Qualcomm's IPQ53XX Series: IPQ5300, IPQ5332, IPQ5322 Comprehensive Analysis

wifi6-yiyi

WiFi7

好用的延迟摄影后期渲染工具 LRTimelapse Pro 7详细功能介绍

Rose

企业在财务规划过程中,如何避免零基预算的常见陷阱

智达方通

零基预算 财务规划

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