etcd 是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。etcd 的灵感来自于 ZooKeeper 和 Doozer,侧重于:ios
简单:支持 curl 方式的用户 API (HTTP+JSON)git
安全:可选 SSL 客户端证书认证github
快速:单实例可达每秒 1000 次写操做算法
可靠:使用 Raft 实现分布式apache
Etcd is written in Go and uses the raft consensus algorithm to manage a highly-available replicated log.安全
etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并经过Raft一致性算法处 理日志复制以保证强一致性。Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft经过选举的方式来实现一致性,在 Raft中,任何一个节点均可能成为Leader。Google的容器集群管理系统Kubernetes、开源PaaS平台Cloud Foundry和CoreOS的Fleet都普遍使用了etcd。网络
在分布式系统中,如何管理节点间的状态一直是一个难题,etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失效、数据改变监视、多 值、目录监听、分布式锁原子操做等功能,能够方便的跟踪并管理集群节点的状态。etcd目前的版本是0.4.5,虽然未发布1.0版本(今年会发布),但 其已经使用在多个生产系统中,可见其火热程度。etcd的特性以下:框架
简单: curl可访问的用户的API(HTTP+JSON)curl
安全: 可选的SSL客户端证书认证分布式
快速: 单实例每秒 1000 次写操做
可靠: 使用Raft保证一致性
etcd是CoreOS的核心组件,负责节点间的服务发现和配置共享,运行在CoreOS中的应用能够经过etcd读取或者写入数据。虽然etcd是为CoreOS而设计,但其能够运行在多个平台上,包括 OS X、Linux、BSD。
Jason Wilder的一篇博客对常见的服务发现开源项目Zookeeper、Doozer、etcd进行了介绍:
Zookeeper是一个用户维护配置信息、命名、分布式同步以及分组服务的集中式服务框架,它使用Java语言编写,经过Zab协议来保证节点的一致性。由于Zookeeper是一个CP型系统,因此当网络分区问题发生时,系统就不能注册或查找服务。
Doozer是一个一致性的、分布式存储系统,使用Go语言编写,经过Paxos来保证强一致性,Doozer项目目前已经中止更新并有将近160个分支。和Zookeeper同样,Doozer也是一个CP型系统,在网络分区问题发生时,会有一样的问题。
etcd是一个用于共享配置和服务发现的高可用的键值存储系统,使用Go语言编写,经过Raft来保证一致性,有基于HTTP+JSON的API接口。etcd也是一个强一致性系统,可是etcd彷佛支持从non-leaders中读取数据以提升可用性;另外,写操做仍然须要leader的支持,因此在网络分区时,写操做仍可能失败。
目前有不少支持etcd的库和工具,好比命令行客户端工具etcdctl、Go客户端go-etcd、Java客户端jetcd。关于etcd的使用和安装读者能够参考官方文档。