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

微服务知识2

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.kler.cn/news/16799.html

相关文章:

  • C语言文件操作【基础知识 + 顺序读写 + 文件版通讯录】
  • 【Java笔试强训 17】
  • maven install的时候报Unable to find main class
  • 财报解读:照明行业景气上行,欧普照明已步入增长“快车道”
  • Noah-MP陆面过程模型建模方法与站点、区域模拟实践技术
  • linux命令之tar详解
  • 快速了解车联网V2X通信
  • 接踵而至,昆仑万维天工大语言模型发布
  • Linux必会100个命令(六十)curl
  • 小满nestjs(第二十八章 nestjs 事务)
  • 1.软件测试
  • 常见元件、封装、尺寸、表面处理等
  • C语言中的三种语句
  • fastai2 实现SSD
  • 1699_simulink代码生成配置初级方案
  • 【Java】内部类Object类
  • SpringBoot整合Redis实现点赞、收藏功能
  • @TransactionalEventListener的使用和实现原理
  • 【五一创作】【Simulink】采用延时补偿的三相并网逆变器FCS-MPC
  • 如何在CentOS上详细安装PageOffice进行企业文档管理和协作
  • Java 基础入门篇(五)—— 面向对象编程
  • 05_从0运行,重定位,初始化,中断再到定时器
  • kafka单机配置
  • 探索三维世界【3】:Three.js 的 Geometry 几何体 与 Material 材质
  • 《QDebug 2023年4月》
  • 烟火识别智能监测系统 yolov5
  • 生物信息学中---数据集不平衡的处理方法
  • 小红书违禁词有哪些,小红书违禁词汇总分享
  • 来上海一个月的记录、思考和感悟
  • ffmpeg-mov-metadate不识别Bug修复