「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」。
-
异地多活
就是机房在不同地方,如果一个地方的机房断电了,其他机房是否能够一起承担去往坏机房的请求,其实本质是要解决数据库的问题,程序什么的都是一样的,关键是不同机房的数据是否一致,最基本的解决办法就是分布式经常用到的多个备份,这个库的备份是存在其他机房的。
-
分层架构
就是指ui、业务实现层、持久层。
-
分布式事务:
分布式锁:保证多个线程或者多个程序操作一个变量的时候,保证这个变量只有一个线程或者程序在使用,保证变量的安全性。
分布式事务:保证不同数据库的一致性
- 单一架构下的事务(一个服务),我们叫做本地事务,一般就是通过try catch finnally来进行的事务。
- 多个服务之间的调用,每个服务都会访问不同的数据库,保证这整个事务的一致性那么就是分布式事务。
-
分布式事务的解决方案
-
XA协议的两段提交--强一致
由事务管理器来让某一个服务开始事务,这个服务执行完后把结果返回给事务管理器,当所有的服务事务都成功的时候,事务管理器才会让各个服务提交,否则就回滚。
这种形式需要你在每个服务写上开启事务,回滚事务的代码,事务管理器也要自己实现,一般有实力的公司才会这么做。
缺点:同步阻塞:当管理好几个服务的事务的时候,其中一个要执行很久,那么其他的服务已经执行完了也还是在等待那个执行久的,是阻塞的。
缺点如果事务管理器故障了,那么大家都阻塞了,尤其是在第二阶段,事务也没提交,也没回滚,大问题。
-
三阶段提交3PC
-
can commit状态,询问所有参与者是否可以执行事务。参与者返回确认信息。
-
pre commit状态:向各个参与者发送pre commit请求。事务执行了,但是不提交,返回执行结果
-
do commit状态:向各个参与者发送提交通知。
主要是解决XA协议的单点阻塞问题,如果有一个服务有问题,那么就会默认执行commit。缺点就是这个某个服务commit执行了,其他没有执行不就有问题了么。。
-
-