Day07 每日必会

简介: casvava

CAP和Base理论了解吗

Consistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须一致。
Availability (可用性):用户访问集群中的任意健康节点必须能得到响应,而不是超时或拒绝。
Partition(分区):因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区。
Tolerance(容错):在集群出现分区时,整个系统也要持续对外提供服务

系统间的网络不能100%保证健康,一定会有故障的时候,而服务又必须对外保证服务。因此Partition Tolerance不可避免。

如果此时要保证一致性,就必须等待网络恢复,完成数据同步后,整个集群才对外提供服务,服务处于阻塞状态,不可用。

如果此时要保证可用性,就不能等待网络恢复,那node01、node02与node03之间就会出现数据不一致。

也就是说,在P一定会出现的情况下,A和C之间只能实现一个

BASE理论是对CAP的一种解决思路,包含三个思想:

  • Basically Available(基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。
  • Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。
  • Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。

说下Seata的AT模式执行流程吧

  • 其余模式同理,这里不重复,要能说出XA、AT、TCC执行流程

Seata AT模式的执行流程:

  1. 分布式事务发起方发送全局事务开始请求(Begin)给Seata Server,Seata Server为该全局事务生成一个全局事务ID(XID)。
  2. 分布式事务发起方开始执行本地事务,并在本地事务执行前向Seata发起分支事务注册请求(Branch Register),包括全局事务ID(XID)、分支事务ID(Branch ID)、分支事务参与者(即本地事务的执行者)等信息。
  3. 分布式事务发起方执行本地事务,如果本地事务执行成功,则向Seata发起分支事务提交请求(Branch Report);如果本地事务执行失败,则向Seata发起分支事务回滚请求(Branch Report)。
  4. Seata Server接收到分支事务提交或回滚请求后,会根据请求的结果来决定是否进行全局事务的提交或回滚。
  5. 如果所有分支事务都提交成功,Seata会向所有参与者发送全局事务提交请求(Global Commit);如果有任何一个分支事务回滚,Seata会向所有参与者发送全局事务回滚请求(Global Rollback)。
  6. 参与者接收到全局事务提交或回滚请求后,根据请求的指令来执行本地事务的提交或回滚操作。

理论专项

  • MQ
  • 怎么防止消息丢失
  • 怎么防止消息重复消费
  • 100W个消息怎么防止积压
相关文章
|
8月前
|
Java Go 开发者
IDEA开发常用的快捷键
IntelliJ IDEA常用快捷键汇总:涵盖代码生成(如main、sout)、编辑(复制、删除、重命名)、导航(跳转、查找)、格式化、代码阅读及版本控制等高频操作,提升开发效率。熟练掌握可显著优化编码体验,是Java开发者必备技能。
796 1
|
8月前
|
Oracle Java 关系型数据库
Java命名规范
Java命名规范涵盖包、类、方法、变量等命名规则。包名全小写,类名首字母大写采用驼峰法,接口常用形容词,抽象类以Abstract/Base开头,异常类以Exception结尾,方法名小写驼峰,常量全大写用下划线分隔,枚举值按常量规范命名,提升代码可读性与一致性。
1120 0
|
9月前
|
Arthas 运维 监控
|
8月前
泛型
泛型用于解决数据类型不确定的问题,提升程序通用性与安全性。使用时需注意:只能用引用类型,支持类型擦除,默认为Object。可用于类、方法、接口,常见形式如`ArrayList<E>`,通过`<T>`声明类型参数,实现灵活复用与编译期检查,避免运行时错误。(238字)
265 1
|
9月前
|
存储 安全 编译器
C++数据类型:
C++基本数据类型包括bool、char、int、float、double等,支持signed、unsigned、short、long修饰。wchar_t用于宽字符,typedef可为类型定义别名,enum定义枚举常量。支持static_cast、dynamic_cast、const_cast和reinterpret_cast四种类型转换,实现安全或强制类型变换。
835 1
|
9月前
|
C++
C++变量作用域
C++变量作用域分为局部、全局、块和类作用域。局部变量在函数内定义,仅内部可用;全局变量在所有函数外定义,整个程序可访问;块作用域变量存在于代码块内;类作用域变量属于类成员。同名时,内层作用域覆盖外层。全局变量自动初始化,局部变量需手动初始化。
386 1
|
9月前
|
C++
解决Clion中写多个C++文件中存在多个main函数报错的问题
本文介绍如何在CLion中解决多个C++文件含main函数报错的问题。通过安装“C/C++ Single File Execution”插件,无需注释或新建项目,即可单独运行指定文件。配合右键操作与简单重构,实现高效刷题编码,方便文件管理与快速调试,提升开发效率。
466 1
|
9月前
|
SQL 前端开发 Java
|
9月前
|
存储 缓存 数据建模
|
8月前
|
Java
判断和循环
本节介绍Java中判断与循环结构,包括if语句的两种格式、switch语句及其JDK12新特性,以及for循环的基本语法。涵盖键盘录入、条件判断、case穿透、break与default使用等核心知识点,帮助掌握程序流程控制。
280 0

热门文章

最新文章