当前位置: 首页 > news >正文

分布式事务和一致性

分布式事务是什么?

分布式事务是指在分布式系统中涉及到多个数据库多个应用程序之间的事务处理,这些数据库或应用程序可能
布在不同的物理节点上,甚至可能位于不同的地理位置,在分布式事务中,需要确保所有参与者的事务操作都能
保持一致性,即所有参与者的事务要么全部提交成功要么全部回滚

举个例子,假设一个电商系统,用户下单后需要扣减库存、扣减账户余额、生成订单等操作。在单机环境下,可
将这些操作放在同一个事务中,保证原子性、一致性和持久性。但在分布式环境下,可能存在多个服务(如库存
务、账户服务、订单服务)分布在不同的物理节点上,此时需要确保所有服务操作的事务都能够同步进行,避免
现数据不一致的情况。
image.png
为了解决分布式事务的问题,出现了一些分布式事务解决方案,如 XA 协议、TCC 事务、最大努力通知等。这些解决方案的实现方式各不相同,但都需要考虑如何确保所有参与者的事务操作能够保持一致性,以及如何处理可能出现的异常情况。

分布式系统的一致性有哪些?

所谓一致性,是指数据在多个副本之间是否能够保持一致的特性。在聊一致性的时候,其实要搞清楚一致性模型。
分布式系统中的一致性模型是一组管理分布式系统行为的规则。它决定了在分布式系统中如何访问和更新数据,以及如何将这些更新提供给客户端。面对网络延迟和局部故障等分布式计算难题,分布式系统的一致性模型对保证系统的一致性和可靠性起着关键作用。在分布式系统中有多种一致性模型可用,每个模型都有其优点和缺点,选择模型取决于系统的具体要求。
主要有三种,强一致性,弱一致性,最终一致性

强一致性模型(Strong Consistency):

在强一致性模型下,系统保证每个读操作都将返回最近的写操作的结果,即任何时间点,客户端都将看到相同的数据视图。这包括如下子模型:

  • 线性一致性(Linearizability):线性一致性是一种最强的一致性模型,它强调在分布式系统中的任何时间点,读操作都应该返回最近的写操作的结果。
  • 顺序一致性(Sequential Consistency):要求保证操作的顺序性,并不要求实际时间上的顺序保持一致
  • 严格可串行性(Strict Serializability)

强一致性模型通常牺牲了可用性来实现数据一致性

弱一致性模型(WeakConsistency):

弱一致性模型放宽了一致性保证,它允许在不同节点之间的数据访问之间存在一定程度的不一致性,以换取更高的性能和可用性。这包括如下子模型:

  • 因果一致性(Causal Consistency)
  • 会话一致性(Session Consistency)
  • 单调一致性(Monotonic Consistency)

弱一致性模型通常更注重可用性,允许一定程度的数据不一致性。

最终一致性模型(Eventua Consistency):

最终一致性模型是一种最大程度放宽了一致性要求的模型。它允许在系统发生分区或网络故障后,经过一段时间,系统将最终达到一致状态。这个模型在某些情况下提供了很高的可用性,但在一段时间内可能会出现数据不一致的情况

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于 Konva 实现Web PPT 编辑器(一)
  • ORB-SLAM3(Failed to load image)问题解决(WSL2配置)
  • 电脑版视频剪辑软件哪个好?适合新手使用的剪辑软件!
  • 贪心算法介绍(Greedy Algorithm)
  • enhanced Input Action IA_Look中Action value引脚没有分割结构体引脚的选项
  • Repeat方法:取模运算教材与Unity控制台输出数值不同的原因
  • Linux 基本指令讲解 上
  • 详解Redis 高可用的方式 Redis Cluster
  • 【Hugging Face】 Hugging Face 公司和 Hugging Face 网站介绍
  • C#中常用的扩展类
  • 行业大模型:信用评分大模型、生产优化大模型、库存管理大模型、物流行业大模型、零售行业大模型
  • 财务会计与管理会计(四)
  • 【C++ 面试 - 基础题】每日 3 题(十九)
  • 【AI】智力即服务
  • 【Redis集群】集群原理最全解析
  • [数据结构]链表的实现在PHP中
  • cookie和session
  • laravel with 查询列表限制条数
  • Linux gpio口使用方法
  • Making An Indicator With Pure CSS
  • PHP 7 修改了什么呢 -- 2
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue2.x学习三:事件处理生命周期钩子
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 记一次删除Git记录中的大文件的过程
  • 坑!为什么View.startAnimation不起作用?
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 日剧·日综资源集合(建议收藏)
  • 使用 Docker 部署 Spring Boot项目
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​Java基础复习笔记 第16章:网络编程
  • (1)(1.13) SiK无线电高级配置(五)
  • (1)(1.9) MSP (version 4.2)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (十五)使用Nexus创建Maven私服
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)opengl函数加载和错误处理
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)C#调用WebService 基础
  • (转)http-server应用
  • .“空心村”成因分析及解决对策122344
  • .cfg\.dat\.mak(持续补充)
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Framework杂记
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .Net 基于MiniExcel的导入功能接口示例
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证