分布式锁是解决并发时资源争抢的问题,分布式事务和本地事务是解决流程化提交问题。
一、其中分布式锁实现:
1.基于数据库锁实现,悲观锁和乐观锁
悲观锁就是采用行锁,for update ,属于排他锁,其他任何写操作都要等当前操作完成,性能差,并发上来都要等操作完成,需要设置setAutoCommit
乐观锁就是通过添加版本号,在update 时比较版本号方式更新 比如version,不被阻塞;
2.基于redis实现
setnx(key,expire),get(key),getset(key,newexpire)实现完整的分布式锁,并且可以通过注解来加锁
3.基于zookeeper
实际是基于paoxy
二、分布式事务实现
原则:优先使用本地事务,将操作优先在一个本地事务中完成,无法使用本地事务的采用分布式事务
1.全局事务(DTP模型),基于2PC、3PC(两段和三段提交)实现,但由于同步阻塞,处理效率低,不适合大型网站分布式场景
原则:ACID,刚性事务
2pc:一阶段预提交,二阶段提交,都成功情况才会成功
2.柔性事务
原则:基本可用,最终一致,即BASE理论
关于柔性事务,最主要的有以下三种类型:异步确保型、补偿型、最大努力通知型
幂等性:参数列表对比,是否重复请求
可补偿:保证原子性
TCC操作:TCC位于业务服务层而非资源层
TCC没有单独的准备(Prepare)阶段,Try操作兼备资源操作与准备能力 Try操作可以灵活选择业务资源的锁定粒度(以业务定粒度)
TCC有较高开发成本
网友评论