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

42|他山之石:etcd架构之美

你好,我是郑建勋。
这节课,我们来聊一聊我们将在分布式项目中使用的重要中间件:etcd。
etcd 这个名字是 etc distributed 的缩写。我们知道,在 Linux 中 etc 目录存储了系统的配置文件,所以 etcd 代表了分布式的配置中心系统。然而,它能够实现的功能远不是同步配置文件这么简单。etcd 可以作为分布式协调的组件帮助我们实现分布式系统。
使用 etcd 的重要项目包括了 CoreOS 与 Kubernetes。etcd 使用 Go 书写,底层使用了 Raft 协议,它的架构本身非常优美。这节课就让我们来看一看 etcd 的架构、核心特性和实现机制,这样我们才能利用 etcd 更好地完成分布式协调工作,领会这个优秀的开源组件的设计哲学。同时,掌握 etcd 也有助于我们更深入地了解 Kubernetes 的运行机制。

etcd 全局架构

etcd 的第一个版本 v0.1 于 2013 年发布,现在已经更新到了 v3,在这个过程中,etcd 的稳定性、扩展性、性能都在不断提升。我们这节课主要讨论的是当前最新的 v3 版本。话不多说,我们先来从整体上看一看 etcd 的架构。
etcd 从大的方面可以分为几个部分,让我们结合图片从右往左说起。
首先 etcd 抽象出了 raft-http 模块,由于 etcd 通常为分布式集群部署方式,该层用于处理和其他 etcd 节点的网络通信。etcd 内部使用了 HTTP 协议来进行通信,由于 etcd 中的消息类型很多,心跳探活的数据量较小,快照信息较大(可达 GB 级别),所以 etcd 有两种处理消息的通道,分别是 Pipeline 消息通道与 Stream 消息通道。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

etcd架构设计精巧,功能丰富,为分布式系统提供强大支持。其高内聚、低耦合、高性能的特点值得借鉴。通过Go语言编写,底层使用Raft协议,通过HTTP协议进行通信。etcd-raft模块实现了Raft协议,确保分布式系统的一致性与故障容错性。etcd还提供了客户端工具etcdctl和clientv3代码库,使用GRPC协议与etcd服务器交互。文章介绍了etcd的架构优点,包括高内聚、低耦合、优雅的数据同步、更快的读取性能、可靠的Watch机制与高性能的并发处理。etcd的代码实践了CSP的编程模式,大量使用了协程与通道的机制来进行通信,对超时的处理、资源的释放、并发的处理都比较优雅。总之,etcd是一个值得深入学习的分布式键值存储系统。

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

全部留言(1)

  • 最新
  • 精选
  • Realm
    思考题: 1. MVCC(Multi-Version Concurrency Control),即多版本并发控制。MVCC 是一种并发控制的方法,可以实现对数据库的并发访问。 2. MySQL的MVCC工作在RC(读提交)和RR(重复读)的隔离级别。 表的行记录逻辑上是一个链表,既保留业务数据本身,还有两个隐藏字段: - trx_id(最近修改的事务ID) - roll_ptr(指向上一个版本数据的指针,通过undo log可以实现从高版本到低版本的迁跃) 3. ETCD的MVCC同样可以维护一个数据(key对应的值)的多个历史版本,且使得读写操作没有冲突,不使用锁,增加系统吞吐。 4. 窥探etcd对同一个key进行修改,内部版本的变化 ``` > docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcdctl put a 1 " OK > docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcdctl get a -w=json" {"header":{"cluster_id":18011104697467366872,"member_id":6460912315094810421,"revision":22,"raft_term":3},"kvs":[{"key":"YQ==","create_revision":22,"mod_revision":22,"version":1,"value":"MQ=="}],"count":1} > docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcdctl put a 2 " OK > docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcdctl get a -w=json" {"header":{"cluster_id":18011104697467366872,"member_id":6460912315094810421,"revision":23,"raft_term":3},"kvs":[{"key":"YQ==","create_revision":22,"mod_revision":23,"version":2,"value":"Mg=="}],"count":1} > docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcdctl put a 3 " OK > docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcdctl get a -w=json" {"header":{"cluster_id":18011104697467366872,"member_id":6460912315094810421,"revision":24,"raft_term":3},"kvs":[{"key":"YQ==","create_revision":22,"mod_revision":24,"version":3,"value":"Mw=="}],"count":1} ```
    2023-01-14归属地:浙江
    2
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部