SpringCloud中的注册中心
一 什么是注册中心?
注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中, 服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用
二 注册中心的主要作用
- 服务发现: 服务注册/反注册:保存服务提供者和服务调用者的信息 服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能 服务路由(可选):具有筛选整合服务提供者的能力。
- 服务配置 配置订阅:服务提供者和服务调用者订阅微服务相关的配置 配置下发:主动将配置推送给服务提供者和服务调用者
- 服务健康检测 检测服务提供者的健康情况
三 常见的注册中心
- Zookeeper
- Eureka
- Consul
- Nacos
四 SpringCloud中Eureka注册中心组件
4.1 基础概念
4.1.1 Eureka注册中心是啥
Eureka是Netflix开发的服务发现框架
4.1.2基本架构
基本架构中的三个角色解释
- Eureka Server:提供服务注册和发现
- Service Provider:服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到
- 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中常见问题
- 服务注册慢 通过配置eureka.instance.leaseRenewalIntervalInSeconds (心跳频率)加快客户端连接到其他服务的过 程。
- 服务节点剔除问题 1. Eureka Server:配置关闭自我保护,设置剔除无效节点的时间间隔 2. Eureka Client:配置开启健康检查,并设置续约时间
- 监控页面显示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的请 求地址
版权归原作者 sw_Ljb 所有, 如有侵权,请联系我们删除。