AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

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

  • 2014-07-29
  • 本文字数:1107 字

    阅读完需:约 4 分钟

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)
  • 安全: 可选的 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 中文站投稿或参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-07-29 02:4519613
用户头像

发布了 219 篇内容, 共 147.3 次阅读, 收获喜欢 195 次。

关注

评论

发布
暂无评论
发现更多内容

错过了初恋,别错过WebFlux

稻草鸟人

stream Spring5 WebFlux Reactive

你的团队属于部落的哪个阶段?

Yanel 说敏捷产品

敏捷 敏捷开发 敏捷精髓

如何让团队产生“多米诺骨牌”效应?

Yanel 说敏捷产品

项目管理 敏捷 敏捷开发 敏捷精髓

目光聚集之处,金钱必将追随

Tom

学习 个人成长 思考 读书

Java 为什么需要包装类

Rayjun

Java

ITerm2 + Oh my ZSH + Powerlevel10k

JDoe

配置

医院陪护5天的四点感受

赵新龙

身心健康 医院

如何高效阅读

ElvinYang

接口限流算法有哪些,看完这篇又能和面试官互扯了~

不才陈某

Java 分布式 后端

NIO 看破也说破(三)—— 不同的IO模型

小眼睛聊技术

Java 学习 深度思考 程序员 架构

从技术层面理解对于区块链技术的10.24集体学习讲话

Tux Hu

区块链 智能合约 以太坊 加密货币 去中心化网络

用Go替代Python在生产环境中进行数据分析

良少

人工智能 大数据 数据分析 pandas Go 语言

也谈程序员的核心竞争力

我心依然

学习 程序员 竞争力 独立思考 清晰表达

Try-Catch包裹的代码异常后,竟然导致了产线事务回滚!

牧码哥

Java spring 事务

DDD 实践手册(6. Bounded Context - 限界上下文)

Joshua

企业架构 设计模式 领域驱动设计 DDD 架构模式

你真的懂"看板文化"么?

Yanel 说敏捷产品

敏捷 敏捷开发 敏捷精髓

游戏夜读 | 如何制作互动剧?

game1night

回"疫"录(12):一“罩”难求

小天同学

疫情 回忆录 现实纪录 纪实

Linux学习-2020.05.11

Flychen

工具集系列|值得收藏的几个免费在线学习国外网站

一尘观世界

学习 工具 网站 提升

良好的工作习惯——及时存档、备份

小匚

工作效率

危机过后,「表格文档协同」需要具备什么能力?

葡萄城技术团队

大前端 开发者工具 Excel

Git clone过慢问题

JDoe

git

带你吃透原型设计

Yanel 说敏捷产品

产品 产品经理 产品设计 产品开发 产品推荐

认识数据产品经理(二 数据产品经理的稀缺性)

马踏飞机747

大数据 互联网 数据分析 产品经理

【解析+示例】2种方法,通过SpreadJS在前端实现甘特图

葡萄城技术团队

大前端 甘特图 SpreadJS 表格控件

ShedLock:一个轻量级的定时任务协调组件

kk

定时任务 shedlock

Python程序性能分析和火焰图

ElvinYang

每个人都应该知道的性能参数

ElvinYang

功不唐捐

Janenesome

读书笔记 思考 坚持

追光逐影:读《我们这一代》

北风

etcd:用于服务发现的键值存储系统_DevOps & 平台工程_小盖_InfoQ精选文章