深度|不同数据系统中的“一致性”(Consistency)含义的区别

“你们的系统能实现强一致性吗?”作为过去几年一直在开发流处理系统的从业者,我经常被问到这个问题。我时常想自信地推销我们的产品,但现实情况是,回答这个问题并不简单。其中的挑战并不在于问题本身,而在于 “一致性”(Consistency) 对于不同技术背景的人来说有不同的含义。

实际上,来自以下不同背景的人:

  • 数据库
  • 分布式系统
  • 流处理系统

对“一致性”都有自己的理解。没有了解清楚背景就回答可能会导致误解。在本文中,我将澄清在这些不同的数据系统中“一致性”究竟意味着什么。

1. 数据库中的“一致性”

在传统数据库中,“一致性”是 ACID 原则(Atomicity, Consistency, Isolation, Durability)中的一个基石,它保证了每个事务将数据库从一个合法状态转换到另一个合法状态。例如,在一个银行交易中,一个账户被扣款,另一个账户被存款,“一致性”确保总余额保持不变。需要注意的是,这与“原子性”(Atomicity)不同,“原子性”指的是事务的要么成功要么失效特性。例如,“原子性”确保事务中的所有操作要么全部成功,要么全部失败,确保数据库中不会留下不完整的事务。

总而言之,数据库的“一致性”指的是确保事务处理前后数据的正确性和有效性。
数据库中 ACID 模型中的“一致性”指的是数据库从一个合法状态过渡到另一个合法状态。

2. 分布式系统中的“一致性”

在讨论分布式系统时,“一致性”常常指的是 CAP 定理中的一个基本概念,该定理最初由加州大学伯克利分校的研究人员提出,目前已成为分布式系统学术课程和专业讨论中的基础话题。

在 CAP 定理中,“一致性”具体指的是在不同节点分布的各种副本的数据一致性。在分布式系统中确保这种“一致性”尤其具有挑战性。该定理强调了三个关键属性之间的权衡:consistency, availability, 和 partition tolerance(一致性、可用性和分区容错性)。根据 CAP 定理,分布式系统在同一时间只能实现这三个属性中的两个。

在这个背景下,“一致性”确保在任何给定时间,不同节点的所有数据副本都显示相同的信息。这对于维护数据的完整性至关重要,特别是在涉及网络故障或延迟的情况下。该定理揭示了在多个节点间保持数据同步的固有困难,突出了在设计和维护强大的分布式系统时,平衡这三个竞争需求的持续挑战。
分布式系统中的“一致性”确保不同节点的所有数据副本在任何给定时间都显示相同的信息。

3. 流处理系统中的“一致性”

围绕流处理系统中“一致性”的讨论通常与涉及数据库或分布式系统时不同,反映出其独特的需求和挑战。在文章《一致性与完整性:重新思考 Apache Kafka 中的分布式流处理》中,作者将“exactly-once” semantics(精确一次性)语义定义为流处理环境中“一致性”的一个关键特性。

在流处理系统中,维护“一致性”不是围绕replicating data,而是确保每个数据事件只被处理一次,即使是在系统故障的情况下。以一个实时处理的金融交易为例,如果系统在处理过程中崩溃,系统恢复后我们必须确保交易不会被重复处理。保证“exactly-once”对于维护流数据的一致性和完整性至关重要,它确保了无论系统中断与否,每个交易都被准确处理且仅处理一次。
流处理系统中的“一致性”通常指的是“exactly-once”

4. 用户真正需要什么?

为了突出不同数据系统中“一致性”需求的差异,请看下表:

系统类型一致性需求示例
数据库事务完整性银行交易应始终保持账户平衡
分布式系统跨节点的数据一致性社交媒体上的个人资料更新必须在各处一致
流处理系统消息顺序和消息处理语义保证每笔金融交易实时处理且只处理一次

