注册中心¶
注册中心相当于微服务架构中的”通讯录“,负责记录服务和服务地址的映射关系。 微服务在启动时,将自己的网络地址等信息注册到注册中心,注册中心存储这些数据。 服务消费者从注册中心查询服务提供者的地址,并通过该地址调用服务提供者的接口。 各个微服务与注册中心使用一定机制通信。如果注册中心与某微服务长时间无法通信,就会注销该实例。如果微服务网络地址发生变化时,会重新注册到注册中心。
传统的服务注册与发现¶
服务注册是指,微服务启动时通过集成的服务发现 SDK 向注册中心发送注册信息,注册中心在收到服务注册请求后将该服务的基本信息存储下来。 服务发现是指,在服务注册之后,如有服务消费者要调用该服务,调用方可以通过服务发现组件从注册中心查询目标微服务的地址列表,并通过获取到的服务地址列表,以某种负载策略向目标微服务发起调用。 传统的服务注册与发现主要由传统的注册中心提供支持,例如 Nacos、Eureka、Zookeeper 等。
-
Eureka 注册中心
Eureka 是 Spring Cloud 官方推荐使用的注册中心。 Eureka 主要适用于通过 Java 实现的分布式系统,或是与 JVM 兼容语言构建的系统。 但是,由于 Eureka 服务端的服务治理机制提供了完备的 RESTful API,所以也支持将非 Java 语言构建的微服务应用纳入 Eureka 的服务治理体系中来。 只是在使用其他语言平台的时候,需要自己来实现 Eureka 的客户端程序。 Eureka 集群采⽤⾮ Master/Slave 架构,集群中所有节点⻆⾊⼀致,数据写⼊集群任意⼀个节点后,再由该节点向集群内其他节点进⾏复制实现弱⼀致性同步。
-
Nacos 注册中心
Nacos 注册中心是阿里巴巴推出的开源项目,可以轻松构建云原生应用程序和微服务平台。 Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,主要包括服务发现和服务健康监测、动态配置服务、动态 DNS 服务、服务及其元数据管理。 Nacos 支持几乎所有类型的服务,例如,Dubbo/gRPC 服务、Spring Cloud RESTful 服务或 Kubernetes 服务等。
-
Zookeeper 注册中心
Apache ZooKeeper 是开放源码的分布式应用程序协调组件,为分布式应用提供一致性服务的软件。 Zookeeper 提供的功能包括配置维护、域名服务、分布式同步、组服务等。 在微服务项目开发中,ZooKeeper 经常和 Dubbo 配合使用,充当服务注册中心。
云原生的服务注册与发现¶
-
Kubernetes 注册中心
在 Kubernetes 中能够为微服务提供内部服务注册发现的基础就是 Service 类型的资源。 Kubernetes 使用 DNS 作为服务注册表。 为了满足这一需要,每个 Kubernetes 集群都会在 kube-system 命名空间中用 Pod 的形式运行一个 DNS 服务 (kube-dns/coredns),通常称之为集群 DNS。 服务注册过程是:
- 向 API Server 用 POST 方式提交一个新的 Service 定义。
- 该请求需要经过认证、鉴权以及其他的准入策略检查过程之后才会放行。
- Service 得到一个 ClusterIP(虚拟 IP 地址),并保存到集群数据仓库。
- 在集群范围内传播 Service 配置。
- 集群 DNS 服务得知该 Service 的创建,据此创建必要的 DNS 记录。 Service 对象注册到集群 DNS 之中后,就可以通过一个单一稳定的 IP 地址访问该 Service 中的 Pod。
Service Mesh 注册中心¶
Service Mesh 作为微服务的注册中心是基于 Kubernetes 实现的。 在 Kubernetes 集群环境中安装 Istio 后,Kubernetes 在创建 Pod 时, 就会通过 Kube-API 服务器调用控制面组件的 Sidecar-Injector 服务、自动修改应用程序的描述信息并将其注入 Sidecar, 之后在创建业务容器的 Pod 中同时创建 Sidecar 代理容器。SideCar 则会通过 xDS 协议与 Istio 控制面各组件连接。