QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

评论

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

架构实战营:模块五作业

刘璐

“微博评论”的高性能高可用计算架构

张逃逃

Linux之ack命令

入门小站

Linux

易观分析:应用数字孪生低代码平台,API开放性是选型关键

易观分析

数字孪生

SpringCloud-Feign

昊运

SpringCloud

【图解数据结构】树和二叉树全面总结

知心宝贝

二叉树 数据结构与算法 二叉树遍历 3月月更 树和二叉树

微博评论的高性能高可用计算架构设计

五月雨

架构实战营 「架构实战营」

模块五 评论计算架构

Geek_28cf33

“易+”开源 | 网易会议开源之移动端篇

网易云信

开发

测性能,拿周边|OceanBase 3.1.2 版邀你来玩

OceanBase 数据库

经验分享 | 最佳文档协作软件推荐

小炮

如何设计信息安全领域的实时安全基线引擎

Apache Flink

大数据 flink 开源 编程 实时计算

Kubernetes 集群如何做到低成本高弹性

玄月九

Kubernetes 弹性 成本 降本 低成本高弹性

如何在PC端应用中运行小程序?

FinClip

小程序 小程序框架 小程序容器

【英雄大会】之谁说站在光里的才算英雄(上篇)

Anna

经历分享 作者 简介

基于爬虫的测试自动化经验分享

FunTester

爬虫 性能测试 办公自动化 FunTester 测试自动化

设计微博系统中”微博评论“的高性能高可用计算架构

IT屠狗辈

架构实战营 微博评论架构实战

架构训练营 模块五

Geek_16d2b8

架构训练营5期

透过荣耀耳机的三重“炼金术”,重识TWS行业

脑极体

在线JSON转HTML工具

入门小站

工具

一文读懂可观测性与Opentelemetry

博睿数据

海量非结构化数据副本难保护,焱融科技携手英方推出联合解决方案

焱融科技

云计算 分布式 云原生 高性能 文件存储

Flutter仿微信价值几个亿的页面

岛上码农

flutter ios开发 Android开发 移动端开发 3月月更

吕氏餐饮:用宜搭智能考核绩效,人事管理更高效

一只大光圈

低代码 数字化 钉钉宜搭

微博“发评论”高性能高可用计算架构

Fingal

#架构实战营

高可用演练中堆叠切换失败分析

BUG侦探

高可用 堆叠 链路聚合

discuz防止恶意注册!

喀拉峻

网络安全

2月券商App行情刷新及交易体验报告,东方与安信升至领导者象限

博睿数据

在线JSON转CSV格式文件工具

入门小站

工具

Golang 1.18正式版发布,正式加入泛型语言家庭

学神来啦

Go golang Go 语言

深度强化学习的“丛林”大冒险

脑极体

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