实际上,用户和企业真正需要的是可靠性和数据完整性,这超出了标准教科书对“一致性”的定义。他们需要系统不仅强大可靠,还能有效处理现实世界的复杂性。对于用户来说真正成功的系统是能够始终如一地提供正确的结果,实现这种级别的“一致性”不仅仅需要系统“看起来”正确,而是理论上合理且功能上可靠。

5. 分布式流数据库中的“一致性”

接下来让我们深入探讨更有趣的内容:分布式流数据库中的“一致性”。如果你不熟悉流数据库是什么,可以参考如 KsqlDB 和 PipelineDB 的传统系统。本质上,流数据库是专为流处理定制的数据库,感兴趣的读者可以参考我之前的文章《什么是流式数据库》。为了降低执行流处理的成本和复杂性,我们开发了一个名为 RisingWave 的分布式流数据库。

分布式流数据库是数据库、分布式系统和流处理系统的结合体。那么,它的“一致性”是什么含义呢?理想情况下,分布式流数据库的“一致性”应该同时满足上述三种系统的需求,但当然这也取决于具体的系统实现。无法在此详细介绍所有分布式流数据库的一致性模型,让我们重点关注 RisingWave:RisingWave 中的“一致性”是什么样的?让我们从三个维度来探讨。

5.1 数据库背景下的“一致性”

RisingWave 能够实现。RisingWave 能有效地确保内部状态无缝地从一个合法状态转变到另一个合法状态。但需要注意的是,虽然 RisingWave 支持只读事务,但它不支持跨不同表的读写事务。因此,如果有人需要一个 OLTP 数据库来管理复杂的事务负载,他们可能会选择 MySQL、Postgres、CockroachDB 或 TiDB 等解决方案。出现这个方案设计主要有以下两个原因:

  • 专注于流数据处理:RisingWave 专注于优化流数据处理。完整的事务处理能力可能会给系统带来显著的复杂性。
  • 与传统 OLTP 数据库的集成:通常,传统的 OLTP 数据库在上游处理事务,序列化事务变更。RisingWave 作为下游系统,专注于实时分析。整合复杂的事务处理可能会导致显著的性能下降,特别是在现实操作的苛刻条件下。

RisingWave 保留了上游 OLTP 数据库的事务语义。

此外,RisingWave 能够理解和处理来自上游 OLTP 数据库的事务语义,这对于金融等领域的客户来说是一个关键特性。

5.2 分布式系统背景下的“一致性”

RisingWave 能够实现。RisingWave 可以在多个区域内实现高可用性。虽然 RisingWave 没有实施如 Paxos 或 Raft 这样的复杂一致性协议来确保跨副本的一致性,但它利用 S3 进行数据存储。S3 不仅存储数据库表,还存储流处理的内部状态,有效地在多个副本间复制数据以保持一致性。

5.3 流处理系统背景下的“一致性”

RisingWave 能够实现。RisingWave 通过确保exactly-once semantics 和 adeptly managing out-of-order data processing 而表现出色。这种能力确保无论数据流如何混乱,每个数据事件都能被准确地处理一次,从而保持流数据的一致性。

6. 总结

“一致性”的含义在数据库、分布式系统和流处理系统中有显著差异:

  • 数据库注重事务完整性。
  • 分布式系统强调跨节点的数据一致性。
  • 流处理系统优先考虑保证处理上的“exactly-once ”。

RisingWave 作为一个强大且适应性强的分布式流数据库,有效地满足了这些多样化的“一致性”需求。不仅能在理论上达到这些“一致性”标准,还在实际应用中表现出色,使得 RisingWave 始终是实现数据“一致性”的可靠解决方案。

7. 关于 RisingWave

RisingWave 是一款开源的分布式流处理数据库,旨在帮助用户降低实时应用的开发成本。RisingWave 采用存算分离架构,提供 Postgres-style 使用体验,具备比 Flink 高出 10 倍的性能以及更低的成本。

