微服务架构模式系列文章之七:自注册

背景

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

问题

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

需求

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

方案

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

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

例子

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

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

结果背景

自注册模式的优势在于:

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

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

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

相关模式

原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值