分布式一致性理论

分布式一致性理论

1.数据库事务ACID理论

为保证事务正确可靠而必须具备的四个核心特性。这四个特性分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。下面我将对这四个特性进行详细介绍:

  • 原子性(Atomicity)

    含义:事务被视为一个不可分割的工作单位,事务中的所有操作要么全部完成,要么全部不完成,即“all-or-nothing”原则。
    实现:如果在事务执行过程中发生错误或故障,则整个事务会被回滚(Rollback)到事务开始前的状态,就像这个事务从未执行过一样。
    示例:银行转账时,从A账户扣款和向B账户存款这两个操作要么同时成功,要么同时失败,以确保资金的正确流转。

  • 一致性(Consistency)
    含义:事务必须使数据库从一个一致性状态转变到另一个一致性状态。即事务的执行不会破坏数据库的完整性约束。
    实现:事务开始之前和事务结束之后,数据库的完整性没有被破坏。写入的资料必须完全符合所有的预设规则,包括数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
    示例:假设有一个完整性约束a+b=10,如果事务改变了a的值,那么b的值也必须相应改变,以确保事务结束后依然满足a+b=10。

  • 隔离性(Isolation)
    含义:多个事务并发执行时,一个事务的执行不应影响其他事务。即每个事务都在自己的“世界”中执行,无法看到其他并发事务的中间状态。
    实现:事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。这些级别提供了不同程度的事务隔离,以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
    示例:在A账户向B账户转账的过程中,B账户在事务完成前无法看到新增加的金额。

  • 持久性(Durability)
    含义:一旦事务提交,它对数据库的修改就是永久性的,即使系统发生故障也不会丢失。
    实现:事务处理结束后,对数据的修改会被永久地保存在数据库中,不会因系统故障或重启而丢失。
    示例:如果银行转账成功并提交,即使此时数据库宕机,重启后依然能够看到转账成功后的结果。

2.本地事务和分布式事务

事务简单来说:一个会话中所进行所有的操作,要么同时成功,要么同时失败。
事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。
事务

分布式事务指的是事务操作跨越多个节点,并且要求满足事务的 ACID 特性。

分布式事务相比于单机事务,实现复杂度要高很多,主要是因为其存在以下难点:

  • 事务的原子性:事务操作跨不同节点,当多个节点某一节点操作失败时,需要保证多节点操作的都做或都不做(All or Nothing)的原子性。
  • 事务的一致性:当发生网络传输故障或者节点故障,节点间数据复制通道中断,在进行事务操作时需要保证数据一致性,保证事务的任何操作都不会使得数据违反数据库定义的约束、触发器等规则。
  • 事务的隔离性:事务隔离性的本质就是如何正确多个并发事务的处理的读写冲突和写写冲突,因为在分布式事务控制中,可能会出现提交不同步的现象,这个时候就有可能出现“部分已经提交”的事务。此时并发应用访问数据如果没有加以控制,有可能出现“脏读”问题。

在分布式领域,要实现强一致性,代价非常高昂。因此,有人基于 CAP 理论以及 BASE 理论,有人就提出了柔性事务的概念。柔性事务是指:在不影响系统整体可用性的情况下(Basically Available 基本可用),允许系统存在数据不一致的中间状态(Soft State 软状态),在经过数据同步的延时之后,最终数据能够达到一致。并不是完全放弃了 ACID,而是通过放宽一致性要求,借助本地事务来实现最终分布式事务一致性的同时也保证系统的吞吐。

3.CAP 理论

CAP理论指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)和Partition Tolerance(分区容错性)这三个特性无法同时满足,只能满足其中的两个。

三个特性解释:

  • 一致性(Consistency):
    定义:一致性是指在一个分布式系统中,多个节点之间的数据是始终保持一致的。也就是说,当一个节点修改了数据后,其他节点能够立即看到这个修改。
    重要性:一致性保证了分布式系统中数据的正确性和完整性。
  • 可用性(Availability):
    定义:可用性是指系统能够在任意时刻提供正确的响应,即系统一直处于可用的状态。
    重要性:可用性保证了用户能够随时随地访问分布式系统,并获得有效的响应。
  • 分区容错性(Partition Tolerance):
    定义:分区容错性是指分布式系统中的网络可能会发生故障或分区的情况,但系统仍能够继续工作。
    重要性:分区容错性是为了应对网络故障或分区产生的情况,保证整个分布式系统的稳定性和可靠性。

