什么是服务发现机制?

  服务发现机制说白了就是用来找到微服务架构中各个服务实例的一个机制。

为什么需要服务发现机制?

  在微服务架构中,各个服务实例的网络位置(IP地址和端口)是动态改变的,而使用服务时需要知道相应服务的网络位置才能找到对应该的服务实例,所以需要一种较为复杂的服务发现机制来协助。

服务发现模式

  有两大模式:客户端发现以及服务端发现。

客户端发现模式

  在客户端发现模式中,服务实例在启动时会把网络位置注册到注册服务的注册表中,当服务终止时会从注册表中删除。

  客户端需要请求一个服务时,会到服务注册服务中查询,使用均衡负载算法从多个服务实例中选择一个,然后发出请求。

  服务实例注册信息一般是通过心跳机制来定期刷新。

客户端发现模式的优点
  • 相对比较直接,除了服务注册表,没有其他改变因素
  • 客户端可以使用哈希一致性变得更加聪明,能更加有效地实现负载均衡
客户端发现模式的缺点
  • 需要针对不同的编程语言实现相应的服务注册

服务端发现模式

  在服务端发现模式中,客户端通过负载均衡器向某个服务提出请求,负载均衡器向服务注册表发出请求,将每个请求转发往可用的服务实例。

  像客户端发现一样,服务实例在注册表中注册与注销。

服务端发现模式的优点
  • 客户端无须关注发现的细节,只需要简单的向负载均衡器发送请求
服务端发现模式的缺点
  • 除非部署环境提供负载均衡器,否则负载均衡器是另一个需要配置的高可用系统功能

服务注册表

  服务注册表是服务发现的关键部分,它由若干使用复制协议保持同步的服务器构成,包含服务实例的网络地址。

  服务注册表提供了注册管理API和请求API,注册管理API用于实现服务实例的注册与注销;请求API用于发现可用的服务实例。

  服务注册表需要是高可用的,而且能随时更新的。

服务注册的方式

自注册方式

  自注册方式是服务实例负责在服务注册表中注册和注销,如有需要的话,服务实例也要发送心跳来保证注册信息不会过时。

自注册方式的优点
  • 相对比较简单,不需要其他系统功能
自注册方式的缺点
  • 把服务实例与服务注册表联系起来,就必须在每种编程语言和框架内部实现注册代码

第三方注册方式

  第三方注册方式是由另外一个模块-服务管理器系统负责注册。服务管理器通过查询部署环境或订阅事件来跟踪运行服务的改变,当发现一个新的可用服务,服务管理器会向注册表注册此服务,而服务的注销也由服务管理器负责。

第三方注册方式的优点
  • 服务实例与服务注册表是分离的,不需要为每种编程语言和框架实现注册代码,而是由集中管理的服务进行管理
第三方注册方式的缺点
  • 除非这个服务是内置于部署环境中的,否则服务管理器也是一个需要配置的高可用系统



参考链接:
微服务实战(四):服务发现的可行方案以及实践案例