Etcd 实现分布式锁的分析

简介: 锁,主要是用来解决并发情况时对共享资源的使用时互斥控制。

分布式锁的理解

锁,主要是用来解决并发情况时对共享资源的使用时互斥控制。

案例:秒杀系统中,某商品的库存只有5件,一百个用户来抢购,售完即止。那么商品的库存量就是共享变量。保证资源访问互斥,需要对每个请求锁定共享变量,请求处理完后下个请求才能处理。否则,容易出现仅有5件商品,缺有超出5个人下单购买,这将引起极大损失。

在分布式环境中,因可能是多实例多物理机部署,所以就会变成是既多线程又多进程的情况。Go语言中,使用Lock,对于单机应用可以产生效果,但是对于分布式因部署不同机器中,Lock将会失去效果。

我的理解:分布式锁,就是在多进程的情况下,一个外界工具能够控制每个进程请求共享资源时,对共享资源进行锁定,限制一次仅一个进程访问到。

现目前常见分布式锁的方案,大致有以下几种:

  • 基于数据库实现分布式锁
  • 基于ZooKeeper实现分布式锁
  • 基于缓存实现分布式锁,如redis、etcd等

Etcd实现分布式锁

基于缓存的锁有memcached、redis、etcd三种。相比较于数据库实现分布式锁,缓存方式实现分布式锁性能会更好些。因为:

  • 缓存主要存储在内存中,存取速度会更快
  • 缓存支持集群部署,可以解决单点问题

etcd实现分布式锁思路

锁,仅只能被一个进程获取到的,并占用它,其他进程请求时只能等待。通过etcd的事务txn、lease租约、watch监听三个特性实现分布式锁。

1、首先,客户端初始化于etcd服务端建立连接,并以某前缀prefile_key创建全局唯一key=prefile_key/uuid1;客户端分别为自己的key创建租约Lease。

2、为了防止其他客户端等待期间,持有者的租约失效,持有者应当创建一个定时任务作为“心跳”进行续约

3、持有者将key绑定租约写入Etcd中,根据Etcd的Revision机制,写入etcd时会返回revision。

4、客户端通过前缀key获取所有的key-value列表以及对应的Revision,判断自己的key的Revision是否是最小的,如果是则表示获取到锁

5、得到锁后就可以执行业务逻辑,处理完后释放锁

目录
相关文章
|
7月前
|
存储 缓存 NoSQL
【分布式】Redis与Memcache的对比分析
【1月更文挑战第25天】【分布式】Redis与Memcache的对比分析
|
7月前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
110 0
|
2月前
|
程序员
后端|一个分布式锁「失效」的案例分析
小猿最近很苦恼:明明加了分布式锁,为什么并发还是会出问题呢?
33 2
|
4月前
|
运维 安全
基于simulink的分布式发电系统自动重合闸的建模与仿真分析
本课题研究配电系统中分布式电源接入后的自动重合闸问题,着重分析非同期重合闸带来的冲击电流及其影响。通过Simulink搭建模型,仿真不同位置及容量的分布式电源对冲击电流的影响,并对比突发性和永久性故障情况。利用MATLAB2022a进行参数设置与仿真运行,结果显示非同期重合闸对系统安全构成挑战,需通过优化参数提升系统性能。
|
6月前
|
存储 Kubernetes 监控
etcd:分布式键值存储系统技术
`etcd` 是一个用于共享配置和服务发现的高度可用键值存储系统,基于Raft算法保证数据一致性。它提供HTTP/GRPC API,常用于服务发现、配置共享和分布式锁。etcd集群包含多个节点,每个节点可为领导者或跟随者。在Kubernetes中,etcd存储集群状态,其稳定性和一致性至关重要。维护etcd涉及备份、状态监控、日志审计和安全措施。
151 2
|
5月前
|
设计模式 安全 NoSQL
Java面试题:结合单例模式与Java内存管理,设计一个线程安全的单例类?分析Java多线程工具类ExecutorService与Java并发工具包中的工具类,设计一个Java并发框架的分布式锁实现
Java面试题:结合单例模式与Java内存管理,设计一个线程安全的单例类?分析Java多线程工具类ExecutorService与Java并发工具包中的工具类,设计一个Java并发框架的分布式锁实现
64 0
|
5月前
|
运维 监控 Java
在大数据场景下,Elasticsearch作为分布式搜索与分析引擎,因其扩展性和易用性成为全文检索首选。
【7月更文挑战第1天】在大数据场景下,Elasticsearch作为分布式搜索与分析引擎,因其扩展性和易用性成为全文检索首选。本文讲解如何在Java中集成Elasticsearch,包括安装配置、使用RestHighLevelClient连接、创建索引和文档操作,以及全文检索查询。此外,还涉及高级查询、性能优化和故障排查,帮助开发者高效处理非结构化数据。
74 0
|
7月前
|
数据采集 存储 运维
如何使用SkyWalking收集分析分布式系统的追踪数据
通过以上步骤,你可以使用 SkyWalking 工具实现对分布式系统的数据采集和可视化。SkyWalking 提供了强大的追踪和度量功能,帮助开发者和运维人员更好地理解系统的性能状况。欢迎关注威哥爱编程,一起学习成长。
160 0
|
7月前
|
前端开发 JavaScript 算法
分布式系统的一致性级别划分及Zookeeper一致性级别分析
分布式系统的一致性级别划分及Zookeeper一致性级别分析
|
7月前
|
缓存 监控 负载均衡
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
132 2