👨‍🔬加入 RW 社区,欢迎关注公众号:RisingWave 中文开源社区

🧑‍💻快速上手 RisingWave,欢迎体验入门教程:github.com/risingwave

💻深入使用 RisingWave,欢迎阅读用户文档:zh-cn.risingwave.com/docs

🔍更多常见问题及答案,欢迎搜索留言: risingwavelabs/discussions

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/43771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字节8年经验之谈!好用移动APP自动化测试框架有哪些?

移动App自动化测试框架是为了提高测试效率、降低测试成本而开发的一套工具和方法。好用的移动App自动化测试框架有很多,下面将介绍一些常用的框架,并提供一篇超详细和规范的文章,从零开始帮助你搭建一个移动App自动化测试框架。 1. Appium&a…

十大优秀AI人工智能作词软件有哪些?

1、妙笔生词:国内专业智能作词工具,是一款非常优秀的国内作词软件,它可以选择语言,风格,韵脚一键生成歌词,也可以仿写歌词,可以续写歌词,可以智能取歌名,找优秀词句&…

神经网络识别数字图像案例

学习资料:从零设计并训练一个神经网络,你就能真正理解它了_哔哩哔哩_bilibili 这个视频讲得相当清楚。本文是学习笔记,不是原创,图都是从视频上截图的。 1. 神经网络 2. 案例说明 具体来说,设计一个三层的神经网络。…

如何找工作 校招 | 社招 | 秋招 | 春招 | 提前批

马上又秋招了,作者想起以前读书的时候,秋招踩了很多坑,但是第一份工作其实挺重要的。这里写一篇文章,分享一些校招社招的心得。 现在大学的情况是,管就业的人,大都是没有就业的辅导员(笔者见过…

亿发512版本更新,看数据驾驶舱、扫码拣货、UDI序列号的新功能

如果您正寻求突破传统业务模式的束缚,希望拥抱数字化转型带来的无限可能,我们诚邀您体验亿发软件。亿发专业团队将为您提供个性化的咨询和定制服务,帮助您的企业快速适应市场变化,实现业务模式和商业模式的创新。

【腾讯云生成式AI产品解决方案深度分析 2024】

文末有福利! 腾讯云生成式AI产品解决方案 (一) 基于生成式AI的腾讯云产品架构升级 (二) 腾讯云完善的产品矩阵,满足不同路线客户需求 1. 路线一 标准软件 (1) 腾讯乐享AI助手 落地背景及挑战在企业知识管理、培训学习、办公协同场景中,存…

初识C++ | 基本介绍、命名空间、输入输出、缺省函数、函数重载、引用、内联函数、nullptr

基本介绍 C的起源 1979年,当时的 Bjarne Stroustrup 正在⻉尔实验室从事计算机科学和软件⼯程的研究⼯作。⾯对项⽬中复杂的软件开 发任务,特别是模拟和操作系统的开发⼯作,他感受到了现有语⾔(如C语⾔)在表达能⼒、可…

无法定位程序输入点kernel32.dll ——一键修复丢失kernel32.dll方案

无法定位程序输入点" 错误通常发生在 Windows 操作系统中,当一个程序试图加载一个 DLL(动态链接库)文件中的特定函数,但无法找到该函数的入口点时。kernel32.dll 是 Windows 操作系统中的一个关键 DLL 文件,它包含…

设置DepthBufferBits和设置DepthStencilFormat的区别

1)设置DepthBufferBits和设置DepthStencilFormat的区别 2)Unity打包exe后,游戏内拉不起Steam的内购 3)Unity 2022以上Profiler.FlushMemoryCounters耗时要怎么关掉 4)用GoodSky资产包如何实现昼夜播发不同音乐功能 这是…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十八章 Linux编写第一个自己的命令

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

Python-找客户软件