重点说说一致性
在一致性的条件下,分布式系统在执行写操作成功后,如果所有用户都能够读取到最新的值,该系统就被认为具有强一致性。

数据一致性又可以分为以下几点:

  • 强一致性 - 数据更新操作结果和操作响应总是一致的,即操作响应通知更新失败,那么数据一定没有被更新,而不是处于不确定状态。
  • 最终一致性 - 即物理存储的数据可能是不一致的,终端用户访问到的数据可能也是不一致的,但系统经过一段时间的自我修复和修正,数据最终会达到一致。
    CAP

3.BASE 理论

BASE 定理是对 CAP 中一致性和可用性权衡的结果。

3.1 BASE思想

BASE 是 基本可用(Basically Available)、软状态(Soft State) 和 最终一致性(Eventually Consistent) 三个短语的缩写。
BASE 理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

  • 基本可用(Basically Available)分布式系统在出现故障的时候,保证核心可用,允许损失部分可用性。例如,电商在做促销时,为了保证购物系统的稳定性,部分消费者可能会被引导到一个降级的页面。
  • 软状态(Soft State)指允许系统中的数据存在中间状态,并认为该中间状态不会影响系统整体可用性,即允许系统不同节点的数据副本之间进行同步的过程存在延时。
  • 最终一致性(Eventually Consistent)强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能达到一致的状态。

3.2 BASE和ACID的比较

BASE 的理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

ACID 要求强一致性,通常运用在传统的数据库系统上。而 BASE 要求最终一致性,通过牺牲强一致性来达到可用性,通常运用在大型分布式系统中。
BASE和ACID比较

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

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

相关文章

社交创新:Facebook的技术与产品发展

在当今数字化时代,社交网络已经渗透到我们生活的方方面面,成为了人们日常交流、信息获取和社交互动的主要方式。而在这个众多社交平台中,Facebook作为其中的佼佼者,其技术与产品的发展历程也是一个社交创新的缩影。本文将探索Face…

六、【源码】SQL执行器的定义和实现

源码地址:https://github.com/mybatis/mybatis-3/ 仓库地址:https://gitcode.net/qq_42665745/mybatis/-/tree/06-sql-executor SQL执行器的定义和实现 之前的Sql执行都是耦合在SqlSession里的,现在要对这部分进行解耦和重构,引…

《软件定义安全》之三:用软件定义的理念做安全

第3章 用软件定义的理念做安全 1.不进则退,传统安全回到“石器时代” 1.1 企业业务和IT基础设施的变化 随着企业办公环境变得便利,以及对降低成本的天然需求,企业始终追求IT集成设施的性价比、灵活性、稳定性和开放性。而云计算、移动办公…

FiRa标准UWB MAC实现(三)——距离如何获得?

继续前期FiRa MAC相关介绍,将FiRa UWB MAC层相关细节进一步进行剖析,介绍了UWB技术中最重要的一个点,高精度的距离是怎么获得的,具体使用的测距方法都有哪些,原理又是什么。为后续FiRa UWB MAC的实现进行铺垫。 3、测距方法 3.1 SS-TWR SS-TWR为Single-Sided Two-Way Ra…

如何系统学习vue框架

前言 在软件开发的浩渺星海中,编程规范如同航海的罗盘,为我们指引方向,确保我们的代码之旅能够顺利、高效地到达目的地。无论是个人开发者还是大型团队,编程规范都是提升代码质量、保障项目成功不可或缺的一环。 因此&#xff0c…

人工智能模型对有争议的话题持相反的观点

人工智能模型对有争议的话题持相反的观点 并非所有生成式人工智能模型都是平等的,特别是当涉及到它们如何处理两极分化的主题时。 在2024年ACM公平、问责和透明度(FAccT)会议上发表的一项最新研究中,卡内基梅隆大学、阿姆斯特丹大学和人工智能初创公司h…

使用seq2seq架构实现英译法

