ETCD介绍 (一)

什么是ETCD?

etcd是一个Go言编写的分布式、高可用的一致性键值存储系统,用于提供可靠的分布式键值存储、配置共享和服务发现等功能。

特点

  • 简单
    易使用:基于HTTP+JSON的API让你用curl就可以轻松使用
    易部署:使用Go语言编写,跨平台,部署和维护简单

  • 可靠:
    强一致:使用Raft算法充分保证了分布式系统数据的强一致性
    高可用:具有容错能力,假设集群有n个节点,当有(n-1)/2节点发送故障,依然能提供服务
    持久化:数据更新后,会通过WAL格式数据持久化到磁盘,支持Snapshot快照
    快速:每个实例每秒支持一千次写操作,极限写性能可达10K QPS
    安全:可选SSL客户认证机制


ETCD简单使用

# 安装命令
 sudo apt install etcd
 
# 查看版本
etcd --version

# 测试安装是否成功
curl http://127.0.0.1:2379/version

# 增 / 改
 curl http://127.0.0.1:2379/v2/keys/message -XPUT -d value="Hello world"
 etcdctl put message "Hello world"

# 删除
 curl http://127.0.0.1:2379/v2/keys/message -XDELETE
 etcdctl del message

# 查
 curl http://127.0.0.1:2379/v2/keys/message
 etcdctl get message
 
# 存储有过期时间的key
 curl http://127.0.0.1:2379/v2/keys/foo -XPUT -d value=bar -d ttl=5
 
# watch
 etcdctl watch key

服务架构


基本概念

  • HTTP Server
    • 用于处理用户发送的API请求以及其他etcd节点的同步与心跳信息的请求。
  • Store
    • 用于处理etcd支持的各类功能的事务,包括数据索引,节点状态的变更,监控与反馈,事件处理与执行等,是etcd对用户提供的大多数API功能的具体实现。
  • Raft
    • Raft分布式强一致性算法的具体实现,是etcd的核心。
  • WAL
    • Write Ahead Log(预写式日志)是etcd的数据存储方式,WAL中所有数据提交前都会事先记录日志,这种技术在mysql中也有用到(binlog)。除了在内存中存有所有数据的状态及节点的索引以外,etcd就通过WAL进行持久化存储。
  • Snapshot
    • 是为了防止数据过多而进行的状态快照
  • Entry
    • 表示存储的具体日志内容。

RPC简介

  • ETCD中节点间通信,以及事务处理都是通过RPC机制,RPC(Remote Procedure Call)是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

  • RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。


核心算法 Raft

通常来说,在分布式环境下,可以通过两种手段达成一致:

  • Symmetric, leader-less :所有Server都是对等的,Client可以和任意Server进行交互
  • Asymmetric, leader-based:任意时刻,有且仅有1台Server拥有决策权,Client仅和该Leader交互

经典应用场景

1. 服务注册与发现(Service Discovery)
2. 配置中心
3. 负载均衡
4. 分布式锁
5. 分布式队列
6. 分布式通知与协调
7. 消息发布和订阅


发展现状

Raft算法虽然诞生不久,但是在业界已经引起广泛关注,强烈推荐大家浏览其官网http://raftconsensus.github.io,上面有丰富的学习资料,目前Raft算法的开源实现已经涵盖几乎所有主流语言(C/C++/Java/Python/Javascript …),其流行程度可见一斑。由此可见,一项技术能否在工业界大行其道,有时“可理解性”、“可实现性”才是至关重要的。

posted @ 2022-04-11 20:43  大切切  阅读(815)  评论(0编辑  收藏  举报