你好我是辰兮,很高兴你能来阅读,本篇文章是关于SpringCloud分布式微服务框架的学习,主要讲究Eureka服务中心的基础概念和作用,分享获取新知,大家一起进步。
Eureka又称服务中心,管理各种服务功能包括服务的注册、发现、熔断、负载、降级等。
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。
SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
Eureka包含两个组件:Eureka Server和Eureka Client。
①Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
②Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。
综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
(1)服务发现与注册
在微服务架构中,服务发现(Service Discovery)是关键原则之⼀。⼿动配置每个客户端或某种形式的约定是很难做的,并且很脆弱。Spring Cloud提供了多种服务发现的实现方式,例如:Eureka、Consul、Zookeeper。Spring Cloud⽀持得最好的是Eureka,其次是Consul,最次是Zookeeper。
(2)服务发现模式
服务发现有两种模式,一是客户端发现模式,二是服务端发现模式。
2.1 客户端发现模式
使用客户端发现模式时,客户端(服务消费者)决定相应服务实例(服务提供者)的网络位置,并且对请求实现负载均衡。客户端查询服务注册表,服务注册表是⼀个保存有所有可用服务的⼀个数据库等具有存储功能的地方;然后客户端使⽤负载均衡算法从中选择⼀个提供者实例,并发出请求。
相当于我们去吃自助,吃什么,吃多少都是我们自己决定的,哪怕其中的菜每种都有多盘,我们也可以自己决定从哪盘中拿,他们只需要把所有的东西摆放在那里就行。
下图显示了这种模式的架构:
下图中可以看出左侧的消费者(客户端)⾃⼰从注册中⼼查询右侧的所有的服务,然后⾃⼰决定去请求哪个服务
2.2 服务端发现模式
与客户端发现⽅式不同,服务端发现是由专⻔的某个或者某⼏个服务器来发现服务后再对外提供信息的,客户端(消费者)并不知道这个服务到底有多少个,就像我们在⻝堂打饭,我们只需要告诉打饭的阿姨你吃什么,阿姨她来决定从哪盘⾥⾯打给你(当然⻝堂⾥⾯你还能看到菜⽽已,我们的服务中你⽆法看到服务)
如何搭建Eureka服务端 ?
1.搭建Eureka服务端
因为作为注册中心⼀定是独立于其他程序之外的,所以我们需要搭建⼀个Eureka的服务端,与Zookeeper不同的是,Eureka的服务端是⼀个JavaWeb程序
2.导入Pom.xml
<dependencies>
<!--Eureka server 的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
3. application.yml
server:
port: 10000 #程序通过springboot启动后tomcat的端⼝
eureka:
client:
register-with-eureka: false #eureka单机版的配置
fetchRegistry: false #表示当前是个服务端
service-url:
defaultZone: http://localhost:10000/eureka #Eureka对外提供服务的注册地
址,也就是eureka最终运⾏的地址,此处我们使⽤的是localhost,springboot模式启动,所以是
localhost:10000/eureka
spring:
application:
name: eureka-server #程序的名字
4.启动主程序
@SpringBootApplication
@EnableEurekaServer//开启eurekaserver,会⾃动帮我们配置
public class EurekaStartApp {
public static void main (String[] args){
SpringApplication.run(EurekaStartApp.class,args);
}
}
5.启动后访问http://localhost:10000/
注意:除了Eureka,在此免费分享5套2020最新Java架构实战教程+大厂面试题库,有兴趣的去小编裙: 783802103 免费拿,小白勿进哦!
了解完 Eureka 核心概念,自我保护机制,以及集群内的工作原理后,我们来整体梳理一下 Eureka 的工作流程:
1、Eureka Server 启动成功,等待服务端注册。启动过程中如果配置了集群,集群之间定时通过 Replicate 同步注册表,每个 Eureka Server 都存在独立完整的服务注册表信息。
2、Eureka Client 启动时根据配置的 Eureka Server 地址去注册中心注册服务。
3、Eureka Client 会每 30s 向 Eureka Server 发送一次心跳请求,证明客户端服务正常。
4、当 Eureka Server 90s 内没有收到 Eureka Client 的心跳,注册中心则认为该节点失效,会注销该实例
5、单位时间内 Eureka Server 统计到有大量的 Eureka Client 没有上送心跳,则认为可能为网络异常,进入自我保护机制,不再剔除没有上送心跳的客户端
6、当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式
7、Eureka Client 定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地
8、服务调用时,Eureka Client 会先从本地缓存找寻调取的服务。如果获取不到,先从注册中心刷新注册表,再同步到本地缓存
9、Eureka Client 获取到目标服务器信息,发起服务调用
10、Eureka Client 程序关闭时向 Eureka Server 发送取消请求,Eureka Server 将实例从注册表中删除
The best investment is to invest in yourself
2020.06.17 记录辰兮的第84篇博客