分布式解决选择

Posted webster1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式解决选择相关的知识,希望对你有一定的参考价值。

分布式锁一般有三种实现方式:

1、数据库锁
最简单的方式可能就是直接创建一张锁表,然后通过操作该表中的数据来实现了
要锁住某个方法或资源时,我们就在该表中增加一条记录,想要释放锁的时候就删除这条记录

2、基于Redis的分布式锁
基于缓存来实现、可以集群部署
使用jedis.setnx()和jedis.expire()组合实现加锁

3、基于ZooKeeper的分布式锁
基于zookeeper临时有序节点可以实现的分布式锁 (对应的方法临时有序结点)
每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点。
判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。
当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的锁无法释放,而产生的死锁问题。


分布式事物;
1、XA 是一个两阶段提交协议:
第一阶段:事务协调器要求每个涉及到事务的数据库预提交(precommit)此操作,并反映是否可以提交.
第二阶段:事务协调器要求每个数据库提交数据。

2、补偿事务(TCC)
都要注册一个与其对应的确认和补偿(撤销)操作
Try :阶段主要是对业务系统做检测及资源预留
Confirm: 阶段主要是对业务系统做确认提交,Try阶段执行成功并开始执行 Confirm阶段时,默认 Confirm阶段是不会出错的。
即:只要Try成功,Confirm一定成功
Cancel: 阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放

 

以上是关于分布式解决选择的主要内容,如果未能解决你的问题,请参考以下文章

如何解决微服务分布式事务问题

最强分布式事务框架怎么炼成的?

分布式任务调度框架选型,如何选择一个合适的框架?

分布式事务解决方案

微服务分布式一致性模式

分布式存储的架构隐患及解决方法