文章目录
一 spring cloud 组件
1.1 综述
二 服务注册中心
解耦服务提供者和服务消费者
服务注册中心一般存储服务提供地址信息,服务发布的相关信息。消费者通过主动查询和被动通知的方式获取服务提供者的地址信息。消费者只需要知道部署了那些服务,而不需要知道服务位置。这就是透明路由。
注册中心还监控服务提供者的健康,失效时将主动剔除。
2.1 服务注册中心一般原理
push模式: 消费者订阅服务
2.2 主流注册中心对比
-
Zookeeper
Zookeeper它是一个分布式服务框架,是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题。如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。简单来说
zookeeperz本质=存储+监听通知。
znode
Zookeeper用来做服务注册中心,主要是因为它具有节点变更通知功能,只要
客户端监听相关服务节点,服务节点的所有变更,都能及时的通知到监听客户
端,这样作为调用方只要使用Zookeeper的客户端就能实现服务节点的订阅和
变更通知功能了,非常方便。另外,Zookeeper可用性也可以,因为只要半数
以上的选举节点存活,整个集群就是可用的。 -
Eureka
由Netflix开源,并被Pivatals集成到SpringCloud体系中,它是基于RestfulAPI
风格开发的服务注册与发现组件。 -
Consul
Consul是由HashiCorp基于Go语言开发的支持多数据中心分布式高可用的服务
发布和注册服务软件,采用Rft算法保证服务的一致性,且支持健康检查。 -
Nacos
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平
台。简单来说Ncos就是注册中心+配置中心的组合,帮助我们解决微服务开
发必会涉及到的服务注册与发现,服务配置,服务管理等问题。Nacos是
Spring Cloud Alibaba核心组件之一,负责服务注册与发现,还有配置。
2.3 Eureka
Eureka包含两个组件:Eureka Server和Eureka Client,
Eureka Client是一个Java客户端,用于简化与Eureka Servert的交互;Eureka Server提供服务发现的能力,各个微服务启动时,会通过Eureka Clientl向Eureka Server进行注册自己的信息(例如网铬信息),Eureka Server会存储该服务的信息;
-
图中us-east-1c、us-east-1d,us-east-1e代表不同的区也就是不同的机房
-
图中每一个Eureka Server都是一个集群。
-
图中Application Service作为服务提供者向Eureka Servert中注册服务,Eureka Server接受到注册事件会在集群和分区中进行数据同步,Application Client作为消费端(服务消费者)可以从Eureka Server中获取到服务注册信息,进行服务调用。
-
微服务启动后,会周期性地向Eureka Server发送心跳(默认周期为30秒)以续约自己的信息
-
Eureka Server在一定时间内没有接收到某个微服务节点的心跳。Eureka Server将会注销该微服务节点(默认90秒)
-
每个Eureka Serverl同时也是Eureka Client,多个Eureka Server之间通过复
制的方式完成服务注册列表的同步 -
Eureka Client会缓存Eureka Servert中的信息。即使所有的Eureka Server节
Eureka通过心跳检测、健康检查和客户端缓存等机制,提高系统的灵活性、可 伸缩性和可用性。
点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者
入门代码请看另外一遍博客
入门代码请看另外一遍博客
入门代码请看另外一遍博客
我的怨种同事陈大龙天天pua我。我很生气!!!!!
三 Eureka简单梳理
3.1 元数据
3.1.1 概述
包括标准元数据和自定义元数据。
标准元数据:主机名,ip地址,端口号等信息。这些信息都会被发布在服务注册表中,用于服务之间的调用。在yml文件中,也可以使用标准元数据。
自定义元数据:使用eurreka.instance.metadata-map配置,符合k-v即可。这些元数据可以在远程客户端中访问。
3.1.2 自定义格式
instance:
metadata-map:
k: v
3.1.3 远程服务器获取元数据
使用discoveryClient
discoveryClient.getInstances("id").get(0).;
3.2 客户端
客户端就是服务提供者或许服务消费者。
对于客户端来说,要完成对Eureka的注册和续约。
3.2.1 服务注册
- 导入eureka-client依赖坐标,配置Eureka服务中心地址
- 服务在启动时候会向注册中心发起注册请求,携带服务元数据信息。
- Eureka注册中心会把服务的信息保持在Map中。
3.2.2 服务续约
服务每隔30秒需要向注册中心续约(心跳)一次,如果没用续约,租约在90秒到期,服务则失效。
eureka:
instance:
lease-renewal-interval-in-seconds: 30
laese-expiration-duration-in-seconds: 90
3.2.3 消费者获取服务列表
一般来说消费者30秒就会向注册中心拉取一份服务列表
- 服务消费者启动时,会像EurekaServer服务列表获取只读备份,缓存到本地。
- 每隔30秒,重新获取数据
- 时间通过eureka.client.registry-fetch-interval-seconds修改。
3.3 服务端
3.3.1 服务下线
- 服务正常下线时,会发送下线的Rest请求给EurekaServer。
- 服务中心收到后,将该服务设置为下线状态
3.3.2 失效剔除
- EurekaServer会定时(默认60s)进行检查,如果发现实例在一定时间(该时间由客户端设置)内没收到心跳,则注销实例。
3.3.3 自我保护
就像我打陈大龙一样,如果陈大龙被我打怕了,他就会自我保护了。
如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么就会进入自我保护状态。
自我保护状态
- 不会剔除任何实例
- 仍能接受新服务的注册和插叙请求,不过不会同步到其他节点上面。当网络可用时,会重新同步
- eureka.server.enable-self-preservation配置是否打开,默认打开
自我保护状态的设计初衷:
当分区网络故障时候,那么通信是不正常的,但是实例运行是正常的。如果剔除,可能会引起其他节点复制。
四 源码剖析
看我七十二变,给我剖析,剖析。计划月底剖!!!
假如没意外的话。
时间安排
时间 | ||
---|---|---|
2022年3月3日 | 完成Eureka基本入门。 | |