猜你喜欢
etcd技术内幕

etcd技术内幕

书籍作者:百里燊 ISBN:9787121343865
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:2993
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书主要从源码角度深入剖析etcd:

l etcd的背景知识,如何搭建源码环境及相关命令

l Raft协议的背景,如何处理各种异常场景及相关扩展

l etcd-raft模块对Raft协议的实现,etcd自带的raftexample示例

l HTTP编程基础,etcd-rafthttp模块的工作原理和具体实现


作者简介

百里燊,硕士研究生,小时候想成为闯荡江湖的侠客,结果着迷于各种代码,最终沦为辛勤工作的程序猿。期待与大家交流。

邮箱:[email protected]


前言

前  言



etcd是一个可靠的分布式KV存储,其底层使用Raft算法保证一致性,主要用于共享配置和服务发现。etcd是CoreOS公司发起的一个开源项目,其源代码地址为https://github.com/ coreos/etcd。

目前提供配置共享和服务发现功能的组件还是比较多的,其中应用最广泛、大家最熟悉的应该就是ZooKeeper了,很多开源项目都在不同程度上依赖了ZooKeeper,例如,Dubbo、Kafka。在Golang社区中,etcd是唯一一个可以媲美ZooKeeper的组件,在有些方面,etcd甚至超越了ZooKeeper,给开发者眼前一亮的感觉。

etcd作为一个优秀的分布式KV存储产品,其底层的etcd-raft模块实现了Raft协议,可以帮助开发者快速实现最终一致性功能。etcd以其高性能、易维护、Raft实现等优点,受到越来越多的开发人员的青睐,在Golang社区中声名大噪。

etcd的代码中有很多亮点,为了提高整体性能,其实现中使用了大量的goroutine和Channel。etcd 3 中开始使用BoltDB作为底层的持久存储,使用BTree索引加速查询,还提供了可靠的Watcher功能,同时提供了基于GRPC的新版本客户端。当然,etcd 3依然兼容etcd 2的内存存储和HTTP API。

etcd 3中有很多令人称赞的功能和优秀的设计,但至今还没有深入剖析etcd 3的内部设计和实现细节的图书,本书以etcd 3为基础,详细分析了etcd的架构设计和实现细节,其中穿插介绍了etcd源码中涉及的基础知识,以及笔者在实践中的思考。

如何阅读本书

由于篇幅限制,本书并没有详细介绍Go语言的基础知识,但为了便于理解读者理解etcd的设计思想和实现细节,笔者介绍了一些必需且重要的基础内容,例如,Go语言提供的HTTP功能。

本书共8章,主要从源码角度深入剖析etcd的原理和实现。建议读者先阅读前两章,了解Raft协议之后,再开始学习etcd的工作原理和代码实现。

第1章简要介绍etcd的背景知识及其基本的数据模型,然后介绍如何搭建源码环境及相关的命令。

第2章从基本的Raft协议开始介绍,帮助读者了解Raft协议的背景知识、大致工作原理、如何处理各种异常场景,以及几个比较重要的扩展点。

第3章着重分析etcd中的raft模块对Raft协议的实现,etcd-raft模块是etcd的核心模块之一,GitHub上很多其他项目直接使用etcd-raft模块作为其Raft协议的底层实现。同时,本章也介绍了etcd自带的raftexample示例,帮助读者了解etcd-raft模块的基本使用方法,方便读者在实践中直接使用etcd-raft模块。

第4章简单介绍HTTP编程基础,以及etcd-rafthttp模块的工作原理和具体实现,其中涉及RoundTripper的基本原理、rafthttp.Transporter的实现及多种Handler的实现。

第5章介绍etcd中如何处理WAL日志文件和快照数据文件,其中分析了WAL结构体和Snapshotter的具体实现。

第6章详细分析etcd的底层存储,对etcd v2和etcd v3两个版本的存储都做了详细的介绍,不仅分析了底层的KV存储,还分析了watcher机制和Lessor的实现原理。

