微服务知识2

news/2024/11/29 11:33:32/

CAP和BASE是分布式必备理论基础

CAP理论

一致性(C):写操作之后进行读操作无论在哪个节点都需要返回写操作的值

可用性(A):非故障的节点在合理的时间内返回合理的响应

分区容错性(P):当出现网络分区后,系统能够继续工作,如集群中有台机器出现了问题,但这个集群仍然可以正常工作

BASE理论

BASE:(Basically Available) 基本可用,(Soft state)软状态,(Eventually consistent)最终一致性三个短语的缩写。

BASE理论是CAP中一致性和可用性权衡的结果,其来源于对大规模互联网分布式实践的总结,是基于CAP理论逐步演化而来的。核心思想:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性

2PC 

优点:尽量保证了数据的一致,实现成本较低,在各大主流数据库都有实现

缺点:单点问题:事务管理器在整个流程中扮演的角色很关键, 如其宕机,如在第一阶段已经完成,在第二阶段正准备提交的时候事务管理器宕机,资源管理器就会一直阻塞,导致数据库无法使用

          同步阻塞:在准备就绪之后,资源管理器中的资源一直处于阻塞,直到提交完成,释放资源

          数据不一致:两阶段提交协议虽然为分布式数据强一致性所设计,但仍然存在数据不一致性的可能,如在第二阶段中,假设协调者发出了事务commit通知,但因网络问题该通知仅被一部分参与者收到并执行了commit操作,其余的参与者则因没有收到通知一直处于阻塞状态,产生了数据不一致性

3PC

三段提交是对两段提交的一种升级优化,3PC在2PC的第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前,各参与者节点的状态都一致。同时在协调者和参与者中都引入超时机制,当参与者未收到协调者的commit请求后,会对本地事务进行abort,不会一直阻塞等待,解决了2PC的单点故障问题,但仍未从根本上解决数据一致性的问题

CanCommit:协调者向所有参与者发送CanCommit命令,询问是否可以执行事务提交操作。如果全部响应YES则进入下一个阶段

PreCommit:协调者向所有参与者发送PreCommit命令,询问是否可以进行事务的预提交操作,参与者收到PreCommit请求后,如成功的执行了事务操作则返回YES响应,进入最终commit阶段。一单参与者中有向协调者发送了No响应,或因网络造成超时,协调者没有收到参与者的响应则协调者向所有参与者发送abort请求,参与者收到abort命令执行事务中断

DoCommit:在前两个阶段中所有参与者的响应均是YES后,协调者向参与者发送DoCommit命令正式提交事物,如协调者没有接收到参与者发送的ACK响应,则会向所有参与者发送abort请求命令执行事务中断

优点:引入超时机制,解决了事务管理器突然宕机导致资源一直处理阻塞的问题

           多了一次询问阶段,防止个别参与者不正常的情况下,其他参与者都执行了事务,锁定资源

缺点:用超时机制解决同步阻塞问题,但却多了一次网络通信,性能上反而变的更差

           没有解决数据不一致的问题

Seata

Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata提供了AT,TCC,SAGA,XA事务模式,一站式的分布式解决方案

两阶段提交模式

AT模式:提供无侵入自动补偿的事务模式:只需要加上对应的注解就可以开启全局事务

XA模式:支持已实现XA接口的数据库的XA模式:需要数据库实现对应的XA模式的接口,一般mysql,oracle都实现了

TCC模式:在应用层面的2PC,需要编写业务逻辑实现

SAGA模式:为长事务提供有效的解决方案

AT模式两阶段过程

一阶段:开启全局事务,注册分支事务,存储全局锁,业务数据和回滚日志(undoLog)进行提交

二阶段:事务协调者根据所有分支的情况,决定本次全局事务是commit还是Rollback(二阶段是完全异步删除undolog日志,全局事务,分支事务,存储的全局锁)
 


http://www.ppmy.cn/news/58467.html

相关文章

【C++】实现两个线程交替打印1-100

文章目录 实现两个线程交替打印1-100 实现两个线程交替打印1-100 尝试用两个线程交替打印1-100的数字,要求一个线程打印奇数,另一个线程打印偶数 该题目主要考察的就是线程的同步和互斥: 互斥:两个线程都在向控制台打印数据,为了保证两个线程的打印数据不会相互影响…

【IoT】嵌入式设计:基于CPLD设计的可调数字时钟

目录 说明 一 总体设计方案 1.2 设计原理 二 各模块说明 2.1设计思路及步骤

【源码解析】流控框架Sentinel源码解析

Sentinel简介 Sentinel是阿里开源的一款面向分布式、多语言异构化服务架构的流量治理组件。 主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 核心概念 资源 资源…

高效学习方法和工具推荐,让你事半功倍!

本文介绍了五种高效学习方法,包括制定详细的学习计划、集中注意力、不断复习、采用多种学习方式和利用小休息。同时,还推荐了五个高效学习工具和平台,包括Coursera、Duolingo、Quizlet、Khan Academy和Anki,让你在学习中事半功倍&…

刘强:作业帮给OceanBase提了九条意见

3 月 25 日,第一届 OceanBase 开发者大会在北京举行, 作业帮数据库架构师刘强为大家带来了《作业帮基于 OceanBase 的 HTAP 实践》的分享 ,为大家介绍了 OceanBase 上线作业帮半年来的体验与心得。 以下内容由大会演讲整理而成: …

让chatGPT给我写一个CSS,我太蠢了

前言 CSS这东西,让AI写的确有点难度,毕竟它写出来的东西,没办法直接预览,这是其次。重要的是CSS这东西怎么描述,不好描述啊,比如我让他给我制作一个这样的效果出来,没办法描述,所以…

ChatGPT 不好用?那你看下这份 Prompt 工程指南

作为大型语言模型接口,ChatGPT 生成的响应令人刮目相看,然而,解锁其真正威力的关键还是在于提示工程。 在本文中,我们将揭示制作提示的专家级技巧,以生成更准确、更有意义的响应。无论你使用 ChatGPT 是为了服务客户、…

净利润同比增长48.9%,中国平安“一览众山小”

中国平安价值迸发的速度,或许超过了所有人的想象。 4月26日晚,中国平安发布2023年一季度业绩报告,许多自媒体用“炸裂”来形容其亮眼的财务数据。财报显示,第一季度,集团实现营收2537.78亿元,同比增长30.8…