服务发现机制

特点

服务发现机制具有以下特点:

  • 高可用

    如果一个节点变得不可用,集群中的其他节点应该能够接管工作。与负载均衡器相结合的集群可以提供故障切换以防止服务中断,还可以提供会话复制以存储会话数据。

  • 点对点 服务发现集群中的每个节点共享一个服务实例的状态。

  • 负载均衡 服务发现需要在所有服务实例之间动态地对请求进行负载均衡,这能确保服务调用分布在由它管理的所有服务实例上。

  • 有弹性 服务发现的客户端应该在本地缓存服务信息。本地缓存允许服务发现功能逐步降级,这样,如果服务发现服务变得不可用,应用程序仍然可以基于其本地缓存中维护的信息来运行和定位服务。

  • 容错 服务发现需要检测出服务实例什么时候是不健康的,并从可以接收客户端请求的可用服务列表中移除该实例。服务发现应该在没有人为干预的情况下,对这些故障进行检测,并采取行动。

架构

在该图中,启动了一个或多个服务发现节点,这些服务发现节点的前面一般不会有负载均衡器

当服务实例启动时,它们将向服务发现集群进行注册。通常,服务只在一个服务发现实例中进行注册。大多数服务发现的实现使用数据传播的点对点模型,其中每个服务实例的数据都被传递到服务发现集群中的所有其他节点。

任何未能返回良好的健康检查信息的服务都将从可用服务实例池中删除。服务在向服务发现服务进行注册之后,这个服务就可以被需要使用这项服务功能的应用程序或其他服务使用。

在这个模型中,当一个服务消费者需要调用一个服务时,会经过以下步骤:

  1. 它将联系发现服务,获取服务消费者请求的所有实例,然后在服务消费者的机器上缓存数据。

  2. 每当客户端需要调用该服务时,服务消费者将从缓存中查找该服务的位置信息。通常,客户端缓存将使用简单的负载均衡算法,如“轮询”负载均衡算法,以确保服务调用分布在多个服务实例之间。

  3. 客户端将定期与发现服务进行联系,并刷新其服务实例的缓存。客户端缓存最终是一致的,但是始终存在这样的风险:在客户端联系服务发现实例进行刷新和调用时,调用可能会被定向到不健康的服务实例上。如果在调用服务的过程中,服务调用失败,那么本地的服务发现缓存会失效,服务发现客户端将尝试从服务发现代理刷新它的数据。

Last updated