第7章重点介绍etcd服务端的内容,etcd服务端会组装并协调前面介绍的各个组件,并且在它们的基础上扩展出了更多的功能。

第8章主要介绍etcd客户端的相关内容,详细分析了v2和v3两个版本客户端的具体实现。

如果读者在阅读本书的过程中,发现任何不妥之处,请将您宝贵的意见和建议发送到邮箱shen_baili @163.com,也欢迎读者朋友通过此邮箱与我进行交流。

致谢

感谢我的母亲,谢谢您的付出和牺牲!

感谢白酱陪我看过一盏盏亮起的路灯,感谢三十在技术上提供的帮助。

感谢电子工业出版社博文视点的陈晓猛老师,是您的辛勤工作让本书的出版成为可能。同时还要感谢许多我不知道名字的幕后工作人员为本书付出的努力。


百里燊


目录

目  录



第1章 etcd入门

1.1 etcd简介

1.2 数据模型

1.3 环境搭建

1.3.1 环境变量

1.3.2 代码结构

1.3.3 运行

本章小结

第2章 Raft协议

2.1 Leader选举

2.2 日志复制

2.3 网络分区的场景

2.4 日志压缩与快照

2.5 其他技术点

2.5.1 linearizable语义

2.5.2 只读请求

2.5.3 PreVote状态

2.5.4 Leader节点转移

本章小结

第3章 etcd-raft模块详解

3.1 raft结构体

3.1.1 Config结构体

3.1.2 Storage接口及其实现

3.1.3 unstable结构体

3.1.4 raftLog结构体

3.1.5 raft实现

3.2 Node接口

3.2.1 node结构体

3.2.2 初始化

3.2.3 run()方法

3.2.4 Node接口实现

3.3 raftexample示例分析

3.3.1 raftNode

3.3.2 HTTP服务端

3.3.3 kvstore

本章小结

第4章 网络层

4.1 Go语言网络编程基础

4.1.1 http.Server

4.1.2 RoundTripper

4.2 etcd-rafthttp模块详解

4.2.1 rafthttp.Transporter接口

4.2.2 Peer接口

4.2.3 pipeline

4.2.4 streamWriter实例

4.2.5 streamReader实例

4.2.6 snapshotSender

4.3 Handler实例

4.3.1 pipelineHandler

4.3.2 streamHandler

4.3.3 snapshotHandler

本章小结

第5章 WAL日志与快照

5.1 WAL日志

5.1.1 初始化

5.1.2 打开日志

5.1.3 读取日志

5.1.4 追加日志

5.1.5 文件切换

5.2 SnapShotter

本章小结

第6章 storage

6.1 etcd v2版本存储

6.1.1 node

6.1.2 Event

6.1.3 watcher和watcherHub

6.1.4 store

6.2 etcd v3版本存储

6.2.1 backend

6.2.2 watcher机制

6.2.3 Lessor

本章小结

第7章 etcd-server详解

7.1 raftNode结构体

7.2 RaftCluster

7.3 EtcdServer

7.3.1 初始化

7.3.2 注册Handler

7.3.3 启动

7.4 ApplierV2和applierV3

7.4.1 ApplierV2

7.4.2 applierV3

7.5 AlarmStore

本章小结

第8章 etcd客户端详解

8.1 GRPC基础

8.1.1 定义proto文件

8.1.2 服务端

8.1.3 创建客户端

8.2 Client v3

8.2.1 kvServer

8.2.2 EtcdServer

8.2.3 Client

8.3 Client v2

8.3.1 KeysAPI接口

8.3.2 httpClient接口

本章小结

参考文献


短评

写的不错,代码分析略多,架构介绍略少,不过也算良心了。

2018-07-24

我觉得写的不错,分析的挺详细的

2018-07-24

标签
etcd,分布式存储,raft协议,raft
产品特色