Go微服务: 分布式Cap定理和Base理论

一笔订单的一致性远征:两阶段提交的困局、CAP与BASE的取舍与六种柔性事务模式的工程选型 微服务拆分后,单体里一个本地事务就能保证的原子性被服务边界切断,跨服务丢失、幽灵、重复与悬挂随之出现。本文跟随一笔订单,先剖析XA与两阶段、三阶段提交,用离散事件仿真对比二者在协调者宕机与网络分区下的锁持有和数据分叉;再借CAP、PACELC、一致性模型光谱与BASE思想划定理论边界;随后逐一拆解可靠事件、补偿、Saga、TCC、最大努力通知与人工干预六种柔性事务模式的思路、关键点、实现策略与实测数据;最后给出横向对比、选型决策路径与下单链路组合方案,说明最终一致需要幂等、可观测与对账兜底。 阅读详情

分布式中的Cap定理

  • CAP理论
    • C: 一致性,是站在分布式的角度,要么读取到数据,要么读取失败,比如数据库主从,同步时的时候加锁,同步完成才能读到同步的数据,同步完成,才返回数据给程序,这样就能解决数据不一致的问题,简单来说,就是保证数据最新
    • A: 可用性,任何客户端请求,都能得到响应式数据,不会出现响应错误,但可能不包含最新的写入数据,简单来说,就是保证数据不出错
    • P: 分区容错性,由于分布式系统都是通过网络通信的,网络是不可靠的,当任意数量的消息丢失或延迟到达的时候,系统仍然提供服务, 不会挂掉,简单说,就是一直运行,不管内部出现任何数据同步问题,强调的是不挂,但是要保证集群内有足够多的可用节点,所以一般要满足这个P条件
  • CAP理论只有两两相交不能同时满足三点,一般而言,分布式系统要满足P这个要求,就是不能挂掉,所以,要么是CP,要么是AP。而CA类型的就是单体应用,而非分布式应用

Base 理论

  • 这里先看一个场景:有两个人分别是a和b, a在A银行存钱,b在B银行存钱
  • 有一种情况是a给b转账10元,b查询时可能不会及时到账,系统还没有执行完,这样就存在一个中间状态,比如提示1个小时候再查询是否到账,这样就可以从业务层面解决问题
  • 还有一种情况a转了,系统执行了,但是遇到问题了,b没有收到,这时候,a仍然要保持原来的余额,那这时候通知a, 重新转一次账,即可。这一种是银行系统故障问题
  • 为了保持一致性,在高并发的场景中是不可接受的,可以主动提示用户,1小时之后再进行查询,这是一个中间状态,或者设置一个转账中的标识
  • 现在我们思考2个问题,在生产环境中是否可以牺牲可用性?也就是系统不能提供服务了; 是否可以牺牲一致性?也就是数据不一致的问题
  • 我们在分布式服务中就需要做一些取舍,根据自身情况的等级来选择
  • 现在举2个例子:单独的mysql是强一致性,分布式的集群是弱一致性,在强一致性的单独的系统中,基于事务可以回滚;分布式,比如A和B银行,两家银行,都是相互独立的,相互不会被控制,所以是弱一致性
  • 我们现在来看下Base理论的三要素
    • 1 ) 基本可用 Basically Available
    • 系统出现了不可预知的故障,但是能用,相比较正常系统而言会有响应时间上的损失和功能上的损失,比如从原来的 200ms响应到 500ms相应,再比如抢购活动中,抢不到提示稍后再试
    • 2 )软状态 Soft State
    • 也就是可以有一段时间不同步,什么是软状态呢?相对于原子性而言,要求多个节点的数据副本都是一致的,这是一种"硬状态"
    • 软状态是指允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同的节点的数据副本存在数据延时
    • 3 )最终一致性,Eventually Consistent, 简称 E, 最终数据一致就可以了,而不是时时保持强一致。上面说软状态,其实不可能一直是软状态,必须有个时间期限。在期限过后,应当保证所有副本保持数据一致性,从而达到数据的最终一致性。这个时间期限取决于网络延时、系统负载、数据复制方案设计等因素。A到B银行的转账就是最终一致性的体现
