[原]etcd系统简介

标签: | 发表时间:2016-03-17 23:05 | 作者:GreatElite
出处:http://blog.csdn.net/greatelite

初识etcd

etcd是一个分布式可靠的键值存储系统。它提供了与ZooKeeper相似的功能,但是使用Go语言编写而不是Java语言。Etcd使用Raft协调算法而不是ZooKeeper采用的Paxos算法。在云计算方面,Go是一个大有前景的语言,被誉为云时代的C语言。

对比与ZooKeeper,etcd更轻量级,etc更加关注一下几点:

l简单:curl命令可以调用的API接口(http+JSON)

l保密:可选的SSL客户端认证

l快速:标准检测每个实例每秒1000读写能力

l可靠:恰到地实现分布式协调,采用Raft一致性算法


etcd虽然是一个很年轻的项目,但是,已经在CoreOS、Kubernetes和CloudFoundry等知名厂商的生产环境中广泛使用。足见etcd具有一定得发展前景。如果你偏向使用成熟的Java客户端去调用etcd,有几个Java客户端库提供选择。

    ​1. [boonproject/etcd]( https://github.com/boonproject/boon/blob/master/etcd/README.md) 支持etcd v2,Async/Sync和waits

    ​2.  [justinsb/jetcd]( https://github.com/justinsb/jetcd

或者[diwakergupta/jetcd]( https://github.com/diwakergupta/jetcd)支持etcd v2

    ​3. [jurmous/etcd4j]( https://github.com/jurmous/etcd4j) 支持etcd v2, Async/Sync, waits 和 SSL。

如果你关注高性能,比较喜欢Go语言技术栈。有两个Go语言的客户端库提供选择:

    ​A. [etcd/client]( https://github.com/coreos/etcd/blob/master/client) 官方维护的Go语言客户端

    ​B.  [go-etcd]( https://github.com/coreos/go-etcd) 官方客户端,可能更适合etcd早期版本(< 2.0.0)


etcd架构

从etcd的架构图中我们可以看到,etcd主要分为四个部分。

  • HTTP Server: 用于处理用户发送的API请求以及其它etcd节点的同步与心跳信息请求。

  • Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现。

  • Raft:Raft强一致性算法的具体实现,是etcd的核心。

  • WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存储的具体日志内容。

通常,一个用户的请求发送过来,会经由HTTP Server转发给Store进行具体的事务处理,如果涉及到节点的修改,则交给Raft模块进行状态的变更、日志的记录,然后再同步给别的etcd节点以确认数据提交,最后进行数据的提交,再次同步。


应用场景

Etcd的应用场景包括服务发现(Service Discovery)、消息发布与订阅、负载均衡、分布式通知与协调、分布式锁、分布式队列。如果你属性ZooKeeper, 你会发现etcd实现了ZooKeeper的功能。

  • 服务发现:服务发现就是在一个分布式集群中,如何发现服务端并建立连接。即,发现对应服务的IP和端口,建立连接而已。



  • 消息发布与订阅:在构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息订阅者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新。

  • 负载均衡:分布式系统中,为了保证服务的高可用以及数据的一致性,通常都会把应用节点部署多分,以此达到对等服务,即使其中的某一个服务失效了,也不影响使用。因为每个对等服务节点上都存有完整的服务功能,利用合理的负载均衡策略,访问流量就可以分流到不同的机器上。

  • 分布式通知与协调:这个功能与消息发布和订阅有些相似,但是,也有一定得区别。它们都用到了etcd中的Watcher机制,通过注册与异步通知机制,实现分布式环境下不同系统或者模块之间的通知与协调,从而对数据变更做到实时处理。不同系统都在etcd上对同一个目录进行注册,同时设置Watcher观测该目录的变化。只要某个系统更新了etcd的目录,其它设置了Watcher的系统就会收到通知,并作出相应处理。

  • 分布式锁:etcd采用Raft算法保证数据的强一致性,某次操作存储到集群中的值必然是全局一致的,所以很容易实现分布式锁。锁服务有两种使用方式,一是保持独占,二是控制时序。

  • 分布式队列:创建一个先进先出的队列,保证顺序。另一种比较有意思的实现是在保证队列达到某个条件时再统一按顺序执行。



欢迎关注我的微信公众号 
weixing




  • 作者:GreatElite 发表于2016/3/17 15:05:06 原文链接
    阅读:7 评论:0 查看评论

    相关 [etcd 系统 简介] 推荐:

    [原]etcd系统简介

    - - 用心做事
    etcd是一个分布式可靠的键值存储系统. 它提供了与ZooKeeper相似的功能,但是使用Go语言编写而不是Java语言. Etcd使用Raft协调算法而不是ZooKeeper采用的Paxos算法. 在云计算方面,Go是一个大有前景的语言,被誉为云时代的C语言. 对比与ZooKeeper,etcd更轻量级,etc更加关注一下几点:.

    [转]consul VS zookeeper、etcd、doozerd

    - - Xiao_Qiang_的专栏
      zookeeper、doozerd、etcd都有着相似的架构,这三者的服务节点都需要一个仲裁节点来操作,它们是强一致的,并提供各种操作原语. 应用程序可以通过客户端lib库来构建分布式的系统. 在一个单datacenter中,consul的server节点工作在一种简单的方式下,consul server需要一个仲裁操作,并提供强一致性.

    服务发现:Zookeeper vs etcd vs Consul

    - - 企业架构 - ITeye博客
    服务发现:Zookeeper vs etcd vs Consul. 【编者的话】本文对比了Zookeeper、etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考. 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务监听同一个端口. 管理一个拥挤的比方说被几百个服务所使用的所有端口的列表,本身就是一个挑战,添加到该列表后,这些服务需要的数据库和数量会日益增多.

    分布式配置服务etcd VS 分布式协调服务zookeeper

    - - 操作系统 - ITeye博客
    etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现. etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性. Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性,在Raft中,任何一个节点都可能成为Leader.

    OpenStack、CloudStack、Eucalyptus、vCloud Director等主流云管理系统简介

    - - 服务器运维与网站架构|Linux运维|X研究
    软件产品开发公司Altoros Systems的IT基础设施设计师Vadim Truksha在美国《网络世界》上发表一篇文章,详细对比了CloudStack、Eucalyptus、vCloud Director和OpenStack等四个云平台. 考虑到云计算有极大的潜力提高效率,显著节省成本,实现可升级的基础设施和高性能以及安全的数据存储,云计算仍然是目前IT领域最热门的话题之一.

    [转]mahout in action 中文翻译 第2章 推荐系统简介

    - - 小鸥的博客
    评价一个引擎的准确率和召回率. 在真实数据集:GroupLens 上评价推荐系统. 我们每天都会对喜欢的、不喜欢的、甚至不关心的事情有很多观点. 你在收音机上听歌,因为它容易记住或者因为听起来可怕而关注它 -- 又或者根本不去关注它. 同样的事情有可能发生在T恤衫,色拉,发型,滑雪胜地,面孔,电视节目.

    分布式全文检索系统SolrCloud简介

    - - UC技术博客
    本文简单描述SolrCloud的特性,基本结构和入门,基于Solr4.5版本. Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库. Solr是以Lucene为基础实现的文本检索应用服务. SolrCloud是Solr4.0版本开发出的具有开创意义的基于Solr和Zookeeper的分布式搜索方案,或者可以说,SolrCloud是Solr的一种部署方式.

    开源日志系统简介——Scribe,flume,kafka,Chukwa

    - - 互联网 - ITeye博客
    许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:. (1) 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦;. (2) 支持近实时的在线分析系统和类似于Hadoop之类的离线分析系统;. 即:当数据量增加时,可以通过增加节点进行水平扩展.

    LBM智能停车场管理系统简介

    - - ITeye博客
    随着汽车的广泛普及,停车场管理也面临越来越多的问题,传统的停车场管理效率低下,营运性、增殖性不突出,场内的空位很难寻找,停车无引导系统,盲目且耗油,停车场规模大时寻车困难等等,停车场厂商需要革新思路,采用更先进的技术和服务来提升竞争力,物联网技术给停车场行业带来了新的增长点与发展机遇. LBM智能停车场管理系统利用传感器节点监控并反馈每个停车位的状态,为车主提供人性化的引导服务,提高停出车效率,降低管理成本.

    分布式系统的一致性算法简介

    - - 互联网 - ITeye博客
    在分布式系统中,我们经常遇到多数据副本保持一致的问题,在我们所能找到的资料中该问题讲的很笼统,模模糊糊的,把多个问题或分类糅合在一起,难以理解. 在思考和翻阅资料后,通俗地把一致性的问题可分解为2个问题:. 1、任何一次修改保证数据一致性. 2、多次数据修改的一致性. 在弱一致性的算法,不要求每次修改的内容在修改后多副本的内容是一致的,对问题1的解决比较宽松,更多解决问题2,该类算法追求每次修改的高度并发性,减少多副本之间修改的关联性,以获得更好的并发性能.