Distributed_事务_共识(原子提交问题)

Git提交规范实战:从Commit Message到原子性提交 版本控制是现代软件工程的基础设施,而Git作为分布式版本控制系统的代表,其核心操作——提交(commit)——直接决定了团队协作的效率与代码历史的可读性。许多开发者虽然熟悉git add与git commit的基本用法,却忽视了提交信息规范、提交粒度控制以及分支协作策略的重要性。本文从Git环境配置与仓库初始化出发,深入讲解Conventional Commits约定式提交标准,说明如何通过规范的Commit Message提升代码审查与问题回溯效率;同时介绍原子性提交原则,借助暂存区与git add -p 阅读详情
1.共识问题
  1. 共识问题的定义: 让多个节点就某件事达成一致。很多重要的场景需要集群节点达成某种一致。

  2. 共识问题的场景: 主节点选举(对于主从复制的数据库,所有节点需要就谁来充当主节点达成一致)、原子事务提交(对于支持跨节点或跨分区事务的数据库,会面临这样的问题:事务(可以理解为一个大事务拆分成若干个小事务在节点上执行)在某些节点可能在一些节点上执行成功,但在其他节点上却不幸发生了失败,但为了维护事务的原子性,所有节点必须对事务的结果达成一致。)

    区分:原子提交和共识的形式化描述还稍有不同:原子事务只有在所有参与者都投票赞成的情况下才能完成最终提交,如果有任何参与者中止,则必须中止。共识则可以就任何一位参与者的提议进行表决,达到多数即可通过。原子提交与共识可以相互转化。