python音频信号分析 声音以具有诸如频率、带宽、分贝等参数的音频信号的形式表示,典型的音频信号可以表示为幅度和时间的函数 阅读详情

相关推荐

Contest 226 - C - Martial artist

from atcoder Problem Statement Time Limit: 2 sec / Memory Limit: 1024 MB Score :300300points Takahashi is a martial artist. There areNNmoves that a martial artist can learn, called Move11,22,\ldots…,NN. For each1 \leq i \leq N1≤i≤N, it takes...

m0_54674275的博客 1020

微服务CAP原则

微服务CAP原则

Leon_Jinhai_Sun的博客 2728

2026四款AI原生IDE实测:Trae、Qoder、CodeBuddy、Cursor能力边界深度解析

AI原生IDE正从代码编辑器演进为开发者智能工作流中枢,其核心在于对上下文理解、AST编辑意图建模与多模态任务调度的工程化实现。区别于传统插件式AI辅助,真正的AI原生IDE需具备知识库嵌入、符号图索引、操作链固化等底层能力,从而支撑Figma转码、N+1查询修复、跨语言迁移等复杂场景。Trae强调中文语境与企业规范的强绑定,Qoder聚焦AST级编辑轨迹预测,CodeBuddy通过IDE/插件/CLI三态划分控制权边界,Cursor则以云端Agent实现开发任务的时空并行。本文基于真实项目压测,揭示免费版

ctk87443的博客 2456

【微服务】CAP模式

一致性(Consistency):在分布式系统中,数据在多个副本之间保持一致的状态。当系统执行更新操作后,所有节点在同一时间的数据应完全一致。这要求系统在任何时刻,所有用户访问到的数据都是最新的。可用性(Availability):系统提供的服务必须一直处于可用状态,对于用户的每一个操作请求,系统都能在合理的时间内给出响应,即便是在部分节点故障的情况下。分区容错性(Partition Tolerance):分布式系统在遇到网络分区故障时,仍然能够继续对外提供服务。

wosixiaokeai的博客 1259

ubuntu18.04安装gtsam过程及报错error: invalid initialization of reference of type ‘const std::vector<bool>&’

