Eureka注册中心原理、作用、实现

Eureka:

提供者与消费者:

  • 服务提供者:暴露接口给其他微服务调用。
  • 服务消费者:调用其他服务提供的接口。
  • 提供者与消费者角色其实是相对的。

Eureka注册中心:

原理:
  • Eureka有服务端与客户端 ,在微服务启动时会将自己的信息注册给eureka服务端(注册服务信息)
  • 消费者向服务提供者发起请求时先向注册中心发起请求获取提供者信息。(拉取服务)
  • 服务每隔30秒会向注册中心发送一次心跳用以确认自己的状态。  以保证消费者每次获取到的提供者信息都是可用的。
  • 在负载均衡的前提下向提供者发起请求
搭建注册中心:

搭建EurekaServer

  • 创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖

     <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
     </dependency>
    
  • 在启动类上添加@EnableEurekaServer注解

    @EnableEurekaServer
    @SpringBootApplication
    public class eurekaApplication {
        public static void main(String[] args) {
            SpringApplication.run(eurekaApplication.class,args);
        }
    }
    
  • 添加application.yml文件,编写配置

    server:
      port: 10086  #服务端口
    spring:
      application:
        name: eureka-serve  #服务名称
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka   #eureka服务地址
    
服务注册:
  • 将某服务注册到EurekaServer需要

    1. 在服务项目中引入spring-cloud-starter-netflix-eureka-client的依赖

       <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
              </dependency>
      
    2. 在application.yml文件中,增加(补全)如下配置:

      spring:
        application:
          name: userservice  #服务名称
      eureka:
        client:
          service-url:
            defaultZone: http://127.0.0.1:10086/eureka   #eureka服务地址
      
服务发现:
  1. 修改消费者服务的拉取代码,修改访问的URL路径,用服务名代替ip、端口。

     String url = "http://usersercice/user/"+order.getUserId();
    //        get请求
            User forObject = restTemplate.getForObject(url, User.class);
    //        post请求
    //        User user = restTemplate.postForObject(url, 1, User.class);
    
  2. 在消费者启动类的RestTemplate上添加负载均衡注解。

        @Bean  //Bean注入
        @LoadBalanced  //负载均衡注解
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    

Ribbon负载均衡:

原理:

  1. 发起请求(http://服务名称/…)
  2. 被LoadBalancerInterceptor负载均衡拦截器拦截。(获得请求中的服务名称)
  3. 将获得的服务名称交给RibbonLoadBanlancerClient
  4. RibbonLoadBanlancerClient将服务交给DynamicServerListLoadBalancer
  5. DynamicServerListLoadBalancer从eureka-server拉取服务列表
  6. 将获取到的服务列表交给IRule,IRule基于规则(随机,轮询)挑一个 ,并将选中的交给LoadBalancerInterceptor,
  7. LoadBalancerInterceptor将得到的端口替换原来的请求中的服务名称并继续完成请求。

策略:

Ribbon的负载均衡规则时一个叫做IRule的接口来定义的,每一个子接口都是一种规则:

内置负载均衡规则类规则描述
RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负裁均衡规则。
AvailabilityFilteringRule对以下两种服务器进行忽略:(1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。(2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽骆。并发连接数的上限,可以由客户端的clientName>,,Active ConnectionsLimit属性进行配置。
WeightedResponseTimeRule为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule忽路哪些短路的服务器,并选择并发数较低的服务器。
RandomRule随机选择一个可用的服务器
RetryRule重试机制的选择逻辑
  • 修改负载均衡规格的方式
    1. 在服务的启动类中定义一个新的IRule:

       /**
           * 全局的负载均衡配置
           * @return 负载均衡的策略
           */
          @Bean
          public IRule randomRule(){
              return new ZoneAvoidanceRule();//同机房内的轮询
          } 
      
    2. 配置文件方式:在消费者的application.yml文件中,添加新的配置也可以修改规则:

      usersercice: #争对的服务名
        ribbon:
          NFLoadBalancerRuleClassName: com.netflix.Loadbalancer.RandomRuLe #负载均衡规则
      

懒加载:

Ribbon默认是采用懒加载,即第一次访问时会去创建LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载。

ribbon:
  eager-load:
    enabled: true #开启饥饿加载
    clients: userservice #只有一个服务时
#有多个服务时
#    clients:
#      - userservice
#      - xxxservice
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Eureka是Netflix开源的一个服务注册与发现组件,用于构建基于云平台的动态可伸缩的微服务架构。下面是Eureka注册中心原理: 1. 服务注册:当一个微服务启动时,它会向Eureka注册中心发送注册请求,包含服务的元数据信息,如服务名称、IP地址、端口号等。Eureka注册中心会将这些信息保存起来,并维护一个服务实例列表。 2. 服务发现:当一个微服务需要调用其他服务时,它会向Eureka注册中心发送服务发现请求,指定要调用的服务名称。Eureka注册中心会返回所有提供该服务的微服务实例的地址列表。微服务可以根据这些地址进行负载均衡和调用。 3. 心跳与健康检查:为了保证注册中心的可靠性和及时更新服务状态,Eureka采用了心跳与健康检查机制。每个微服务会定时向Eureka发送心跳请求,以表明自己的健康状态。如果一个微服务长时间未发送心跳或被标记为不可用,Eureka将从服务列表中移除该实例。 4. 服务复制和高可用:Eureka采用了主从节点的架构,每个区域都有一个主节点和多个从节点。主节点负责处理注册、发现等请求,从节点用于缓存主节点的数据,以提高性能。如果主节点失效,从节点会自动接管,保证注册中心的高可用性。 5. 自我保护机制Eureka还具有自我保护机制,用于防止网络故障导致的注册中心信息不一致。当Eureka服务器在一定时间内收到较少的心跳时,它会进入自我保护模式,不会删除任何服务实例,以避免误删正常服务。自我保护模式下,Eureka仍然接受注册和发现请求。 总结来说,Eureka注册中心通过服务注册和发现的机制实现了微服务架构中的服务管理和调用。它能够帮助开发者更方便地实现服务的注册、发现和高可用性管理,提供了强大的服务治理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值