2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

评论

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

TiProxy 原理和实现

TiDB 社区干货传送门

新版本/特性发布 TiDB 源码解读 6.x 实践 TiKV 源码解读

低代码,更利好前端研发的红海

互联网工科生

前端 低代码 项目 可视化开发 JNPF

Sprint Boot学习路线6

小万哥

Java spring 微服务 后端 springboot

你真的了解appium吗?

QE_LAB

测试框架 appium

大文件跨国传输慢有哪些因素,附大文件跨国快速传输解决方案

镭速

大文件跨国传输

实战指南:如何利用Postman流畅调试微信支付接口

Liam

程序员 后端 微信支付 Postman API 调试

Web3到底是个啥?

BSN研习社

“有一群人在一起,就很好!”RTE Open Day 首场活动圆满结束

声网

活动

作者推荐 | 【底层服务/编程功底系列】「底层技术原理」史上最清晰的采用程序员的视角方式进行深入探索Linux零拷贝技术原理及实现

码界西柚

Linux 操作系统 零拷贝 zero copy 底层原理

命令行非明文密码连接 TiDB

TiDB 社区干货传送门

实践案例 集群管理 数据库连接

中企出海关心的多数据中心问题,答案在这里!

用友BIP

中企出海

如何将超大文件传输给别人,超大文件如何传输呢?

镭速

超大文件传输

TiDB 源码编译之 PD/TiDB Dashboard 篇

TiDB 社区干货传送门

开发语言 7.x 实践

inIoT分享专栏丨如何破解物联网设备连接困境

inBuilder低代码平台

如何用 NPS 确定研发优先级,打破技术与业务的次元壁?

LigaAI

敏捷开发 业务价值 NPS 研发效能管理 企业号 8 月 PK 榜

《清华管理评论》:智能时代的人力资源管理“智效合一”转型

用友BIP

人力资源管理

千帆大模型平台最新升级:接入 Llama 2 等 33 个模型!

Baidu AICLOUD

千帆大模型平台 LMops

一种新型的系统设计解决方案:模块树驱动设计

得物技术

架构 架构设计 企业号 8 月 PK 榜

RHG之漏洞自动化利用(AEG)

云起无垠

MobPush iOS SDK iOS实时活动

MobTech袤博科技

ios 消息推送 sdk

性能全面飙升!StarRocks 在贝壳找房的极速统一实践

StarRocks

数据库 大数据 MPP 湖仓一体 贝壳找房

华为阅读与二十一世纪出版社集团签约 共创优质少儿阅读内容生态

最新动态

参加HDC用Petal出行,专属打车券立减20元

最新动态

ChatGPT 助力开发人员改进代码的5个方式

SEAL安全

开发者 ChatGPT 企业号 8 月 PK 榜

极光笔记 | 浅谈企业级SaaS产品的客户成长旅程管理(上)—— 分析篇

极光GPTBots-极光推送

产品 用户体验 SaaS 产品

基于流量回放的自动化回归测试平台 AREX Agent 技术实现细节分享

AREX 中文社区

开源 Java Agent 自动化测试 流量录制

使用 Amazon ECS Anywhere 在边缘部署 Amazon IoT Greengrass

亚马逊云科技 (Amazon Web Services)

物联网 ECS

TiDB 优雅关闭

TiDB 社区干货传送门

TiDB 源码解读 6.x 实践

通过docker安装单机版minio简单测试br通过s3存储备份恢复数据

TiDB 社区干货传送门

备份 & 恢复

【SOP】最佳实践之 TiDB 业务写变慢分析

TiDB 社区干货传送门

性能调优 管理与运维 故障排查/诊断 应用适配

BenchmarkSQL 支持 TiDB 驱动以及 tidb-loadbalance

TiDB 社区干货传送门

开发语言 性能测评 应用适配 数据库连接

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