这里建议从这个链接下,不要从官网下,可能会有版本冲突 2.安装依赖 3.编译 报错: 1. error: invalid initialization of reference of type ‘const std::vector&’ from expression of type ‘const std::vector’ 124 | const std::vector& mask() const { retur...

qq_35102059的博客 2912

AutoDock Vina 对接计算(大批量)

AutoDock Vina是一种用于计算生物分子之间相互作用的计算工具,主要用于蛋白质和小分子(通常是潜在药物分子)之间的对接研究。它可以用于虚拟筛选、药物设计和生物分子结合位点的预测等多个应用领域。

MurphyStar的博客 1万+

微服务-理论(CAP,一致性协议)

在我们说一致性的时候,如果去保证强一致性,这个时候客户端如果请求到达了B是不能对外提供服务的,因为一旦提供服务这个数据还是老的数据,就产生了数据的不一致性。服务端节点都存储所有数据,但每个节点只负责其中一部分服务,在接收到客户端的“写“(注册、心跳、下线等)请求后,服务端节点判断请求的服务是否为自己负责,如果是,则处理,否则交由负责的节点处理;客户端以服务为维度向服务端注册,注册后每隔一段时间向服务端发送一次心跳,心跳包需要带上注册服务的全部信息,在客户端看来,服务端节点对等,所以请求的节点是随机的;

qq_43259860的博客 2121

接口操作MySQL跟MongoDB事务回滚问题

通常使用的事务注解:@Transactional 是不会对MongoDB生效的,但是在一些生产接口中无法避免同时使用MySQL跟MongoDB的操作。

weixin_45932023的博客 1578

微服务之 CAP原则

本文是对SpringCloud的学习,了解了微服务的CAP原则,并且认识了三种组合方案的利弊。之后的学习内容将持续更新!!!

qq15035899256的博客 1088

LAMMPS in文件详解:从零开始手把手教你配置金属分子动力学模拟

本文详细解析了LAMMPS in文件的配置方法,手把手教你完成金属分子动力学模拟的全流程。从软件环境准备、势函数选择,到使用Materials Studio构建模型、编写in文件进行能量最小化与系统弛豫,再到实施单轴拉伸生产模拟并提取应力应变数据,最后通过Python和OVITO进行结果分析与可视化,提供了完整的实战指南和常见问题排查技巧。

weixin_28475533的博客 527

WS2812和homeassistant握手

本文学习了WS2812和homeassistant握手,后期会分享更多有趣物联网的操作从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。...

vor234的博客 811

Go 分布式系统开发核心指南:从理论基石到高可用实战

RPC 的目标是让我们调用远程服务的方法像调用本地函数一样简单。开发者无需关心底层的网络协议、序列化等细节。性能更高: 通常使用二进制协议,数据包更小。类型更强: 通过 IDL (接口定义语言) 定义服务契约,具有严格的类型检查。面向服务: 更关注“动作” (Action),而非“资源” (Resource)。我们从分布式系统最基础的 CAP 理论出发,走过了一条漫长但充实的道路。我们学习了:如何在理论层面做出架构决策 (CAP/BASE)。如何让服务高效地通信(gRPC)。

dl999666的博客 807

YOLO+OpenClaw缺陷检测智能体 | 低代码工业质检自动化方案 | 含YOLO模型训练/智能体集成/任务全流程,支持离线日报/预警/趋势分析,解决实时性瓶颈问题(下篇)

某PCB板制造商需要对生产线上的PCB板进行缺陷检测,主要检测划痕、凹坑、污渍和裂纹等缺陷。原有人工检测方式效率仅为200件/小时,漏检率达5%,且检测人员长期工作易疲劳。

qq_36130719的博客 205

【微服务架构核心考点】:从CAP理论到落地实践,面试一次过

掌握微服务架构高频考点,轻松应对Java面试挑战。深入解析CAP理论、服务注册发现、熔断限流等核心机制,结合1024程序员节典型场景,详解Spring Cloud与Dubbo落地实践。系统梳理知识脉络,提升架构思维,助力高效备考,值得收藏。

DebugLoom的博客 977

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

微服务学习1:分布式系统的经典基础理论

概要:分布式系统设计理念、CAP定理、BASE理论 一、分布式系统设计理念 1.1 分布式系统的目标与要素 分布式系统的目标是提升系统的整体性能和吞吐量,另外还要尽量保证分布式系统的容错性。 即使采用了分布式系统,我们也要尽力运用并发编程、高性能网络框架等等手段提升单机上的程序性能。 1.2 分布式系统设计两大思路:中心化和去中心化 1)中心化设计 两个角色:中心化的设计思想很简单,分布式集群中的节点机器按照角色分工,大体上氛围两种角色:“领导”和“干活的” 角色职...

何哥的博客 987

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

分布式系统之CAP、BASE、ACID详解

ACID ACID,是指在数据库管理系统(DBMS)中,事务(transaction)所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 在数据库系统中,一个事务是指:由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构...

qq_38311489的博客 476

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Java分布式事务核心原理】:深入剖析CAP理论与BASE模型的实战应用

深入掌握Java分布式事务核心原理,解析CAP理论与BASE模型在微服务场景下的实战应用。涵盖两阶段提交、事务消息等关键方案,提升系统一致性与可用性,值得收藏。

DebugLoom的博客 1000

GO分布式后端工程师学习路径

核心路线:语言基础 → 理论奠基 → 组件实战 → 架构整合 → 造轮子内化,适合有一定 Go 基础、想系统转向分布式方向的后端工程师参考

qq_39007905的博客 330

分布式系统的经典基础理论

