目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

JAVA全系列 教程

3762个小节阅读:7089.8k

收藏
全部开发者教程

C语言快速入门

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(204)
赞(0)

13、你了解分布式锁么?对比下 Redis 和ZK 两种分布式锁的优劣?

image-20230420163026293

分布式锁是控制分布式系统之间同步访问共享资源的⼀种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁了。

下面我们来看看使用ZooKeeper如何实现分布式锁?

排他锁

排他锁(Exclusive Locks,简称 X 锁),又称为写锁或独占锁,是一种基本的锁类型。如果事务T1对 数据对象 O1加上了排他锁,那么在整个加锁期间,只允许事务 T1对 O1进行读取和更新操作,其他事务都不能再对这个数据对象进行任何类型的操作,直到T1释放了排他锁。

从上面讲解的排他锁的基本概念中,我们可以看到,排他锁的核心是如何保证当前有且仅有⼀个事务获得锁,并且锁被释放后,所有正在等待获取锁的事务都能够被通知到。

共享锁

共享锁(Shared Locks,简称S锁),又称为读锁,同样是⼀种基本的锁类型。 如果事务T1对数据对象O1加上了共享锁,那么当前事务只能对O1进行读操作,其他事务也只能对这 个数据对象加共享锁,直到该数据对象上的所有共享锁都被释放。

共享锁和排他锁最根本的区别在于,加上排他锁后,数据对象只对⼀个事务可见,而加上共享锁后,数据对所有事务都可见。

基于zk和redis实现分布式锁的对比

维度RedisZookeeper
一致性算法paxos(ZAB)
CAPAPCP
高可用主从集群n+1,n至少是2
接口类型客户端客户端
实现setNXcreateEphemral

ZK分布式锁优缺点分析

  • 优点:能够保证其一致性,每个节点的创建都会同时写入leader和follwer节点,半数以上写入成功才返回,如果leader节点挂了之后选举的流程会优先选举zxid(事务Id)最大的节点,就是选数据最全的,又因为半数写入的机制这样就不会导致丢数据(ZAB协议)
  • 缺点:性能没有redis高

Redis分布式锁优缺点分析

  • 优点:性能高,能保证AP,保证其高可用
  • 缺点:但是不能保证其一致性

 

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2