此篇文章介绍下关于服务发现的一些技术。

什么是服务发现

服务发现(Service Discovery)要解决的是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务如何才能找到对方并建立连接。

服务发现的特点

  • 动态变化是微服务应用的一大特点。在动态环境下,必须有一种机制能让client知道如何访问其它的服务,这就是服务发现技术的工作。
  • 服务发现会保存集群中所有微服务最新的信息,比如IP和端口,并对外提供API,提供服务查询功能。
  • Etcd、Consul、Eureka 和 ZooKeeper 是服务发现/注册的典型解决方案。

如何实现服务发现机制

要解决服务发现的问题,需要三方面的支持:

  1. 一个强一致性、高可用的服务存储目录
    如基于Raft的Etcd服务。

  2. 一种注册服务和监控服务健康状态的机制
    用户可以在Etcd中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康状态的效果。

  3. 一种查找和连接服务的机制
    通过在Etcd指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,可以在每个服务器上部署一个proxy模式的Etcd,这样就可以确保能访问Etcd集群的服务都能互相连接。