Skip to content

注册发现介绍

采用网络接口进行通信,并且支持多实例弹性扩缩容是微服务一个重要的特征。 一个微服务 A 需要和另外一个微服务 B 进行 通信,首先需要知道微服务 B 的网络地址信息, 这个过程一般是通过注册发现实现的。

最常见的服务发现机制是引入一个中间件服务, 微服务 B 启动的过程中,向中间件服务注册自己的网络地址信息,微服务 A 访问 B 的时候, 首先从中间件服务查询微服务 B 的网络地址信息。

对于规模较小的系统,也可以不使用中间件服务,而是通过配置文件的方式,在微服务 A 中指定微服务 B 的地址。这种方式 适合组网情况固定,不会弹性扩缩容的场景。

在局域网环境下,还可以通过组播协议,比如 mDNS 发现其他的服务,这种方式不需要做额外的配置。

注册发现信息

Java Chassis定了了几个维度的核心概念,注册发现和配置管理都围绕这几个核心概念来组织。

  • 环境 environment
  • 应用 application
  • 微服务名称 name
  • 微服务版本 version
  • 实例地址信息 Endpoints,一个实例可以包含多个协议的 Endpoint。

此外还包括契约(schema)。 契约是Java Chassis治理管控的基础。

这些基本信息通过 yaml 文件进行配置:

servicecomb:
  service:
    application: basic-application
    name: gateway
    version: 0.0.1

  rest:
    address: 0.0.0.0:9090?sslEnabled=false

同时使用多个注册发现

可以同时使用多个注册发现的实现。组合不同的注册发现的实现,能够满足一些非常重要场景的需求。

使用多个服务中心的约束和行为

  • 服务注册

可以往多个不同的注册中心注册,不同的实例在注册的时候,需要保证每个实例(进程)具备唯一的实例ID,如果实例重启,需要生成新的实例ID,即使是在同一个物理主机。

  • 服务发现

实例ID相同的微服务实例,会被作为同一个实例进行管理。如果不同的注册中心实例ID相同,那么必须保证这些实例是同一个,否则会出现实例丢失或者覆盖的情况。