19 | 在分布式环境中,Leader选举、互斥锁和读写锁该如何实现?
晁岳攀
该思维导图由 AI 生成,仅供参考
你好,我是鸟窝。
在前面的课程里,我们学习的并发原语都是在进程内使用的,也就是我们常见的一个运行程序为了控制共享资源、实现任务编排和进行消息传递而提供的控制类型。在接下来的这两节课里,我要讲的是几个分布式的并发原语,它们控制的资源或编排的任务分布在不同进程、不同机器上。
分布式的并发原语实现更加复杂,因为在分布式环境中,网络状况、服务状态都是不可控的。不过还好有相应的软件系统去做这些事情。这些软件系统会专门去处理这些节点之间的协调和异常情况,并且保证数据的一致性。我们要做的就是在它们的基础上实现我们的业务。
常用来做协调工作的软件系统是 Zookeeper、etcd、Consul 之类的软件,Zookeeper 为 Java 生态群提供了丰富的分布式并发原语(通过 Curator 库),但是缺少 Go 相关的并发原语库。Consul 在提供分布式并发原语这件事儿上不是很积极,而 etcd 就提供了非常好的分布式并发原语,比如分布式互斥锁、分布式读写锁、Leader 选举,等等。所以,今天,我就以 etcd 为基础,给你介绍几种分布式并发原语。
既然我们依赖 etcd,那么,在生产环境中要有一个 etcd 集群,而且应该保证这个 etcd 集群是 7*24 工作的。在学习过程中,你可以使用一个 etcd 节点进行测试。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
在分布式环境中,使用etcd实现Leader选举、互斥锁和读写锁是至关重要的。本文详细介绍了如何利用etcd基础服务实现这些并发原语。首先,文章强调了Leader选举的重要性,并提供了使用etcd实现Leader选举的方法,包括选举、查询和监控Leader变动等功能。接着,文章详细介绍了如何使用etcd的分布式锁来实现互斥锁和读写锁,并提供了相关的代码示例。通过这些内容,读者可以学习到在分布式环境中实现Leader选举、互斥锁和读写锁的实用方法和技巧。 此外,文章还介绍了etcd提供的分布式并发原语,包括互斥锁和读写锁的实现方法。通过示例代码展示了如何使用etcd的分布式锁来实现选主、设置新值、重新选主和查询主的信息等功能。文章还提到了分布式读写锁的应用场景和使用方法,以及如何在分布式环境中利用etcd提供的分布式读写锁来保护共享资源。 总的来说,本文通过介绍etcd在分布式环境中的应用,为读者提供了实现分布式并发原语的方法和技巧。读者可以通过本文了解到如何利用etcd提供的功能来处理分布式场景下的并发问题,从而更好地应对分布式环境中的挑战。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 并发编程实战课》,新⼈⾸单¥59
《Go 并发编程实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(9)
- 最新
- 精选
- 鸟窝置顶这一讲和下一讲的代码在 https://github.com/smallnest/distributed2020-11-2519
- K菌无惨老师, Locker是超时解锁是通过NewSession时添加WithTTL这个SessionOption来设置的吗
作者回复: 对
2021-01-231 - gone with the windmodule declares its path as: go.etcd.io/bbolt but was required as: github.com/coreos/bbolt 例子现在运行不起来了
作者回复: 看最新的代码https://github.com/smallnest/distributed
2023-04-01归属地:广东 - tianfeiyu老师,问一下您这边有用过 redis 相关的分布式的并发原语库吗
作者回复: redis最常用的就是分布式锁
2021-08-04 - types关于leader选举,几个问题: 1. 如何获取从节点的信息?? 2. leader选举成功后, resign是只有主节点可以发起吗,还是从节点也可以发起resign
作者回复: 我认为你这里的说的主节点和从节点,leader指的都是应用程序的,而不是etcd的。 1.没办法获取,分布式锁不负责这个职责。你可以通过etcd的节点实现,这也是服务发现实现的逻辑 2.主节点
2021-07-02 - Kepler类似zookeeper 的分布式锁原理,节点宕机对应session 销毁,持有的锁会被释放2020-12-108
- 那时刻关于思考题, 如果持有互斥锁或者读写锁的节点意外宕机了,从调用接口来看,与当前节点启动的session有关系,节点宕机之后,感觉应该有与该session相关的处理,比如超时机制,所以它持有的锁会被释放。 etcd 提供的读写锁,按照rwmutex的实现写锁应该比读锁优先级高,但是在分布式环境下,如此实现的话,我想会增加复杂度和出问题的几率。2020-11-231
- 文武木子Redis实现分布式锁大家用的多吗2022-03-20
- myrfy还没来得及去看etcd库的代码,盲猜一下。 第一个问题,我觉得要看场景,如果被锁住的资源可以被重新分配,我相信etcd能检测到持有锁的节点断开,concurrent包里应该有相关的实现把锁释放。但是,如果被锁住的资源非常重要,影响到整个系统的状态,必须要人工介入才能把破损的数据修复,那这个时候自动释放锁反而可能完成更大规模的损失。 第二个问题,还是得去看代码再说2020-11-23
收起评论