写点什么

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:4519552
用户头像

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

关注

评论

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

建信金科大咖访谈:人脸识别技术的发展与应用

金科优源汇

面试官问“你有什么问题要问我”,如何完美回答?

架构精进之路

6月日更

「SQL数据分析系列」4. 过滤操作

Databri_AI

数据库 SQL语言

软件工程,其实没有任何工程而言

实力程序员

企业如何成功应用机器学习?看这四点就够了!

亚马逊云科技 (Amazon Web Services)

前端开发华为鸿蒙系统应用 OpenHarmony JS

孙叫兽

华为 鸿蒙 OpenHarmony 鸿蒙开发 引航计划

一分钟开发一个表单

蛋先生DX

vue.js 表单 动态表单 6月日更

JDK 工具大合集

看山

Java 6月日更

【Vue2.x 源码学习】第十五篇 - 生成 ast 语法树 - 构造树形结构

Brave

源码 vue2 6月日更

连续七年,我们持续领跑

Java包装类(Integer 详解 )

若尘

java编程 6月日更

react源码解析13.hooks源码

全栈潇晨

React

MySQL基础之十三:约束

打工人!

MySQL 6月日更

页面怎么布局,当然是Grid ԅ(¯﹃¯ԅ)

空城机

JavaScript 大前端 6月日更 页面布局

论现代科技发展趋势:停滞、减速 OR 蓄力?

老猿Python

发展 科技 软件技术

故事|订单系统中的补偿事务

悟空聊架构

故事 事务 6月日更 订单系统 补偿事务

【Flutter 专题】103 初识 Flutter Mixin

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

用EasyRecovery“监控硬盘”功能检测硬盘问题的方法

淋雨

数据恢复 EasyRecovery 文件恢复

🌏【架构师指南】总结分库分表的实现方案

码界西柚

分库分表 架构师 6月日更 实现方案

Linux之ls命令

入门小站

Linux

架构实战营模块六总结

竹林七贤

【21-8】PowerShell 输入输出

耳东@Erdong

PowerShell 6月日更

密码学系列之:feistel cipher

程序那些事

加密解密 密码学 程序那些事

缓存的世界 Redis(二)-持久化

卢卡多多

redis redis持久化 配置文件持久化 6月日更

话题讨论|从2021苹果全球开发者大会中,你得到了什么启发?

石云升

wwdc 话题讨论 6月日更

VS code常用插件推荐(总结整理篇)

孙叫兽

vscode 大前端 插件 Vue 3 引航计划

OpenVINO+微软黑客松比赛项目简介

IT蜗壳-Tango

IT蜗壳 6月日更

云上 ARM 实例应用优化?现在带你读懂它!

亚马逊云科技 (Amazon Web Services)

Java8 的时间库(1):介绍 Java8 中的时间类及常用 API

看山

Java 6月日更

Python——字典的使用

在即

6月日更

百度的云图丹青

脑极体

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