美文网首页
1.etcd源码笔记 - 写在最前

1.etcd源码笔记 - 写在最前

作者: 兰CC | 来源:发表于2019-08-07 15:08 被阅读0次

一、准备工作

1. 下载源码

需要注意的是 ETCD 地址迁移之后,项目内的包名并未更名,

随便翻开一个源码文件的 import 部分,项目内部的引用路径写的还是旧的

import (
    ...
    "github.com/coreos/etcd/lease"
    ...
)

常规操作是会把该源码下载到 $GOPATH/src/github/etcd-io/etcd

如此操作,项目的内部引用应该是 github.com/etcd-io/etcd/lease ,才得搜得到正确引用。

但由于源码文件的 import 仍引用旧包名,所以实际下载后,项目内引用是会失败的。

有如下三种方式可以解决这个问题,

  • 改源码 - emmm....谁改谁S....B。
  • 源码直接下载到 $GOPATH/src/github/coreos/etcd,就没有这个烦恼了。
  • 创建一个软链
$GOPATH
   ├── bin
   ├── pkg
   ├── src
   │   ├── github
   │   │   └── etcd-io (源码下载的落地目录)
   │   │   └── coreos (软链,链接到上面 etcd-io)

2. 选择分支

选一个稳定版本即可,目前最新发布的是 3.3,就选择这个分支吧。

3. 下载依赖

用的是 glide 进行依赖管理,那就装个,然后 glide install 一下即可。

(go项目最头大的就是有很多依赖需要翻墙,好在我厂网络自带翻墙,给网络小哥哥比心。)

分支切到 release-3.3,会发现有个 grpc 的依赖有问题,需要打开 glide.yaml 添加之,

- package: github.com/grpc-ecosystem/go-grpc-middleware
  version: v1.0.0

然后 glide up 更新 glide.lock 文件,再 glide install 重新安装依赖。

4. 选择 debug 工具

一开始在 gdbdelve 两者之间选择。

本来要选择后者了,毕竟后者确实强大很多。

后来发现,常用的 intellj 自带的工具还不错,就放弃 delve 了。毕竟是要阅读源码,在控制台切来切去的,可读性差。

二、阅读路径

1. 了解功能

了解一个系统,当时得 由外及里,由简及繁

所以肯定得把 ETCD 是神马,以及提供的所有功能都轮一篇啦,至于怎么轮,就自由发挥吧。

2. 了解 raft

etcd 的亮点在于 使用 raft 协议解决了分布式一致性的问题,所以这个也是作为阅读代码前的基础。

3. 轮廓

笔者在厂里的工作有一部分是中间件开发,一个完整的中间件工程有以下几个部分,

  • 协议处理 - 解析处理整个中间件使用到的协议,一般该协议在前期讨论确定,当然,也可以没有,非必备品。
  • 协议demo - 如果有协议,为了方便对协议的了解及验证,会搞一个简单的demo。
  • 核心功能 - 中间件本身需要处理的功能业务相关操作。
  • 交互API - 中间件与外系统进行交互的API,比如http接口、grpc。
  • 工具 - 包括运维工具、管理工具,具体如启动、停止服务、排查服务状态的工具等等。
  • 文档 - 七七八八的介绍文档

粗略看了一下,ETCD 也基本上遵循了以上的项目结构,

  • 协议处理 - etcd/raft,封装了一个 raft library
  • 协议demo - etcd/contrib/raftexample, 这是一个比较简单的demo。
  • 核心功能 - 这个比较杂,后续再介绍。
  • 交互API - etcd/etcdserver/api/v3rpc,API 历史有比较多的变迁,现在最新是使用 v3
  • 工具 - etcd/etcdctl,有v2,v3两个版本,现在最新是使用 v3
  • 文档 - 分散在各个包。

综上所述,我们最好的方式是先了解 raft libraryraft demo,再了解 核心功能

相关文章

  • 1.etcd源码笔记 - 写在最前

    一、准备工作 1. 下载源码 https://github.com/coreos/etcd - 旧地址,访问时会自...

  • Android源码初探之视图窗口层级关系

    写在最前面 Android源码初探 —— 初次相遇,便无法自拔!以下源码均源于 Android API 24 结论...

  • Android 开发艺术探索笔记之八 -- 理解 Window

    写在最前:本文涉及到源码的部分,查看的是 Android 8.1.0_r33 的源码,部分与原文中代码有出入。 ...

  • 写在最前

    我的工作是高校辅导员,就是听起来高尚的不得了,所有人都以为每天没什么屁事的工作。在我来之前,我也是这么想的,每天没...

  • 写在最前

    鉴于博客又已经没落,并且本人喜欢分享,吐槽或者碎碎念,所以一定找个地方写写画画(反正又不要钱或者不花钱)朋友圈感觉...

  • 写在最前

    开此简书,励志为做一个专业有趣的游戏设计者而准备足够的精神食粮。 自我反省,自我鼓励,在成为专业游戏人的道路上,不...

  • 写在最前

    开这个博客的意义: 学习Swift的一些感悟,记录一下; 工作中完成的一些非主流的需求,分享出来; 怕自己沉迷游戏...

  • 写在最前

    现在是2017/4/19 10:33 这是一个输出的前沿flag,用于记录

  • 写在最前

    古人有云:“不积跬步无以至千里,不积小流无以成江海”任何事情的发展都不可能是一步到位的,必然都是积累量变直至引发质...

  • 写在最前

    没什么宏图大志,这个世界本就不是我的世界。没有那种能力,翻手为云覆手为雨,但也不喜欢被操控。写不下豪言壮语,也就每...

网友评论

      本文标题:1.etcd源码笔记 - 写在最前

      本文链接:https://www.haomeiwen.com/subject/tuwodctx.html