2.原子提交问题2PC
  1. Problem:当向所有节点简单地发送一个提交请求,然后各个节点独立执行事务提交是绝对不够的。这样做很容易发生部分节点提交成功,而其他一些节点发生失败,从而违反了原子性保证(注意点是事务提交不可撤销的,但可以通过补偿性事务抵消效果(用一笔新的事务来抵消已提交事务的效果)

  2. 解决方案2PC:

2PC引入了单节点事务所没有的一个新组件:协调者(也称为事务管理器)。协调者通常实现为共享库。

过程:当应用程序准备提交事务时,协调者开始阶段1

  1. Phase1:发送一个准备请求到所有节点,询问他们是否可以提交。

  2. Phase2:协调者然后跟踪参与者的回应:

    1. 如果所有参与者都回答 “是”,表示它们已经准备好提交,那么协调者在阶段 2 发出 提交(commit) 请求,然后提交真正发生。

    2. 如果任意一个参与者回复了 “否”,则协调者在阶段 2 中向所有节点发送 中止(abort) 请求。

      参与者回答“是”则对系统承诺:

      1. 确保在任何情况下都可以提交事务,包括安全地将事务数据写入磁盘(不能以任何借口稍后拒绝提交,包括系统崩溃,电源故障或磁盘空间不足等,但不要求提交的时间),
      2. 检查是否存在冲突或约束违规等。

      所有节点不允许有任何反悔:开弓没有回头箭,一旦做了决定,就必须贯彻执行,即使需要很多次尝试。而如果有参与者在此期间出现故障,在其恢复之后,也必须继续执行

      协调者事务的决策则对系统承诺:

      ​ 协调者做出了提交(或者放弃)的决定,这个决定是不可以撤销的。

      =>这两个承诺保证了2PC的原子性。

3.2PC中节点出现故障:

  1. 当参与者发生故障:1.在第一个阶段,任何一个准备请求发生失败或者超时(任意一个参与者发生故障),那么协调者就会决定中止交易 2. 第二阶段中发生提交(或中止)请求失败,则协调者会无限期重试。

  2. 当协调者发生故障:在第二个阶段时,协调者发生故障导致参与者不知道是中止交易还是提交交易,解决方法:

    1. 理论上,参与者之间可以互相通信,通过了解每个参与者的投票情况并最终达成一致。
    2. 等候协调者恢复,协调者会根据事务日志中未决的事务状态,向参与者发送决策。
  3. 实践中的分布式事务:

    分布式事务,尤其是那些通过两阶段提交所实现的事务,声誉混杂。一方面,它们被看作是提供了一个其他方案难以企及的重要的安全保证;另一方面,他们由于操作上的缺陷、性能问题,承诺不可靠等问题而遭受诟病。

本文是根据《数据密集型应用系统设计》和查阅相关论文而写成的。

CockroachDB: The Resilient Geo-Distributed SQL Database 论文阅读笔记 前言 本文绝大部分内容源自 CockroachDB 论文。 介绍 CockroachDB 是一个可扩展(Scalable)的 SQL DBMS,它主要用于支撑 OLTP 工作流,并保持高可用性(High Availability)和强一致性(Strong Consistency)。论文主要呈现了 CockroachDB 创新的事务模型,它在商用硬件上支持一致(Consistent)的分布式事务。 论文在 Introduction 提出了一个情景:一个公司在欧洲和澳洲有一个大用户基数,并且美国的用户数也在迅速 阅读详情

相关推荐

分布式锁(Distributed lock)

分布式锁是用于分布式系统中协调共享资源访问的互斥机制,确保同一时间只有一个客户端能访问资源。主要实现方式包括:基于数据库(简单但性能差)、基于Redis(高性能但不保证强一致性)和基于ZooKeeper/etcd(强一致但性能中等)。分布式锁需满足互斥性、可重入性、锁超时释放等特性,并应对锁超时、死锁、网络分区等挑战。最佳实践包括设置合理超时时间、细粒度锁、唯一标识校验等。选择方案时应根据业务对一致性、性能和可用性的需求权衡。

guigenyi的专栏 1302

SQLite中的原子提交(四)

返回:SQLite—系列文章目录 上一篇:SQLiteC/C++接口详细介绍sqlite3_stmt类(十三) 下一篇:SQLite使用的临时文件(二) 1.引言 SQLite等事务数据库的一个重要特性 是“原子提交”。 原子提交意味着所有数据库都在一个数据库中更改 事务发生或均未发生。通过原子提交,它 就好像对数据库的不同部分有许多不同的写入 文件瞬间同时发生。 真正的硬件将写入序列化为大容量存储,并将写入 单个扇区需要有限的时间。 因此,不可能真正写出一个 数据库文件同时和/或瞬时

2818

主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效

通用串行总线控制器总是有叹号解决办法 办公室的崩腾时代老电脑,疫情期间没人用,来了开机之后发现鼠标键盘都用不了,本以为是主机放时间长出了问题,后来想起来就百度了“鼠标键盘都失效”的标题,结果发现了“串行总线控制器总是感叹号”的关联问题。正好办公室电脑都装有teamviwer常用来远程办公(在家偷懒)。所以通过远程发现电脑室可以运行的。并在控制面板发现:通用串行总线控制器总是感叹号,插入外设时USB无反应。如图:​ 并且右键选中其中一个,点击最后一个选项:“属性” 可以发现“设备状态”中会提示“由...

xiao_bai_0_0的博客 2万+

五种提高代码提交原子性的基本操作

你好,我是程序员贵哥。今天,我们来聊一聊Git吧。毫无疑问,Git是当前最流行的代码仓管理系统,可以说是开发者的必备技能。它非常强大,使用得当的话可以大幅助力个人效能的提升。一个最直接的应用就是,可以帮助我们提升代码提交的原子性。如果一个团队的成员都能熟练使用Git的话,可以大大提高团队代码的模块化、可读性、可维护性,从而提高团队的研发效能。但可惜的是,现实情况中,由于Git比较复杂,用得好的人并不多。所以接下来,我会通过两篇文章,与你详细讲述如何使用Git助力实现代码原子性。

qq_33240556的博客 1341

通俗傻瓜式理清光栅化渲染和光线追踪渲染的原理

用通俗语言傻瓜式的讲清楚光栅渲染和光线追踪渲染的原理,方便没有相关理论基础的朋友理解入门。

qq_37366618的博客 2万+

别再混淆了!5分钟搞懂机器人导纳控制与阻抗控制的本质区别(附Simulink对比仿真)

本文深入解析机器人柔顺控制中的导纳控制与阻抗控制的本质区别,通过信号流方向、架构对比和应用场景三个关键视角进行详细阐述。文章还提供Simulink对比仿真案例,帮助读者快速理解两种控制策略的差异及其适用场景,特别适合机器人控制领域的研究者和工程师参考。

weixin_42543046的博客 604

原子性提交是持续交付的必备技能

“坚持少做,持续分解,坚持反馈,持续改善”是《持续交付 2.0 》一书中最为重要的四大工作原则。它们在代码提交与 Code Review 中的应用就是:提交的原子性。原子性,即 All o...

DevOps持续集成的博客 918

立创开源桌面激光雕刻机DIY全解析:从悬臂结构、Arduino主控到Marlin固件

本文详细解析了基于立创开源平台的桌面激光雕刻机DIY全过程。重点介绍了悬臂式机械结构的设计与优化,阐述了采用Arduino Mega 2560主控与RAMPS 1.4扩展板的经典控制方案,并深入讲解了Marlin固件的关键配置步骤,包括电机步数计算与激光功能启用,为创客和电子爱好者提供了一套完整的从硬件搭建到软件调试的实战指南。

weixin_42510201的博客 382

【原子提交:IDEA实践】

在平时的开发中,一个任务往往会有多次提交,以下图三个commit为例,假设我们开发A功能,每天下班前本地commit一下,到了第三天改功能开发完毕,自测基本没问题,此时需要发起MR请求,而本地个人分支存在三个commit记录,下面将描述如何在发起MR之前整理本地个人分支commir记录,本文所述的【原子提交】核心在于合并本地commit记录。Rebase后将本地个人分支推送至远程【如果存在冲突则强制push】,然后发起MR走合并流程,此时我们的MR就是符合原子性的。update本地主分支。

qq_41725131的博客 1961

从MATLAB到版图:手把手复现一篇16位1MSPS SAR ADC的完整设计流程(含Cadence与Verilog代码)

本文详细介绍了16位1MSPS SAR ADC的完整设计流程,从MATLAB行为级建模到Cadence电路实现,再到Verilog数字逻辑编码和版图生成。重点讲解了高精度逐次逼近型模数转换器的关键技术,包括电容阵列建模、校准算法实现、FFT性能验证以及混合信号仿真等,为工程师提供了实用的工业级设计指南。

weixin_28703507的博客 300

LED背光驱动电路解析:从MP3394芯片到液晶屏灯管控制

本文深入解析了以MP3394芯片为核心的LED背光驱动电路工作原理。从升压电路的能量转换到多路LED的均流控制,详细阐述了其作为液晶屏背光“大脑”的关键作用,并提供了黑屏、闪屏、亮度不均等常见故障的实战检修思路与排查方法。

agile9scrum的博客 816

Distributed_事务__共识(一致性)

分布式系统中一致性相关理论知识

Blockchain210的博客 579

Hermes接入IMA知识库全攻略:将知识库装进你的Hermes智能体

本文详细介绍了如何将IMA知识库功能接入Hermes Agent平台,实现一站式笔记管理和知识库操作。主要内容包括:获取IMA访问凭证、下载技能包、配置凭据(支持文件和环境变量两种方式)、验证配置有效性,以及实际应用演示(查询知识库列表、创建笔记并添加到知识库)。文章还提供了常见问题解决方案,如认证失败处理、版本更新等。通过该集成,用户可在Hermes中直接调用IMA的笔记创建、知识库管理等强大功能,提升工作效率。

小石头的专栏 640

Distributed algorithm

Atomic commit two-phase commit protocol Coordinator Cohort QUERY TO COMMIT

332

Claude Code 实战 从零教你用 Claude Code 干活

Claude Code 实用指南:AI 编程助手的核心功能与使用技巧 Claude Code 是 Anthropic 推出的智能编程助手,可直接在本地环境中执行操作,相比传统 AI 对话工具具有显著优势:能直接读取项目文件、自动执行修改、记忆项目规则,并支持连接外部服务。本文详解其安装配置、三大核心场景(资料搜索、网页抓取、文章撰写)及进阶功能(Skills、MCP协议、斜杠命令)。特别提供了工作模式切换、CLAUDE.md配置文件等实用技巧,并附常见问题解决方案,帮助用户高效利用这一"坐在身边的

2401_84052244的博客 7402

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

easy-vibe 分布式系统原理:从 CAP 定理到 Raft 共识与分布式事务的完整指南

::: tip 导读 本指南以 [distributed-systems.md](https://link.gitcode.com/i/4613e2973fadd215ea17aa73918104b4) 为骨架展开,系统讲解分布式系统的设计动机、CAP 定理、一致性模型、八大核心挑战、共识算法与分布式事务。读完本文,你将能判断"什么时候该用分布式、该在哪一维做取舍",并掌握 Paxos/Raft/

gitblog_00795的博客 408

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Boss Show Time|四大招聘平台职位发布时间展示插件,新岗一眼可辨

Boss Show Time是一款Chrome扩展,为Boss直聘、智联招聘、前程无忧、拉勾招聘的职位列表页展示发布时间标签。职位发布时间决定它是否值得投递,该插件把这个隐藏字段变得可见。 ## 一、工作原理:时间标签与数据获取 ### 时间标签配色规则 每个职位卡片右上角有时间标签,背景色按发布距今天数分档:7天内黄绿、14天内绿、28天内橙、56天内红、56天以上灰;招聘状态为"最新"时

gitblog_01178的博客 594

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

leanrea还是REA?MCP逆向服务器与8KB技能文件的终极对比与选型指南

leanrea 是一个 **8 KB 的技能文件**,让 AI Agent 仅凭纯命令行工具(asar、otool、nm、jadx、sqlite3 等)就能完成软件逆向工程——不装 25 MB 的 npm 包,不注册 207 个 MCP 工具,零服务器。而 REA(Reverse Engineer Anything)走的是另一条路线:在 Agent 与工具之间架起一层 MCP 逆向服务器。实测数据

gitblog_00590的博客 788

Part 2: CHAPTER 9 Consistency and Consensus

文章目录?resourceSummaryConsistent:ConsensusConsistency GuaranteessLinearizability:Implementing Linearizable SystemThe Cost of LinearizabilityOrdering GuaranteesOrdering and CausalityThe causal order is n...

静无需言 1086

Yojam Native Messaging原理详解:浏览器扩展如何通过stdio协议与macOS主进程通信

Yojam 是一款 macOS 链接分流工具,能把任意链接打开在你指定的浏览器、浏览器 Profile 或桌面应用中。本文详解 Yojam 浏览器扩展的 Native Messaging(原生消息)实现:扩展如何与 macOS 上的 YojamNativeHost 进程通过 stdio 流以"4 字节长度前缀 + JSON"协议通信,以及这套机制如何避开系统协议确认弹窗。 ## 为什么 Yoja

gitblog_01083的博客 165

分布式事务的多种解决方案

需求缘起 在微服务架构中,随着服务的逐步拆分,数据库私有已经成为共识,这也导致所面临的分布式事务问题成为微服务落地过程中一个非常难以逾越的障碍,但是目前尚没有一个完整通用的解决方案。 其实不仅仅是在微服务架构中,随着用户访问量的逐渐上涨,数据库甚至是服务的分片、分区、水平拆分、垂直拆分已经逐渐成为较为常用的提升瓶颈的解决方案,因此越来越多的原子操作变成了跨库甚至是跨服务的事务操作。最终结果是在对高...

weixin_34124939的博客 148

分布式系统的一致性算法------《Designing Data-Intensive Applications》读书笔记13

一致性算法是分布式系统中最重要的问题之一。表面上看,这似乎很简单,只是让几个节点在某些方面达成一致。在本篇之中,会带大家完整的梳理分布式系统之中的共识算法,来更加深刻的理解分布式系统的设计。 1.原子提交和两阶段提交(2PC) 原子提交防止了数据库处于半更新的状态,这对于需要满足多对象事务和维护次级索引的数据库尤为重要。每个次级索引都是从主数据中分离出来的数据结构,因此,如果修改某些...

a89677418的博客 236

Distributed System Transaction —— 各种一致性(Consistency)的讨论

文章目录概述一致性需要考虑的几个问题各种一致性顺序一致性线性一致性因果一致性和最终一致性 概述 在Distributed System Transaction —— 什么是线性一致性(Linearizability)?一文中,介绍过一致性这样的概念,对于一致性,简单的分类是“强一致”和“弱一致”,但这只是一种统称,实际上可以分为:(弱->强) 最终一致性(Eventual) 因果一致性(Casual) 顺序一致性(Sequential) 线性一致性(Linearizable) 所以强一致是包含顺序

No_Game_No_Life_的博客 839

分布式事务_实施分布式锁概述

分布式事务 众所周知,锁通常用于监视和控制多个线程同时访问共享资源。 它们基本上保护并发应用程序中的数据完整性和原子性,即,一次只能有一个线程可以获取共享资源上的锁,否则将无法访问该锁。 但是在分布式环境中的锁定不仅仅是在多线程应用程序中的互斥锁。 由于必须立即跨集群或网络中的任何节点出现故障的所有节点获取锁定,因此情况变得更加复杂。 这是我们考虑的用户故事,用于在本文的其余部分中说明方案。 ...

cunhu4317的博客 407

system-design-notes:2PC两阶段提交协议,跨账户转账如何保证强一致?

跨账户转账是分布式系统最经典的一致性难题:A 扣款、B 入账必须"同生共死"。本文基于 system-design-notes 项目(《System Design Interview》读书笔记)中数字钱包系统设计一章,讲透 2PC 两阶段提交协议、TC/C 补偿事务与 Saga 三种方案是如何保证跨账户转账强一致的,新手也能一次看懂。 ## 一、为什么单机事务搞不定跨账户转账?💡 在一台数据

gitblog_01016的博客 968

FoundationDB 架构全景与核心数据路径深度解析:从读写提交到故障恢复与数据再平衡

FoundationDB 是一个开源的分布式事务型键值存储,其核心设计目标是在大规模集群上提供强一致性的多键 ACID 事务。本篇文章以仓库中的架构总览文档 [diagram_overview.md](https://link.gitcode.com/i/8a8202c5e3579220ab160a5299eaf519) 为主干,结合 [recovery-internals.md](https:/

gitblog_00087的博客 347
上一篇: Distributed_事务__共识(一致性)
下一篇: Docker-一篇即可熟悉Docker
Blockchain410
博客等级 码龄5年 3230粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blockchain410

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值