CAP原理

简介: 本节介绍分布式事务中的CAP原理,即一致性(C)、可用性(A)、分区容忍性(P)三者不可兼得。分布式系统必须满足P,因此需在C与A之间权衡,选择CP或AP方案。内容结合金融、库存、订票等实际场景,解析Zookeeper、Redis、Nacos等技术的选型应用,指导如何根据业务需求合理选择分布式事务控制策略。

遇到了分布式事务的场景我们该如何去进行事务控制呢,本节学习如何选型分布式事务的控制方案。

什么是CAP原理

首先需要理解什么是CAP原理,明白了CAP原理有助于我们去选型分布式事务的控制方案。

CAP是 Consistency、Availability、Partition tolerance三个词语的缩写,分别表示一致性、可用性、分区容忍性。使用下图去理解CAP:下图表示客户端经过网关访问订单服务,库存服务

一致性: 向系统写一个新数据再次读取到的也一定是这个新数据。拿上图举例,请求订单服务下单,订单服务请求库存服务扣减库存,只要下单成功则库存扣减成功。

可用性:任何时间都可以访问订单服务和库存服务,系统保证可用。

分区容忍性:也叫分区容错性,分布式系统在部署时服务器可能部署在不同的网络分区,比如上图中订单服务在北京,库存服务在上海,由于处于不同的网络分区如果网络通信异常就会导致节点 之间无法通信,当出现由于网络问题导致节点 之间无法通信,此时仍然是对外提供服务的这叫做满足分区容忍性。

CAP理论要强调在分布式系统中C、A、P这三点不能全部满足。

由于是分布式系统就要满足分区容忍性,因为分布式系统难免存在网络分区,不能因为网络异常导致整个系统不可用,所以P是一定要满足的。满足P,那么C和A不能同时满足。拿上图举例说明:

当订单服务与库存服务出现网络通信异常,订单服务无法访问库存服务,此时如果要保证数据一致性则下单接口必须不可用,如果要保证可用性数据将出现不一致。

学习了CAP理论我们知道进行分布式事务控制要在C和A中作出取舍,进行分布式事务控制要么保证CP要么保证AP。具体要根据应用场景进行判断,下边举例说明CP和AP业务场景的例子。

符合CP的场景:满足C舍弃A,强调一致性

金融系统:一般需要在多个账户之间进行交易或资金转移的操作通常需要满足CP,这是因为在这种场景下,数据的一致性是至关重要的,确保不会发生资金丢失、重复扣款或其他意外情况,源账号和目标账号的转账结果要么都成功要么都失败,不会存在一个成功一个失败的情况。

库存系统:在多个仓库之间进行库存转移或销售操作时,需要确保库存的一致性,防止商品超卖或库存混乱。

订票系统:需要确保预订信息的一致性,避免出现同一个资源被多次预订的问题。

Zookeeper:可作为注册中心,支持CP,拿主节点选举举例,当主节点异常进行选举,选举期间所有节点不可用,保证数据的一致性。

Redis:Redis主从模式是CP模式,当主从通信异常此时无法向主节点写数据。

Nacos:Nacos也支持CP,不过默认是AP模式,当客户端注册为非临时节点时为CP模式,注册为非临时节点就需要实时上报心跳,即使在一段时间内未收到心跳信息,该实例仍然会保留在服务列表中,适用于配置中心。

符合AP的场景:满足A舍弃C,强调可用性

AP强调的是可用性,允许短暂的不一致但是要保证最终一致性,在实际应用中符合AP的场景较多。

订单退款:退款后状态为退款中,24小时后退款金额到帐。

积分系统:注册送积分,注册成功积分在24小时后到账。

跨行转账:一般转账支持CP,还有的支持AP,源账号扣减金额后需要等一段时间目标账户才到账,或者源账号扣款后由于目标账号有问题过一段时间将转账金额退回到源账户。

MySQL主从复制:支持AP,向主节点写数据,异步同步到的从节点。

Nacos:默认支持AP,即临时节点的情况,会实时上报心跳,如果一段时间内未收到心跳信息,Nacos 会将该实例标记为不可用并从服务列表中移除。

在生产中AP场景应用的更多,强调的是可用性,允许出现短暂不一致,最终达到数据一致性。

相关文章
用 Nano Banana Pro 批量生成城市天气视觉卡片
本文介绍如何用Nano Banana Pro批量生成统一风格的城市天气视觉卡片。通过结构化Prompt模版,固定视角、构图与尺寸(1080×1080),结合等距3D卡通风格,将北京、上海等城市的天气信息(晴/阴/雨/夜)转化为直观、稳定的视觉内容,适用于内容平台、城市账号或系统看板,实现高效复用与扩展。
|
4月前
|
消息中间件 缓存 NoSQL
【Redis进阶】不止是缓存!Redis的5种核心数据结构与实战场景全解析
本文深入浅出地解析了Redis五大核心数据结构:String、Hash、List、Set和ZSet,结合图解与实战场景,涵盖缓存、计数器、分布式锁、购物车、消息队列、排行榜等典型应用,助你摆脱“只会SET/GET”的困境,真正发挥Redis的高性能潜力。
|
2月前
|
存储 人工智能 弹性计算
一文读懂云服务器:工作原理与核心作用
云服务器通过虚拟化与分布式技术,将物理服务器集群转化为按需分配的弹性计算资源,解决资源浪费、降低部署门槛。支撑个人开发、企业运维及AI、直播、政务等千行百业,是数字经济的核心基础设施。
|
4月前
|
关系型数据库 Java MySQL
【数据库基础】转账100块怎么丢了?通俗讲解数据库事务ACID特性
本文深入浅出地讲解数据库事务的ACID四大特性。以转账场景为例,介绍事务“要么全成功,要么全失败”的核心思想。详解原子性(Undo Log回滚)、一致性(数据守恒)、隔离性(并发控制)与持久性(Redo Log保障),助你理解数据库可靠性的基石。
|
4月前
|
自然语言处理 算法
分词器详解
分词器将文本转为模型可处理的数字序列,主流算法包括BPE、WordPiece和SentencePiece。BPE高效但中文支持弱;WordPiece适合英文,用于BERT;SentencePiece语言无关,尤擅中文。实战中需结合语种与需求选择,并合理配置参数与特殊标记。
|
8月前
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
1063 8
|
人工智能 数据可视化 数据挖掘
Quick BI 体验&征文有奖!
瓴羊生态推出Quick BI 征文激励计划,鼓励用户分享数据分析实践经验与技术洞察,征集高质量原创文章。内容围绕AI功能体验与BI案例实践,设季奖、年奖及参与奖,优秀作者可获现金奖励、产品内测资格及官方认证形象。投稿截止至2026年1月11日。
Quick BI 体验&征文有奖!
|
Ubuntu 安全 调度
在Ubuntu下安装Debian包:dpkg与apt命令的深度解构。
安装Debian包的知识,就像掌握了海上的航行技术,虽然起初会让人感到陌生甚至困惑,但只要你积累熟练,就能在Ubuntu的世界里畅游无阻。就像每一位成功的航海家,掌握好这些工具,去探索属于你的Ubuntu新世界吧!
531 21
|
域名解析 网络协议 数据库
TCP/IP服务器
【10月更文挑战第20天】TCP/IP服务器
436 65
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
452 3
下一篇
开通oss服务