原文地址:https://microservices.io/patterns/self-registration.html

背景

假设你采用了客户端服务发现或者服务端服务发现,服务启动时需要向注册中心注册实例,在关闭时向注册中心注销,以便其他服务感知。

问题

服务实例如何向注册中心注册或注销?

考虑因素

  • 服务在启动时必须向注册中心注册实例,并且在关闭时在注册中心注销实例
  • 必须从注册中心注销崩溃的服务实例
  • 正在运行但是无法正常提供服务的实例,也需要在注册中心注销

解决方案

引入一个第三方注册代理,负责服务实例在服务注册中心注册和注销。当服务实例启动时,注册代理将实例注册到注册中心。当服务实例关闭时,注册代理负责注销实例。

举例

第三方注册模式的例子包括:

  • Netflix Prana,用于非 JVM 注册到 Eureka 上,已不再更新,参考:Towards being better about open source personally
  • AWS 自动扩容组,自动注册 EC2 实例到 AWS 负载均衡器上。
  • ContainerPilot,作为服务的父进程在Docker容器中运行,并将其注册到注册中心中。
  • Registrator,负责 Docker 容器向各种不同的注册中心的注册与注销
  • Kubernetes 和 Marathon这种容器编排框架的服务实例都有内置的隐式服务注册

结果分析

第三方注册模式的好处包括:

  • 服务的代码比使用自注册模式更加简单,因为它不负责注册
  • 注册代理可以对服务实例执行健康检查,并根据健康状态注册/注销实例。

也有一些缺点:

  • 注册代理只对服务实例的状态有模糊的理解,例如只有 UP 和 DOWN,因此可能不知道它是否能够正常处理请求。上面提到的 Netflix Prana 等一些 注册代理 利用健康检查,以确定服务实例的可用性。
  • 需要额外维护一个 注册代理 服务,而且需要高可用。

相关模式

  • 注册中心 - 服务发现的核心
  • 客户端服务发现服务端服务发现
  • 微服务基础框架 - 一般微服务基础框架都有自注册的功能实现
  • 自注册 - 另一种可替代的设计模式

更多相关文章

  1. 从微软Azure云设计模式来看云化及下一代微服务Service Mesh
  2. 经历了研发困局、运维之痛,同程微服务从1到1w的旅程
  3. 老牌大型门户网站多年经验——搜狐服务架构优化
  4. 基于 Swoft 协程框架的 PHP 微服务治理
  5. Unity平台 | 快速集成华为AGC云数据库服务
  6. Node.js仿知乎服务端-深入理解RESTful API
  7. 任擎(Tasgine)一站式企业应用服务平台介绍
  8. 云服务让HPC死而复生
  9. 端午搬砖:聊聊调度云服务

随机推荐

  1. android:定制checkbox 图片
  2. android 停止Handler
  3. 【Android Http Post】android post 请求
  4. Android 数据存储
  5. android开发指南中文版
  6. 阅读《Android(安卓)从入门到精通》(5)——
  7. android 动画模块分析
  8. Android TabHost Tutorial
  9. android API level
  10. Android ImageView和TextView居中