服务发现:自注册

背景

你已经应用了 客户端服务发现 或者 服务端服务发现。服务实例必须在启动时注册到注册 服务注册中心以被发现,在终止时取消注册。

问题

服务实例怎样从服务注册中心注册和取消注册?

限制

  • 服务实例必须在启动时注册到注册中心,终止时取消注册
  • 服务实例崩溃时,必须从注册中心取消注册
  • 服务正在运行,但是没办法处理请求,必须从注册中心取消注册

解决方案

服务实例自己负责注册到服务注册中心。启动时,服务实例将自己(主机和IP地址)注册到服务注册中心,让它自己能被发现。客户端通常必须周期性的更新它的注册信息,因此注册中心知道它还可用。当它终止时,服务实例自己从服务注册中心取消注册。

这个功能通常由微服务基架框架提供

示例

微服务示例应用是采用自注册的一个示例应用。它用Scala编写,采用了Spring Boot和Spring Cloud作为微服务基架。该应用使用Eureka 作为 服务注册中心,它也是Netflix OSS的一个组件。

服务注册是通过在Java配置类上添加@EnableEurekaClient注解:

@Configuration
@EnableEurekaClient
class EurekaClientConfiguration {

这个注解导致服务实例注册到Eureka。

结果

自注册有如下优势:

  • 服务实例知道它自己的状态,因此可以实现一个比UP / DOWN更复杂的状态模型,比如:STARTING,AVAILABLE。。。

也有如下弊端:

  • 服务与服务注册中心耦合
  • 你必须在你用来编写服务的每一个编程语言 / 框架里实现服务注册逻辑,比如:NodeJS / Javascript,Java / Scala,等等。
  • 正在运行,但是无法处理请求的服务实例,通常缺乏从服务注册中心取消注册的行为。

相关模式

  • 服务注册中心 - 服务发现的核心部分
  • 客户端服务发现 - 服务实例被发现的一种方式
  • 客户端服务发现 - 服务实例被发现的另外一种方式
  • 微服务基架 - 自注册由微服务基架框架负责
  • 第三方注册 是个替代方案

你可能感兴趣的:(服务发现:自注册)