[翻译]微服务设计模式 - 8. 服务发现 - 第三方注册
16lz
2021-03-18
原文地址: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 等一些 注册代理 利用健康检查,以确定服务实例的可用性。
- 需要额外维护一个 注册代理 服务,而且需要高可用。
相关模式
- 注册中心 - 服务发现的核心
- 客户端服务发现 与 服务端服务发现
- 微服务基础框架 - 一般微服务基础框架都有自注册的功能实现
- 自注册 - 另一种可替代的设计模式
更多相关文章
- 从微软Azure云设计模式来看云化及下一代微服务Service Mesh
- 经历了研发困局、运维之痛,同程微服务从1到1w的旅程
- 老牌大型门户网站多年经验——搜狐服务架构优化
- 基于 Swoft 协程框架的 PHP 微服务治理
- Unity平台 | 快速集成华为AGC云数据库服务
- Node.js仿知乎服务端-深入理解RESTful API
- 任擎(Tasgine)一站式企业应用服务平台介绍
- 云服务让HPC死而复生
- 端午搬砖:聊聊调度云服务