Go 并发编程实战课
晁岳攀(鸟窝)
前微博技术专家,知名微服务框架 rpcx 作者
25635 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 22 讲
Go 并发编程实战课
15
15
1.0x
00:00/00:00
登录|注册

19 | 在分布式环境中,Leader选举、互斥锁和读写锁该如何实现?

Mutex
Locker
监控
查询
选举
读写锁
互斥锁
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
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 鸟窝
    置顶
    这一讲和下一讲的代码在 https://github.com/smallnest/distributed
    2020-11-25
    1
    9
  • K菌无惨
    老师, Locker是超时解锁是通过NewSession时添加WithTTL这个SessionOption来设置的吗

    作者回复: 对

    2021-01-23
    1
  • gone with the wind
    module 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-10
    8
  • 那时刻
    关于思考题, 如果持有互斥锁或者读写锁的节点意外宕机了,从调用接口来看,与当前节点启动的session有关系,节点宕机之后,感觉应该有与该session相关的处理,比如超时机制,所以它持有的锁会被释放。 etcd 提供的读写锁,按照rwmutex的实现写锁应该比读锁优先级高,但是在分布式环境下,如此实现的话,我想会增加复杂度和出问题的几率。
    2020-11-23
    1
  • 文武木子
    Redis实现分布式锁大家用的多吗
    2022-03-20
  • myrfy
    还没来得及去看etcd库的代码,盲猜一下。 第一个问题,我觉得要看场景,如果被锁住的资源可以被重新分配,我相信etcd能检测到持有锁的节点断开,concurrent包里应该有相关的实现把锁释放。但是,如果被锁住的资源非常重要,影响到整个系统的状态,必须要人工介入才能把破损的数据修复,那这个时候自动释放锁反而可能完成更大规模的损失。 第二个问题,还是得去看代码再说
    2020-11-23
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部