Spring Cloud Eureka 是什么?

本文内容如有错误、不足之处,欢迎技术爱好者们一同探讨,在本文下面讨论区留言,感谢。

简述

Spring Cloud Eureka 是 Spring Cloud Netflix 组件之一,是基于 Netflix Eureka 实现的。Eureka 包括服务注册、服务发现和服务检测监控等。

EurekaNetflix 开发的服务发现框架,本身是一个基于 REST 的服务,主要用于定位运行在 AWS 域中的中间层服务,以达到负载均衡和中间层服务故障。 — 百度百科

基本概念

Eureka 主要作用是服务治理,服务治理包含下面两个概念:

  • 服务注册:每个服务单元向注册中心注册自身所提供的服务,注册的信息含括:主机与端口号、版本号、通信协议,服务名等。服务中心会维护一个服务清单,同时使用心跳的方式检测清单中的服务是否可用,若不可用则需要从服务清单中剔除,以达到排除故障服务的效果。
  • 服务发现:服务消费者消费服务是通过服务中介去发现对应点服务提供者。微服务下的服务治理框架下,服务之间的相互调用不再通过具体的实例地址进行直接调用,而是通过向服务名发起请求调用实现。
Eureka服务治理体系

下面是一张经典治理体系示意图:
在这里插入图片描述

对象 动作 说明
服务提供者 服务注册 发送REST请求的方式将自己注册到Eureka Server
服务提供者 服务同步 当服务提供者发送注册请求到一个服务注册中心时,它会将请求转发给集群中相连的其他注册中心,从而实现注册中心之间的服务同步。
服务提供者 服务续约 在注册完服务之后,服务提供者会维护一个心跳用来维持自身状态,让 Eureka Server 感知到服务本身可以调用
服务消费者 获取服务 发送一个REST请求给服务注册中心,来获取上面注册的服务清单。
服务消费者 服务调用 服务消费者在获取服务清单后,通过服务名可以获得具体提供服务的实例名和该实例的元数据信息,进行调用。
服务消费者 服务下线 服务实例执行关闭操作时,将触发服务下线请求给 Eureka Server。服务端在接收到请求之后,将该服务状态设置为下线,并把该下线事件传播出去。
服务注册中心 失效剔除 从服务列表中将剔除这些无法提供服务的实例。
服务注册中心 自我保护 Eureka Server 在运行期间,会统计心跳失败的比例在15分钟之内低于85%,如果出现低于的情况,Eureka Server 会将当前的实例信息保护起来,让这些实例不会过期,尽可能保护这些注册信息。

使用

  1. pom.xml 引入 Eureka 依赖
<dependencies>
    <!-- 引入eureka server依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
</dependencies>
  1. 创建启动类
/**
 * 
 * @EnableEurekaServer
 * 用来指定该项目为Eureka的服务注册中心
 */
@EnableEurekaServer
@SpringBootApplication
public class EurekaApp {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApp.class, args);
    }
}
  1. 配置 application.properties
#设置tomcat服务端口号
server.port=9090
#设置服务名称
spring.application.name=eureka-service

eureka.instance.hostname=localhost
#注册中心不需要注册自己
eureka.client.register-with-eureka=false
#注册中心不需要去发现服务
eureka.client.fetch-registry=false
#设置服务注册中心的URL
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

基本原理

在这里插入图片描述

Eureka 分为 Eureka ServerEureka ClientEureka Server 作为注册中心属于服务端,而服务提供者和服务消费者相对于注册中心是客户端。同时 Eureka Server 在启动时默认会自己注册自己,自身作为一个服务,因此 Eureka Server 也是一个客户端,这是搭建 Eureka 集群的基础。

服务提供者向注册中心注册服务,隔30秒(默认时间,可以通过配置文件进行修改 )发送一次心跳,,如果 Eureka Server 在90秒(默认时间,可以通过配置文件进行修改 )后还未收到服务提供者发来的心跳时,那么它就会认定该服务已经死亡就会注销这个服务。
注意:这里注销并不是立即注销,而是会在60秒以后对在这个之间段内“死亡”的服务集中注销,原因是,集中处理可以避免 Eureka 出现极大的负担。
此外,Eureka 还有自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么 Eureka 就认为客户端与注册中心出现了网络故障,所以不会再接收心跳,也不会删除服务。

客户端消费者会向注册中心拉取服务列表,因为一个服务器的承载量是有限的,所以同一个服务会部署在多个服务器上,每个服务器上的服务都会去注册中心注册服务,他们会有相同的服务名称但有不同的实例id,所以拉取的是服务列表。最终通过负载均衡来获取一个服务,这样可以均衡各个服务器上的服务。

结论

本文简单介绍了 Spring Cloud Eureka 的基本作用和简单引用,通过这篇文章,了解一下 Eureka 的设计思路。

扫描二维码关注公众号,回复: 8623690 查看本文章

参考资料

Eureka原理理解和Eureka集群搭建

Eureka源码解析(Eureka工作原理进阶)

Eureka工作原理

发布了56 篇原创文章 · 获赞 14 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/feng_xiaoshi/article/details/103862348
今日推荐