软件功能 请求代码: 填充表格: 可以search全国各个区县的所有企业信息,过滤手机号、查看是否续存/在业状态。方便找客户。 支持定-制-其他引-留-阮*件(XHSS,DYY,KS,Bi-li*Bi-li) V*…

AutoHotKey自动热键(八)脚本快速暂停与重新加载

我们在编辑脚本的时候,可以添加快捷键来改变脚本的状态 ;暂停脚本 F11::Suspend;重置脚本 F12::Reloadreload用来重置脚本 我们可以在脚本开头加上标签提示脚本重启成功 ToolTip, 脚本已经重启 Sleep, 1000 ToolTip第二个ToolTip是用来关闭提示器用的 这个提示功能一定要写…

oracle dba常用脚本2

11、表空间实有、现有、使用情况查询对比 SELECT TABLESPACE_NAME 表空间,TO_CHAR(ROUND(BYTES / 1024, 2), 99990.00) || 实有,TO_CHAR(ROUND(FREE / 1024, 2), 99990.00) || G 现有,TO_CHAR(ROUND((BYTES - FREE) / 1024, 2), 99990.00) || G 使用,TO_CHAR(ROUND(10000 * US…

【开源合规】开源许可证风险场景详细解读

文章目录 前言关于BlackDuck许可证风险对比图弱互惠型许可证举个例子具体示例LGPL系列LGPL-2.0-onlyLGPL-2.0-or-laterLGPL-2.1-onlyLGPL-2.1-or-laterLGPL-3.0-onlyLGPL-3.0-or-laterMPL系列MPL-1.0MPL-1.1MPL-2.0EPL系列EPL-1.0EPL-2.0互惠型许可证GPL系列GPL-1.0GPL-2.0GPL-…

常用录屏软件,分享这四款宝藏软件!

在数字化时代,录屏软件已经成为我们日常工作、学习和娱乐中不可或缺的工具。无论你是需要录制教学视频、游戏过程,还是进行产品演示,一款高效、易用的录屏软件都能让你的工作事半功倍。今天,就为大家揭秘四款宝藏级录屏软件&#…

重磅|九科信息完成诺辉领投的B1轮融资,累计融资已达亿级

近日,九科信息宣布B1轮融资顺利完成。本轮由深圳诺辉岭南投资管理有限公司领投,深创投索斯福(深圳)私募创业投资基金跟投。 截至本轮,九科信息累计融资达亿级。但真正让九科人骄傲的,并非融资本身&#xff…

无法找到模块“@wangeditor/editor-for-vue”的声明文件

vue3项目中使用wangeditor/editor遇到的问题 开发环境不管红线报错正常使用 打包的时候就会报错了 1.安装依赖 pnpm install --save wangeditor/editor wangeditor/editor-for-vuenext 2.遇到的问题 3.解决方法 在src目录下面创建 wangeditor-types.d.ts 文件 代码如下 de…

The First项目报告:创新型金融生态Lista DAO

一、Lista DAO是什么? LISTA是Lista DAO的原生加密协议代币,设计为一种可互操作的实用代币,旨在促进去中心化金融(DeFi)领域内的支付、治理与激励。LISTA的诞生源于Lista DAO项目,该项目是一个基于BNB链的…

springboot3 集成GraalVM

目录 安装GraalVM 配置环境变量 Pom.xml 配置 build包 测试 安装GraalVM Download GraalVM 版本和JDK需要自己选择 配置环境变量 Jave_home 和 path 设置setting.xml <profile><id>graalvm-ce-dev</id><repositories><repository><id&…

2024最新版pycharm安装激火教程,附安装包+激huo马,Python教程,pycharm安装包!!

PyCharm的安装 PyCharm 是一个专门为 Python 开发者设计的 IDE&#xff0c;它同样具有代码导航、重构、调试和分析等功能。PyCharm 支持多种项目类型&#xff0c;如普通项目、Python 测试项目、Django 项目等&#xff0c;并提供了大量的内置模板和插件&#xff0c;以帮助您更快…