Go 进阶 · 分布式爬虫实战
郑建勋
Go 语言技术专家,《Go 语言底层原理剖析》作者
15839 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 58 讲
Go 进阶 · 分布式爬虫实战
15
15
1.0x
00:00/00:00
登录|注册

43|分布式协调:etcd读写、MVCC原理与监听机制

你好,我是郑建勋。
这节课,我们重点来看看 etcd 的读写流程,以及它的两个重要特性:MVCC 原理和监听机制。

写的完整流程

我们先来看看 etcd 怎么完整地写入请求。
客户端通过 GRPC 协议访问 etcd-server 服务端。
如果是一个写请求,会访问 etcd-server 注册的 Put 方法。要注意的是,在访问 etcd-server 时,会进行一些检查,例如 DB 配额(Quota)的检查。此外,如果客户端访问的节点不是 Leader 节点,这个节点会将请求转移到 Leader 中。
etcd-server 会调用 raft-node 模块的 Propose 方法进行限速、鉴权等判断,之后 raft-node 模块调用 etcd-raft 模块完成数据的封装。
接着,etcd-raft 模块会将封装后的数据返回给 raft-node 模块。
raft-node 模块调用 storage 存储模块,将本次操作对应的 Entry 记录存储到 WAL 日志文件当中。
raft-node 模块将当前 Entry 广播给集群中的其他节点,snap 模块还会在适当时候保存当前数据的快照。
当 Leader 最终收到了半数以上节点的确认时,该 Entry 的状态会变为 committed ,这时 etcd-raft 模块会将 Commit Index 返回上游,供 etcd-server 模块执行。后面我们还会看到,etcd-server 实现了 MVCC 机制,维护了某一个 Key 过去所有的版本记录。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

etcd技术内幕:深入探讨分布式协调服务 本文深入探讨了etcd的核心技术特点,包括读写流程、MVCC原理和监听机制。在写入流程中,客户端通过GRPC协议访问etcd-server服务端,完成数据的写入和提交。而在读取流程中,客户端通过GRPC API实现线性一致性的读取请求。文章详细介绍了etcd的MVCC机制,包括版本号的结构和存储方式,以及如何通过MVCC实现乐观锁机制。此外,文章还阐述了etcd的Watch机制,包括服务器端如何维护和处理watcher,以及如何实现事件的同步和追赶。 在处理unsynced watcher时,etcd采用了一种巧妙的方法,通过范围查询和转换键值对为Event事件来处理大量watcher。而在处理synced watcher时,etcd使用哈希表和区间树结构高效地获取监听的watcher集合,并完成最新事件的推送。 总结来说,etcd实现了一致性、容错性和高性能,依靠核心模块如GRPC请求、权限和参数的检查、WAL日志的存储、Raft节点的网络协调以及执行操作更新状态机的状态。MVCC机制提高了系统的并发处理能力,为构建可靠的Watch机制和事务提供了基础。etcd还通过初始化时建立的单独协程处理unsynced watcher,轻松应对大量watcher。 本文深入浅出地介绍了etcd的核心技术特点,为读者提供了全面的了解和认识。如果读者希望深入源码学习etcd,推荐阅读《etcd技术内幕》一书,对etcd源码的各个字段都介绍得比较详细。 这篇文章对etcd的技术特点进行了深入探讨,为读者提供了全面的了解和认识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • Realm
    思考题: 一 treeIndex 的结构为什么是 B 树而不是哈希表或者是二叉树? 不使用【hash表】的原因: 1. hash表不支持范围查询; 2. hash表可能有hash碰撞的问题(Hash_fn(k1) = Hash_fn(key2),还需要使用其他方法进行进一步处理(如:拉链法); 3. hash表不支持排序; 4. hash表不支持key的前缀索引,prefix=xxx,想必是用不了; 不使用【二叉树】的原因: 1. 二叉树造成树的层次太高,查找的时候,可能造成磁盘IO的次数较多,性能不好. 二 如果这个时候节点崩溃了,如何保证数据不丢失呢? 应该是通过WAL进行保障,先写日志在提交. 这样看,很多思路与MySQL相似.
    2023-01-17归属地:浙江
    1
    2
  • Geek_c3c15b
    怎么又是一整篇理论知识,实战课的重点不是实战吗?极客时间已经有etcd的专栏了
    2023-02-22归属地:浙江
    2
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部