Eureka注册中心


一.Eureka概述

Eureka是Netflix开发的一种服务发现工具,用于在分布式系统中定位服务实例。它是Netflix开源的一部分,用于构建基于微服务架构的应用程序。Eureka的主要目标是简化在云中运行的服务的发现和负载均衡。

在微服务架构中,一个应用程序被拆分成小的独立服务,这些服务可能会运行在不同的主机、容器或虚拟机上。服务之间需要进行通信,但服务的位置和数量可能会动态变化。这就是服务发现的作用,它允许服务找到并与其他服务通信。

Eureka的主要组件有两个:

  • Eureka Server: Eureka Server是服务注册中心,负责维护服务实例的信息。每个服务实例都会在Eureka Server上注册,包括它的主机名、IP地址、端口号等信息。

  • Eureka Client: Eureka Client是服务的消费者,它用于从Eureka Server获取服务实例的信息。服务在启动时会向Eureka Server注册自己,同时定期向Eureka Server发送心跳以表明自己的存活状态。客户端通过查询Eureka Server上的服务注册表来确定服务实例的位置。

Eureka还支持一种概念叫做"自我保护模式",在该模式下,如果Eureka Server在一定时间内没有收到某个服务实例的心跳,它仍然会将该实例保留在注册表中,以防止因为网络问题导致的误判。

总的来说,Eureka简化了微服务架构中服务的注册和发现过程,使得在动态环境中构建和维护服务更加容易。然而,需要注意的是,尽管Eureka是一个流行的工具,但在一些场景中,现代的云原生环境也使用其他服务发现工具,例如Consul或etcd。

二.Eureka的作用

在这里插入图片描述

  • 消费者该如何获取服务提供者具体信息?
    • 服务提供者启动时向eureka注册自己的信息
    • eureka保存这些信息
    • 消费者根据服务名称向eureka拉取提供者信息
  • 如果有多个服务提供者,消费者该如何选择?
    • 服务消费者利用负载均衡算法,从服务列表中挑选一个
  • 消费者如何感知服务提供者健康状态?
    • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
    • eureka会更新记录服务列表信息,心跳不正常会被剔除
    • 消费者就可以拉取到最新的信息

三.Eureka案例

1.搭建EurekaServer

搭建EurekaServer服务步骤如下:
1.创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖

	<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

2.编写启动类,添加@EnableEurekaServer注解
3.添加application.yml文件,编写下面的配置:
在这里插入图片描述

启动服务后,点击图中连接,跳转到Eureka注册中心

在这里插入图片描述

发现eurekaserver已经注册成功

在这里插入图片描述

2.注册不同的服务

1.添加依赖

	<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2.编写配置
在这里插入图片描述

模块全部启动后,进入Eureka注册中心发现服务全部注册成功

在这里插入图片描述

四.Eureka服务发现

服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡

步骤:
1.给RestTemplate添加@LoadBalanced注解
2.用服务提供者的服务名称远程调用(不使用完整ip地址,端口)

在这里插入图片描述
对于集群userservice,采用了负载均衡轮询访问两个不同端口的userservice服务器

五.Ribbon负载均衡

给RestTemplate添加@LoadBalanced注解后就实现了负载均衡,那么是谁在帮我们做这件事呢?答案就是Ribbon

1.Ribbon概述

NetflixRibbon 是一个开源的负载均衡项目,它属于 Netflix 的开源项目之一,用于在分布式系统中提供负载均衡的功能。Ribbon 主要用于客户端负载均衡,它可以在服务消费方的客户端上实现负载均衡,而不是集中在服务提供方。

以下是 Ribbon 的一些关键特性和工作原理:

  • 负载均衡算法: Ribbon 提供了多种负载均衡算法,例如轮询、随机、权重轮询等,以确保请求能够均匀地分布到不同的服务实例上。

  • 服务列表的动态获取: Ribbon 可以动态地从服务注册中心(如Eureka)获取服务实例列表,并实时更新这个列表,以确保负载均衡的精确性。

  • 容错机制: Ribbon 具有容错机制,可以在一些服务实例不可用的情况下自动剔除故障节点,并将请求转发到其他可用的节点。

  • 自定义规则: 用户可以根据自己的需求定制负载均衡的规则,以满足特定的业务场景。

  • 集成其他 Netflix 组件: Ribbon 通常与 Netflix 的其他组件(如 Eureka、Hystrix)一起使用,以构建完整的分布式系统解决方案。

2.负载均衡流程

在这里插入图片描述

3.负载均衡策略

在这里插入图片描述
在这里插入图片描述

通过定义IRule实现可以修改负载均衡规则,有两种方式:

  • 代码方式(可以用于整个微服务项目):在order-service中的OrderApplication类中,定义一个新的IRule:
@Bean
public IRule randomRule(){
    return new RandomRule();
}
  • 配置文件方式(只能作用于配置的服务者上):在order-service的application.yml文件中,添加新的配置也可以修改规则:

在这里插入图片描述

4.饥饿加载

Ribbon默认是采用懒加载第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载(order-service里的application.yml中):
在这里插入图片描述

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值