架构模式: 自注册

架构模式: 自注册

背景

如采用客户端服务发现模式或者服务器端服务发现模式,各服务实例必须在启动时注册至服务注册表,从而保证其能够被获取,并在关闭时进行注销。

问题

如何在服务注册表内注册和注销服务实例?

需求

  • 各服务实例必须在启动时被注册至服务注册表,并在关闭时进行注销。
  • 崩溃的服务实例必须从服务注册表中注销。
  • 在运行但无力处理请求的服务实例必须从服务注册表中注销。

方案

一项服务实例必须可以自动注册到服务注册表中。在启动时,该服务实例将自身(主机与IP地址)注册至服务注册表,使自身可被发现。客户端必须定期更新其注册信息,确保注册表获悉其仍处于运行状态。在关闭时,服务实例从服务注册表中自动注销。

这一流程通常由微服务基底框架实现。

示例

Netflix Eureka 即是服务注册表的一个例子。它为服务实现自动注册(注销)提供一个注册API及一套客户端库。

在使用 Apache Zookeeper 作为服务注册表时,每项服务对应一个特定的Zookeeper znode。在启动时,各服务实例会在该服务的znode下创建一个具有短暂存活时间的子znode。该子znode中包含该实例的位置信息。服务客户端通过检索该服务的子znode即可判断对应服务实例的可用性。如果服务实例终止但未移除对应的子znode,Zookeeper会在该子znode的存活时间超时后将其移除。

结果

自注册模式的优势在于:

  • 服务实例了解自身状态,因此能够实现比启动/停止更为复杂的状态模型,例如启动中、可用……

但自注册模式也存在着以下弊端:

  • 将服务与服务注册表耦合起来。
  • 需要为编写服务时使用的每种编程语言/框架分别实现服务注册逻辑,例如Node.JS/JavaScript、Java/Scala等等。
  • 仍在运行但无法处理请求的服务实例通常无法自动在服务注册表中进行自我注销。

相关模式

  • 服务注册表 - 服务发现机制中的重要部分。
  • 客户端服务发现 - 服务实例发现的方式之一。
  • 服务器端服务发现 - 服务实例发现的另一方式。
  • 微服务的基底 - 微服务底盘框架负责实现自注册功能。
  • 第三方注册是备选方案。
原文地址:https://www.cnblogs.com/paxlyf/p/11289622.html