微服务架构模式系列文章之七:自注册
微服务架构模式系列文章之七:自注册
普元云计算 发表于1年前
微服务架构模式系列文章之七:自注册
  • 发表于 1年前
  • 阅读 10
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

背景

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

问题

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

需求

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

方案

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

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

例子

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

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

结果背景

自注册模式的优势在于:

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

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

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

相关模式

原文链接

共有 人打赏支持
粉丝 2
博文 23
码字总数 18356
×
普元云计算
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: