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

news2025/2/26 19:37:48

“你们的系统能实现强一致性吗?”作为过去几年一直在开发流处理系统的从业者,我经常被问到这个问题。我时常想自信地推销我们的产品,但现实情况是,回答这个问题并不简单。其中的挑战并不在于问题本身,而在于 “一致性”(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.coloradmin.cn/o/1918381.html

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

相关文章

【芯片方案】珠宝手机秤方案

珠宝手机秤作为一种便携式电子称重设备,因其小巧、便携、精度高等特点,广泛应用于各种需要精确称重的场景。可能这个目前在国内使用的人比较少,但在西方国家珠宝手机秤却是可以用来送礼的物品。因为珠宝手机秤的外观跟手机外观大多相似&#…

【数据结构】排序——快速排序

前言 本篇博客我们继续介绍一种排序——快速排序,让我们看看快速排序是怎么实现的 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 ​ 目录 …

Python高级(三)_正则表达式

Python高级-正则表达式 第三章 正则表达式 在开发中会有大量的字符串处理工作,其中经常会涉及到字符串格式的校验。 1、正则表达式概述 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、…

springboot企业培训管理系统-计算机毕业设计源码50804

摘要 本研究旨在开发一套高效、安全、易用的springboot企业培训管理系统。该系统致力于提升企业的培训管理效率,确保培训质量与效果的持续优化。通过整合先进的AI技术,在企业培训管理中发挥着不可或缺的作用。 通过采用Java作为主要开发语言,…

AI Earth——2020年中国建筑物高度CNBH数据产品(10m)

数据介绍: 复旦大学生命科学学院GC3S团队(吴万本博士、赵斌教授等)利用多源地球观测数据和机器学习技术,构建了中国第一个10米分辨率的建筑高度估计模型(CNBH-10m)。基于此模型建立了中国10米分辨率的建筑高度数据集。此数据集基于全天候地球观测(雷达、光学和夜光图像)…

USB PD SINK协议取电芯片不同品牌介绍对比-在选择PD SINK 协议芯片时,用户需要综合考虑各方面的因素,包括工作耐压、稳定性、兼容性等

PD SINK协议芯片是现代通信技术中的一项重要技术,它起着连接不同系统的桥梁作用。协议芯片内部集成了各种不同的通信协议,如蓝牙、Wi-Fi、以太网等,使不同设备之间的通信变得更加简单和高效。协议芯片推动了信息通信技术的发展。在过去&#…

赋能 Web3 与 AI 的未来,TARS 协议如何重塑去中心化生态?

TARS 协议如何在 Web3 生态中引领 AI 技术的变革?作为新兴的模块化 AI 平台,TARS 通过整合先进的 AI 模型和区块链技术,为用户提供了更加智能、安全和高效的解决方案。让我们一起回顾第 16 期 TinTinAMA 的精彩内容吧! 在 TinTinL…

1. openstack

openstack 一、云的简介1、优势2、类型2.1 根据提供的服务范围2.2 根据提供服务不同 二、openstack核心组件1、核心组件2、nova组件2.1 nova核心进程 3、glance组件4、cinder组件5、neutron组件6、swift组件7、cellometer组件8、keystone组件9、heat组件10、dashboard 一、云的…

超简单的通配证书签发工具,免费,无需安装任何插件到本地

常见的acme.sh 或者 lego等工具需要配置,安装不灵活,续签需要配置计划任务,签发单域名证书或者通配证书需要不同的指令和配置,繁琐,如果自己程序想要对接签发证书的api有的不支持,有的用起来繁琐。 最近发…

性价比高充电宝有哪些?充电宝十大最佳品牌大盘点!

在如今这个高度数字化的时代,我们的生活离不开各种电子设备,而充电宝作为保障电子设备续航的重要工具,其地位日益凸显。然而,面对市场上琳琅满目的充电宝品牌和产品,要挑选到一款性价比高的充电宝并非易事。在这篇盘点…

本地部署,Colorizer: 让黑白图像重现色彩的奇迹

目录 引言 什么是 Colorizer ​编辑​编辑 Colorizer 的特点 工作原理 应用场景 本地部署 本地运行 实验与结果 结语 Tip: 引言 自摄影术发明以来,黑白图像一直是记录历史和艺术创作的重要手段。然而,黑白图像虽然具备其独特的美…

idea中打开静态网页端口是63342而不是8080

问题: 安装了tomcat 并且也配置了环境,但是在tomcat下运行,总是在63342下面显示。这也就意味着,并没有运行到tomcat环境下。 找了好几个教程(中间还去学习了maven,因为跟的教程里面,没有maven,但…

2024年国企都在用哪些eHR人事系统?(附国企HR系统功能分享)

近年来,国家也一直在寻求国企改革上的突破。但是部分国有企业在经营过程中,出于历史和现实的多重影响,人力资源管理工作迟迟没有较大进展,还存在诸多不适应现代企业发展的弊端存在。随着科技进步,许多国企正转向创新的…

【昇思25天学习打卡营打卡指南-第二十三天】Pix2Pix实现图像转换

Pix2Pix实现图像转换 Pix2Pix概述 Pix2Pix是基于条件生成对抗网络(cGAN, Condition Generative Adversarial Networks )实现的一种深度学习图像转换模型,该模型是由Phillip Isola等作者在2017年CVPR上提出的,可以实现语义/标签到…

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

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

【项目实战课】大语言模型提示词(Prompt)工程实战

欢迎大家来到我们的项目实战课,本期内容是《大语言模型提示词(Prompto)工程实战》。所谓项目课,就是以简单的原理回顾详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲解。 本课程内容 提示词…

自动化(二正)

Java接口自动化用到的技术栈 技术栈汇总: ①Java基础(封装、反射、泛型、jdbc) ②配置文件解析(properties) ③httpclient(发送http请求) ④fastjson、jsonpath处理数据的 ⑤testng自动化测试框架重点 ⑥allure测试报…

cuda安装使用问题,print(torch.cuda.is_available()),仍然输出false,如何解决?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

springboot it职业生涯规划系统lw源码调试演示视频

第3章 系统分析 面对即将开发的系统,进行提前的分析是必要的。这也是开发流程中必须有的环节。通常分析系统期间,主要涉及的内容包括系统开发可行性问题,对系统功能和性能的分析等问题。 3.1 可行性分析 在正式对需要建设的项目进行投资前&…

UNI_App平台调试指南 debug(十五)

App平台调试指南 debug 常规开发里,在 HBuilderX 的运行菜单里运行 App,手机端的错误或 console.log 日志信息会直接打印到控制台。 如果需要更多功能,比如审查元素、打断点 debug,则需要启动调试模式。自 HBuilderX 2.0.3+ 版本起开始支持 App 端的调试。 #打开调试窗口…