etcd的简介

etcd是什么?

etcd是使用go语言开发的一个高可用的分布式key-value数据库, etcd可在分布式系统中共享配置和服务发现,起内部采用Raft协议实现的分布式一致算法。

etcd有哪些特性?
  • 简单:基于HTTP+JSON的API
  • 安全:可选的SSL客户认证机制
  • 快读:每个实例支持每秒一千次的操作
  • 可信:使用Raft算法实现了分布式的强一致性
etcd有哪些使用场景
  • 配置管理,消息的发布以及订阅
  • 服务注册以及发现
  • 选主
  • 应用调度
  • 分布式队列
  • 分布式锁
配置管理,消息的发布以及订阅

当前我们项目中etcd就是用来做配置管理,我们应用启动的时候会主动的从etcd获取一次配置信息,同时在etcd节点上注册一个watcher并进行等待或者设置回调函数,以后配置如果有更新,etcd都会实时的通知/回调到应用,以此达到获取最新配置信息的目的。

服务注册和服务发现

比如我们可以在etcd中注册以该服务为名称的目录,目录下存储服务可用的IP列表,并且对每一个IP设置TTL,可用的服务列表需要设置心跳,定时的保持在目录中的IP,那我们需要使用服务的时候,只需要去etcd下获取可用的服务节点就行了。
这种场景下,我们还可以通过watcher对应服务的目录,当目录有变动(节点消失/增加)的时候通知到用户,那么我们其实也就实现了服务集群的监控和健康检查。

选主

主要使用ectd的CAS机制去同时新建同一个节点,创建成功的机器就可以成为leader,其他的为follower

应用调度

etcd监控集群的状态,负责维护一份可用的集群列表,通过负载均衡策略或者轮询把请求地址发给应用

分布式队列
分布式锁

也是使用etcd的CAS机制,让多个节点同时去创建同一个目录,创建成功的用户可以被认为是获得了锁,另外其他想要获得锁的节点也会被执行,etcd会为每个想要获得锁的节点返回一个当前目录下的最大值,最终,这个目录下会有一份键值列表,这个值的顺序就是整个客户端的时序。