seq2seq介绍 模型架构: Seq2Seq(Sequence-to-Sequence)模型是一种在自然语言处理(NLP)中广泛应用的架构,其核心思想是将一个序列作为输入,并输出另一个序列。这种模型特别适用于机器翻译、聊天…

携程无感验证

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 这里只是我分析的分析过程,以及一些重要点的记录…

Java从入门到放弃

线程池的主要作用 线程池的设计主要是为了管理线程,为了让用户不需要再关系线程的创建和销毁,只需要使用线程池中的线程即可。 同时线程池的出现也为性能的提升做出了很多贡献: 降低了资源的消耗:不会频繁的创建、销毁线程&…

SpringSecurity入门(三)

12、密码加密 12.1、不指定具体加密方式,通过DelegatingPasswordEncoder,根据前缀自动选择 PasswordEncoder passwordEncoder PasswordEncoderFactories.createDelegatingPasswordEncoder();12.2、指定具体加密方式 // Create an encoder with streng…

【服务实现读写分离】

文章目录 什么是读写分离基于Spring实现实现读写分离项目中常用的数据源切换依赖包 什么是读写分离 服务读写分离(Service Read-Write Splitting)是一种常见的数据库架构设计模式,旨在提高系统的性能和可扩展性。通过将读操作和写操作分离到…

javaspringbootmysql小程序的竞赛管理系统71209-计算机毕业设计项目选题推荐(附源码)

摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景, 运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数库来完成对系统的设计。整个开发过程首先对竞赛管理系统进行需求分…

OceanBase 4.3 特性解析:列存技术

在涉及大规模数据的复杂分析或即时查询时,列式存储是支撑业务负载的关键技术之一。相较于传统的行式存储,列式存储采用了不同的数据文件组织方式,它将表中的数据以列为单位进行物理排列。这种存储模式允许在分析过程中,查询计算仅…

mmdetection使用未定义backbone训练

首先找到你需要用到的 backbone,一般有名的backbone 都会在github有相应的代码开源和预训练权重提供 本文以mobilenetv3 fastercnn 作为举例,在mmdetection中并未提供 mobilenetv3,提供的仅有 mobilenetv2; 在github上找到 mobil…

高性能MySQL(第3版)电子书笔记

Mysql官方文档:https://dev.mysql.com/doc/refman/5.7/en/ 高性能MySQL(第3版):百度网盘,基于Mysql5.1和Mysql5.5 本机版本 mysql> select version(); ------------ | version() | ------------ | 5.7.32-log |…

Linux 网络设置

Linux 网络设置 查看及测试网络查看网络配置测试网络连接 设置网络地址参数使用网络配置命令修改网络配置文件 查看及测试网络 查看及测试网络配置是管理 Linux 网络服务的第一步,本节将学习 Linux 操作系统中的网络查看及测试命令。其中讲解的大多数命令以普通用户权限就可以…

【ppyoloe+】19届智能车完全模型组非官方基线

基于十九届智能车百度完全模型组线上赛baseline修改 调整参数最高能到0.989吧 一、环境准备 1.安装PaddleDetection In [1] # 解压PaddleDetection压缩包 %cd /home/aistudio/data/data267567 !unzip -q PaddleDetection-release-2.6.zip -d /home/aistudio /home/aistud…

初识C++ · 反向迭代器简介

目录 前言 反向迭代器的实现 前言 继模拟实现了list和vector之后,我们对迭代器的印象也是加深了许多,但是我们实现的都是正向迭代器,还没有实现反向迭代器,那么为什么迟迟不实现呢?因为难吗?实际上还好。…

stm32MP135裸机编程:修改官方GPIO例程在DDR中点亮第一颗LED灯

0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf 正点原子stm32mp135开发板&原理图 STM32Cube_FW_MP13_V1.1.0 STM32CubeIDE v1.151 需要修改那些地方 1.1 修改LED引脚 本例使用开发板的PI3引脚链接的LED作为我们点亮的第一颗LED灯,…

AC/DC电源模块的原理、特点以及其在实际应用中的重要性

BOSHIDA AC/DC电源模块的原理、特点以及其在实际应用中的重要性 AC/DC电源模块是一种用于将交流电转换为直流电的设备,广泛应用于各种电子设备中。这种电源模块可以有效地将电力从电网中提取出来,并将其转换为稳定的直流电源,供给各种不同功…