GithubHelp home page GithubHelp logo

etcd-from-arch-to-souce-code's Introduction

前言

从2016年使用Kubernetes时接触到etcd,到如今已有接近三年的时间了。etcd在kubernetes集群中,作为一个核心的存储组件,具有举足轻重的地位。 但是一直以来也没有深入探查过它的内部细节。直到最近,分布式系统,尤其是分布式存储变得越来越热,越来越重要,才静下心来,打算深入探究下etcd的内部细节。

糟糕的是这个过程并不顺利,本来想着可以通过阅读书籍的方式来理解,但找了很久,也没有找到一本结合架构、源码以及使用案例来剖析的书籍,以至于最后不得不翻开etcd源码,一行行阅读etcd的源码,剖析内部实现细节。 经过一段时间的阅读与实践,终于对etcd有了一个全方位的认识,在这里将我获得的这些知识总结出来,希望能够帮助对etcd感兴趣的同学,以及那些对分布式存储,对分布式系统感兴趣的同学。

�在本书中,不仅会介绍etcd原理和应用,而且会花更多的篇幅介绍etcd源码,既然谈到源码,就不得不啰嗦两句其实现语言Go语言,因为etcd是全部用Go语言编写的,是CNCF收录的核心项目之一。 Go语言诞生于2009年,截止今年才刚刚十年的时间。 正如历史上其他一切事物一样,Go也有其自生的梦想与使命,2009年,我自认为不管是在计算机发展史上,还是人类发展史上,都是一个相当重要 的年份。 2008年金融危机爆发,经济下行全球产生信任危机。 从此绝大多数行业开始走向转折,互联网、大数据、云计算行业紧跟时代步伐, 在之后的岁月里,异军突起,开始了草莽式的发展。

正是这样的历史时刻,Go语言作为Google的金宝贝(golden son)在一大批大牛的怀抱中诞生了,诞生之初就自诩为互联网时代的C语言。 然而如今来看,Go语言也确实有这样的潜力,同时也已经在很多领域 占据了一席之地,尤其在云计算领域已经建立了难以撼动的地位。

在写作本书的过程中,为了使代码阅读没那么枯燥,我根据理论与实践结合的方式,由浅入深,由理论到代码实现,再到源码中代码的使用,单元测试以及服务部署等全方位的角度,对etcd进行全面的剖析。 只是希望,后续对etcd感兴趣的同学,想把etcd应用在自己项目中,对Go语言,对分布式系统热爱的同学,都能有所收获。 本书按大的方向来拆分,可以分为三个部分: 理论介绍、源码实战、应用运维。 在组织上,为了能够达到循序渐进,便于理解的目的。我将内容拆分为了以下章节。 第一章介绍分布式系统的一些核心概念,包括分布式系统CAP理论,分布式系统网络通信,分布式存储一致性等一系列的概念。 当然,为了避免文字枯燥的表达,我会尽量采用图表的方式解释。 第二章主要描述etcd本身的架构。 在解析etcd架构的时候,我会结合后续源码,从整体架构到其中每一个组件的核心功能,进行更为深入,细致的拆分。 目的是争取能将整个架构拆解到大家都能实现的地步。 在前两章的基础上,第三章讲解etcd的部署,通过单机以及多机两种部署方式,实际感受下etcd的魅力所在,也为后面的章节做好铺垫。 第四章可以说是最重心的一章。 因为这一章,我们直面go语言,直面etcd源码,通过etcd提供的代码,来利用raft算法实现一个简单版本的分布式kv存储数据库。然后在这个基础上,进一步对etcd进行拆解,直达etcd内部,包括raft协议的实现,mvcc多版本并发控制, 内存B-tree索引,boltdb数据持久化,watch机制,分布式事务等一系列的核心概念。在整个过程中,我会通过将各个模块拆分的方式,讲解每一个模块的用法以及实现。 包括写一个实用的程序代码,以及为各个模块写单元测试。 理解了源码,相信对于etcd的应用案例也就了然于胸了,第五章重点介绍使用案例,包括分布式队列,分布式锁,分布式kv,配置中心等。第六章简单讲解下日常的运维与监控问题, 最后一章作为总结。

相信,在读完本书过后,大家不仅能对etcd有一个较为深入的认识,同时也希望大家能够了分布式系统,了解分布式存储。 更多的将etcd应用到自己的项目中,将etcd发扬广大,将go语言发扬光大。

我从4月份开始,通过对etcd的使用,以及etcd源码的阅读,决定写这样一本书籍。 现在也才刚刚开始,这可能是一个漫长的过程,但是我会坚持每天抽时间,力所能及的更新。

最后,本书使用gitbook编写,源码地址在github上, 如果有想对本书做贡献的同学,也可以通过github进行贡献。

                                                    作者
                                                    2019年4月于上海

etcd-from-arch-to-souce-code's People

Contributors

csunny avatar gitbook-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

etcd-from-arch-to-souce-code's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.