一 什么是注册中心?

	注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中, 服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用

二 注册中心的主要作用

  1. 服务发现:
    服务注册/反注册:保存服务提供者和服务调用者的信息
    服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能
    服务路由(可选):具有筛选整合服务提供者的能力。
  2. 服务配置
    配置订阅:服务提供者和服务调用者订阅微服务相关的配置
    配置下发:主动将配置推送给服务提供者和服务调用者
  3. 服务健康检测
    检测服务提供者的健康情况

三 常见的注册中心

  1. Zookeeper
  2. Eureka
  3. Consul
  4. Nacos

四 SpringCloud中Eureka注册中心组件

4.1 基础概念

4.1.1 Eureka注册中心是啥

Eureka是Netflix开发的服务发现框架

4.1.2基本架构

请添加图片描述 基本架构中的三个角色解释

  1. Eureka Server:提供服务注册和发现
  2. Service Provider:服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到
  3. Service Consumer:服务消费方从Eureka获取注册服务列表,从而能够消费服务

4.2 Eureka的交互流程与原理

4.2.1 Eureka包含两个组件:Eureka Server 和 Eureka Client

	1、Eureka Client是一个Java客户端,用于简化与Eureka Server的交互;
	2、Eureka Server提供服务发现的能力,各个微服务启动时,会通过Eureka Client向Eureka Server 进行注册自己的信息(例如网络信息),Eureka Server会存储该服务的信息
	3、微服务启动后,会周期性地向Eureka Server发送心跳(默认周期为30秒)以续约自己的信息。如 果Eureka Server在一定时间内没有接收到某个微服务节点的心跳,Eureka Server将会注销该微服 务节点(默认90秒)
	4、每个Eureka Server同时也是Eureka Client,多个Eureka Server之间通过复制的方式完成服务注 册表的同步;
	5、Eureka Client会缓存Eureka Server中的信息。即使所有的Eureka Server节点都宕掉,服务消费 者依然可以使用缓存中的信息找到服务提供者
综上,Eureka通过心跳检测、健康检查和客户端缓存等机制,提高了系统的灵活性、可伸缩性和可用性

4.3 Eureka的自我保护

微服务第一次注册成功之后,每30秒会发送一次心跳将服务的实例信息注册到注册中心。

4.4 Eureka中的元数据

标准元数据
主机名、IP地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注 册表中,用于服务之间的调用
自定义元数据
可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的存储格式。这 些元数据可以在远程客户端中访问。

4.5 Eureka进阶

4.5.1 高可用集群搭建

Eureka Server可以通过运行多个实例并相互注册的方式实现高可用部署

4.6 Eureka中常见问题

  1. 服务注册慢
    通过配置eureka.instance.leaseRenewalIntervalInSeconds (心跳频率)加快客户端连接到其他服务的过 程。
  2. 服务节点剔除问题
    1. Eureka Server:配置关闭自我保护,设置剔除无效节点的时间间隔
    2. Eureka Client:配置开启健康检查,并设置续约时间
  3. 监控页面显示ip:通过如下配置
eureka:
  instance:
instance-id: ${spring.cloud.client.ip-address}:${server.port}

五 Eureka的替代Consul注册中心

5.1 Consul的概述

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服 务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实 现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。 使用起来也较 为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和 Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合

5.2 Consul与Eureka的区别

(1)一致性
Consul强一致性(CP),服务注册相比Eureka会稍慢一些。因为Consul的raft协议要求必须过半数的节点都写入成功才认 为注册成功 Leader挂掉时,重新选举期间整个consul不可用。保证了强一致性但牺牲了可用性。

Eureka保证高可用和最终一致性(AP)服务注册相对要快,因为不需要等注册信息replicate到其他节点,也不保证注册信息是否 replicate成功当数据出现不一致时,虽然A, B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提 供服务,这会出现查询服务信息时如果请求A查不到,但请求B就能查到。如此保证了可用性但牺 牲了一致性。

(2)开发语言和使用 eureka就是个servlet程序,跑在servlet容器中 Consul则是go编写而成,安装启动即可

5.3 Consul的高可用集群

5.3.1 Consul的核心知识

5.3.1.1 Gossip协议
5.3.1.2 RAFT一致性算法
consul使用了基于强一致性的RAFT算法。 在Raft中,任何时候一个服务器可以扮演下面角色之一:
	1. Leader: 处理所有客户端交互,日志复制等,一般一次只有一个Leader. 
		Leader全权负责所有客户端的请求,以及将数据同步到Follower中(同一时刻系统中只存在一个 Leader)。Follower被动响应请求RPC,从不主动发起请求RPC。Candidate由Follower向Leader转换 的中间状态
	2. Follower: 类似选民,完全被动
	3. Candidate(候选人): 可以被选为一个新的领导人。

5.4 7、Consul 常见问题

(1)节点和服务注销
(2)健康检查与故障转移

6 注册中心的总结

6.1Eureka

搭建注册中心
引入依赖 spring-cloud-starter-netflix-eureka-server
配置EurekaServer
通过 @EnableEurekaServer 激活Eureka Server端配置
服务注册
服务提供者引入 spring-cloud-starter-netflix-eureka-client 依赖
通过 eureka.client.serviceUrl.defaultZone 配置注册中心地址

6.2consul

搭建注册中心
下载安装consul
启动consul consul agent -dev
服务注册
服务提供者引入 spring-cloud-starter-consul-discovery 依赖
通过 spring.cloud.consul.host 和 spring.cloud.consul.port 指定Consul Server的请 求地址

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