etcd:用于服务发现的键值存储系统

etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeperDoozer,它使用Go语言编写,并经过Raft一致性算法处理日志复制以保证强一致性。Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft经过选举的方式来实现一致性,在Raft中,任何一个节点均可能成为Leader。Google的容器集群管理系统Kubernetes、开源PaaS平台Cloud Foundry和CoreOS的Fleet都普遍使用了etcd。html

在分布式系统中,如何管理节点间的状态一直是一个难题,etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失效、数据改变监视、多值、目录监听、分布式锁原子操做等功能,能够方便的跟踪并管理集群节点的状态。etcd目前的版本是0.4.5,虽然未发布1.0版本(今年会发布),但其已经使用在多个生产系统中,可见其火热程度。etcd的特性以下:ios

  • 简单: curl可访问的用户的API(HTTP+JSON)
  • 安全: 可选的SSL客户端证书认证
  • 快速: 单实例每秒 1000 次写操做
  • 可靠: 使用Raft保证一致性

etcd是CoreOS的核心组件,负责节点间的服务发现和配置共享,运行在CoreOS中的应用能够经过etcd读取或者写入数据。虽然etcd是为CoreOS而设计,但其能够运行在多个平台上,包括 OS X、Linux、BSD。git

Jason Wilder的一篇博客对分别对常见的服务发现开源项目Zookeeper、Doozer、etcd进行了总结介绍:github

Zookeeper是一个用户维护配置信息、命名、分布式同步以及分组服务的集中式服务框架,它使用Java语言编写,经过Zab协议来保证节点的一致性。由于Zookeeper是一个CP型系统,因此当网络分区问题发生时,系统就不能注册或查找服务。算法

Doozer是一个一致性的、分布式存储系统,使用Go语言编写,经过Paxos来保证强一致性,Doozer项目目前已经中止更新并有将近160个分支。和Zookeeper同样,Doozer也是一个CP型系统,在网络分区问题发生时,会有一样的问题。docker

etcd是一个用于共享配置和服务发现的高可用的键值存储系统,使用Go语言编写,经过Raft来保证一致性,有基于HTTP+JSON的API接口。etcd也是一个强一致性系统,可是etcd彷佛支持从non-leaders中读取数据以提升可用性;另外,写操做仍然须要leader的支持,因此在网络分区时,写操做仍可能失败。apache

由于设计思路的不一样,在原生接口和提供服务方式方面,etcd更适合做为集群配置服务器,用来存储集群中的大量数据。方便的REST接口也可让集群中的任意一个节点在使用key value服务时获取方便。zookeeper则更加的适合于提供分布式协调服务,他在实现分布式锁模型方面较etcd要简单的多。因此在实际使用中应该根据自身使用状况来选择相应的服务。目前有不少支持etcd的库和工具,好比命令行客户端工具etcdctl、Go客户端go-etcd、Java客户端jetcd。关于etcd的使用和安装读者能够参考官方文档安全

 

etcd:用于服务发现的键值存储系统服务器

分布式系统一致性问题和Raft一致性算法网络

etcd 2.0——etcd的首个主要稳定版本发布了!

etcd是什么东西?它和ZooKeeper有什么区别?

CoreOS 实战:剖析 etcd

.Net client for etcd

https://github.com/jordansjones/Draft

etcd:Kubernetes和Cloud Foundry之间的那些事

Etcd学习(一)安装和.NETclient測试

Etcd学习(二)集群搭建Clustering

Etcd学习(三)集群搭建Clustering中Leader问题

相关文章
相关标签/搜索