历史优质文章: 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 Java NIO 概览 分布式系统设计理念 分布式系统架构的第一原则是不要分布!这句话看似矛盾实则揭露了分布式系统的很多特征。 分布式系统的目标与要素 分布式系统的目标是提升系统的整体性能和吞吐量另外还要尽量保证分布式系统的容错性(假如增加10台服务器才达到单机运...

JavaGuide 1万+

Java面试题-微服务

Java面试题-微服务

小新没有蜡笔的博客 655

微服务概述——从零开始理解企业级架构演进

分布式系统是指一组通过网络通信和协调的计算机组件,对外表现如同一个完整的系统。例如,用户访问一个网站,后台可能有多台服务器协同处理请求。Spring Cloud 是一套用于快速构建分布式系统的工具集,涵盖了微服务架构中常见的模式,例如:配置管理(集中管理配置文件)服务发现(服务之间能够自动发现彼此)断路器(防止某个服务故障拖垮整个系统)智能路由、API网关、分布式追踪等(第一代微服务组件,如Eureka、Ribbon)(国内常用的组件集,如Nacos、Sentinel)

qq_64619681的博客 478

分布式系统的经典基础理论 (转载)

分布式系统的经典基础理论 原文 分布式系统设计理念 分布式系统架构的第一原则是不要分布!这句话看似矛盾实则揭露了分布式系统的很多特征。 分布式系统的目标与要素 分布式系统的目标是提升系统的整体性能和吞吐量另外还要尽量保证分布式系统的容错性(假如增加10台服务器才达到单机运行效果2倍左右的性能,那么这个分布式系统就根本没有存在的意义)。 即使采用了分布式系统,我们也要尽力运用并发编程、高性...

fcvtb的博客 449

CAP 定理与 etcd 核心知识点总结

分布式系统中,一致性(C)、可用性(A)、分区容忍性(P)无法同时满足,最多只能满足其中两项。

2401_88948820的博客 490

分布式后端工程师学习路径

核心路线:语言基础 → 理论奠基 → 组件实战 → 架构整合 → 造轮子内化,适合有一定 Go 基础、想系统转向分布式方向的后端工程师参考

qq_39007905的博客 156

分布式一致性理论与算法

本篇文章主要从单体应用到分布式应用的转变开始,罗列了分布式下可能会遇到的问题,以及一些常见的解决手段;然后讲述了分布式中的 CAP 定理和 BASE 理论,讨论了什么是“一致”,以及几种一致性模型;最后通过一个数据复制的问题,以及一些常见的数据复制手段引出了多数派读写方式,最终引出了解决“复制状态机”问题的 Paxos 和 Raft 协议。分布式系统是很复杂的,每一个系分领域都有很多的模型、算法、理论在支撑。本篇文章有很多地方都没有讲到,比如分布式事务、分布式缓存、分布式存储系统、分布式锁等等。

CoderChronicle的博客 311

分布式和微服务到底有什么区别?一文讲透底层逻辑与工程实践

在系统架构演进中,分布式与微服务经常被混为一谈。分布式描述的是多节点通过网络协作的系统形态,而微服务强调的是按业务能力拆分服务的架构风格,二者并非同一维度。理解CAP定理、BASE理论,掌握分布式事务、分布式锁、注册中心等组件背后的原理,是应对微服务落地时典型问题的基础。这些概念不仅关系到高并发场景下的数据一致性,也直接影响服务拆分、部署与治理的工程决策。无论是面试回答“分布式和微服务有何区别”,还是从单体应用向微服务架构演进,都需要先厘清两者的内涵与代价。结合Seata、Nacos等中间件实践,深入剖析两

weixin_34408717的博客 479
上一篇: Go微服务: 基于rocketmq:5.2.0搭建RocketMQ环境,以及示例参考
下一篇: Go微服务: 关于分布式系统中的常见问题,分布式事务,以及常用解决方案
Wang's Blog
博客等级 码龄12年 7418粉丝 2407原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Wang's Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值