Linux集群之美
上QQ阅读APP看书,第一时间看更新

1.1.2 什么是服务发现

什么是服务发现(Service Discovery)?

服务发现组件记录了大规模系统中所有服务的信息,人们或其他服务可以据此找到这些服务,DNS就是一个简单的例子,例如我们经常用的Kubernetes中的CoreDNS。当然,复杂系统的服务发现组件提供更多的功能,如服务元数据存储、健康监控、多种查询和实时更新等。

服务发现带来的主要好处是什么?

服务发现的主要好处是“零配置”:不用使用硬编码的网络地址,只需服务的名字(有时甚至连名字都不用)就能使用服务。在现代体系架构中,单个服务实例的启动和销毁很常见,所以应该做到无须了解整个架构的拓扑结构,就能找到这个实例。

服务发现组件必须提供查询所有服务的部署状态和集中控制所有服务实例的手段。对于那些不仅仅提供DNS功能的复杂系统,这一点尤为关键。

目前,业界提供了很多种服务发现解决方案。

我们已经使用DNS很长时间了,DNS可能是现有的最大服务发现系统。小规模系统可以先使用DNS作为服务发现手段。一旦服务节点的启动和销毁变得更加动态,DNS就有问题了,因为DNS记录传播的速度可能跟不上服务节点变化的速度。

ZooKeeper大概是最成熟的配置存储方案了,它提供了包括配置管理、领导人选举和分布式锁在内的完整解决方案。因此,ZooKeeper是非常有竞争力的通用服务发现解决方案,当然,它也显得过于复杂。etcd是新近出现的服务发现解决方案,它与ZooKeeper具有相似的架构和功能,因此可与ZooKeeper互换使用。

Consul是一种更新的服务发现解决方案。除了服务发现,它还提供了配置管理和一种键值存储。Consul提供了服务节点的健康检查功能,支持使用DNS SRV查找服务,这大大增强了它与其他系统的互操作性;Consul与ZooKeeper的主要区别是:Consul提供了DNS和HTTP两种API,而ZooKeeper只支持专门客户端的访问。