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

jopen 10年前

etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeperDoozer,它使用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)
  • 安全: 可选的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的使用和安装读者可以参考官方文档

来自:InfoQ