ETCD简介
etcd是一个可靠的分布式KV存储,其底层使用Raft算法保证一致性,主要用于共享配置和服务发现。etcd是CoreOS公司发起的一个项目,授权协议为Apache,其源代码地址为https://github.com/coreos/etcd.
目前提供配置共享和服务发现功能的组件还是比较多的,其中应用最为广泛、大家最为熟悉是应用就是ZooKeeper了,很多开源项目也都在不同程度上依赖了ZooKeeper,例如,Dubbo、Kafka等。
服务组件和共享配置
服务发现:出现服务发现组件之前,解决多个服务之间的相互调用,一般是通过读取配置文件中预先设置的IP来获取服务的地址,然后进行调用。这会导致诸如某些服务已经不可用时,调用方不能及时感知等问题。使用服务发现组件之后,我们可以将服务提供方的信息注册到服务发现组件,让服务发现组件知晓服务提供方是可用的。当调用方进行服务调用时,会先请求服务发现组件,由服务发现组件来保证返回可用的服务地址及负载均衡等功能。
共享配置:使用静态配置文件的方式实现配置信息,需要将相同的信息写多份,每次更新配置时也需要更新多次。如果将这些配置信息注册到共享组件中,则系统的不同模块在启动时可从共享配置组件中获取配置,同时会监听配置信息的修改。
ETCD相较于ZooKeeper的优势
一致性协议:一致性协议是配置共享和服务发现组件的核心,etcd底层采用的Raft协议,公认比ZooKeeper的Paxos协议易于理解和应用。
API接口:etcd v2版本中提供了HTTP+JSON的调用方式,在etcd v3版本的客户端中则使用GRPC与服务端进行交互,则GRPC本身就是跨平台的。
性能:在官方提供的基准测试数据中,etcd集群可以支持每秒10000+次的写入,性能相当可观,优于ZooKeeper。
安全性:etcd支持TLS访问,而ZooKeeper在权限控制这方面做得略显粗糙。