Spring Cloud Eureka: サービスの検出と負荷分散を簡素化するための完璧なツール

Spring Cloud Eureka は、Spring Cloud が提供するサービス検出コンポーネントであり、分散システムでサービスの登録と検出を構築するのに役立ちます。これは Netflix の Eureka プロジェクトに基づいて開発されましたが、Eureka とは異なり、Spring Cloud エコシステムの一部であり、Spring Boot アプリケーションがサービスを検出する簡単な方法を提供します。

Spring Cloud Eureka は、分散システムにおけるサービスの検出と負荷分散を簡素化することを目的としています。これは、アプリケーションが起動時に自分自身を登録し、失敗時にそれらを排除できるようにするサービスの集中型レジストリを提供します。一方、クライアントはこのレジストリにクエリを実行して、利用可能なサービスの場所を見つけ、負荷分散アルゴリズムを使用してその中から 1 つを選択できます。

Spring Cloud Eureka は、マイクロサービス アーキテクチャを構築するための理想的なツールであり、複雑な分散システムでのサービスの検出、負荷分散、および柔軟な拡張を簡単に実現できます。同時に、Spring Cloud Eureka は、Config Server や Zuul ゲートウェイなどの他の Spring Cloud コンポーネントと統合することもできます。

Spring Cloud Eureka の基礎

Spring Cloud Eureka の基本原則には、主にサービス登録、サービス検出、および負荷分散の 3 つの側面が含まれます。それらを個別に紹介しましょう:

  1. サービス登録

Spring Cloud Eureka では、サービス提供者は起動時にアプリケーション名、IP アドレス、ポート番号などの独自の情報を Eureka Server に登録する必要があります。Eureka Server は、この情報をレジストリに記録し、ハートビート タイムアウト期間内にサービス プロバイダーから定期的にハートビート リクエストを受信して​​、サービスの可用性を確保します。

  1. サービス発見

サービス コンシューマが Eureka Server へのサービス呼び出し要求を開始すると、Eureka Server のレジストリにクエリを実行して、利用可能なサービスの場所を見つけます。Eureka Server は、利用可能なサービス インスタンスのセットを返し、クライアントの負荷分散アルゴリズムを介して選択し、それらの 1 つをサービス呼び出しのターゲットとして選択します。

  1. 負荷分散

Spring Cloud Eureka还提供了一种简单但有效的负载均衡机制,可以在消费者和服务提供者之间实现请求的均衡分配。这种机制基于客户端负载均衡,它使用负载均衡算法来选择可用服务实例中的一个作为服务调用的目标,从而在多个服务实例之间实现请求的均衡分配。

如何使用Spring Cloud Eureka

1. 创建服务提供者

将Spring Cloud Eureka客户端依赖项添加到项目的pom.xml文件中

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

然后,在应用程序的主类上添加@EnableDiscoveryClient注解,以启用Eureka客户端。

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceProviderApplication.class, args);
    }

}
复制代码

现在,我们需要在应用程序中注册服务。在应用程序的配置文件中添加以下配置:

spring:
  application:
    name: service-provider
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
复制代码

在这个示例中,我们将应用程序的名称设置为“service-provider”,并将Eureka服务器的位置设置为“http://localhost:8761/eureka/”。

接下来,我们需要提供一个REST API来响应服务调用请求。在应用程序中添加以下代码:

@RestController
public class ServiceController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello World!";
    }

}
复制代码

2. 创建服务消费者

接下来,我们需要创建一个服务消费者。创建Spring Boot应用程序后,我们需要将Spring Cloud Eureka客户端依赖项添加到项目的pom.xml文件中。

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

然后,在应用程序的主类上添加@EnableDiscoveryClient注解,以启用Eureka客户端。

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumerApplication.class, args);
    }

}
复制代码

现在,我们需要在应用程序中使用RestTemplate来调用服务提供者。在应用程序中添加以下代码:

@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/hello")
    public String hello() {
        String url = "http://service-provider/hello";
        return restTemplate.getForObject(url, String.class);
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}
复制代码

在这个示例中,我们注入了一个RestTemplate bean,并使用它来调用服务提供者的/hello路径。这个示例中的服务提供者名称是“service-provider”,它已经在Eureka服务器上注册。

3. 启动Eureka服务器

在使用Spring Cloud Eureka时,我们需要启动一个Eureka服务器。使用Spring Boot创建一个Eureka服务器应用程序,并在应用程序的主类上添加@EnableEurekaServer注解以启用Eureka服务器。

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

     public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
复制代码

Eureka客户端配置

在应用程序中,您需要配置Eureka客户端以便它可以向Eureka服务器注册和发现其他服务。下面是一些常用的配置项:

  • eureka.client.service-url.defaultZone:设置Eureka服务器的位置。默认值为http://localhost:8761/eureka/
  • eureka.instance.prefer-ip-address:如果为true,则服务实例将使用IP地址而不是主机名注册。默认值为false。
  • eureka.instance.hostname:设置服务实例的主机名。如果未设置,则使用本地主机名。
  • eureka.instance.ip-address:设置服务实例的IP地址。如果未设置,则使用本地IP地址。
  • eureka.instance.port:设置服务实例的端口号。默认值为8080。
  • eureka.instance.status-page-url:设置服务实例的状态页URL。
  • eureka.instance.health-check-url:设置服务实例的健康检查URL

Eureka服务器配置

在启动Eureka服务器之前,您需要在应用程序的配置文件中配置一些属性。下面是一些常用的配置项:

  • eureka.server.enable-self-preservation:如果为true,则Eureka服务器将保护自己。默认值为true。
  • eureka.server.eviction-interval-timer-in-ms:设置Eureka服务器的清理间隔。默认值为60000毫秒。
  • eureka.server.renewal-percent-threshold:设置服务实例的续订阈值。默认值为0.85。
  • eureka.server.response-cache-update-interval-ms:设置Eureka服务器的响应缓存更新间隔。默认值为30000毫秒。
  • eureka.server.max-idle-thread-in-minutes-age-for-status-replication:设置状态复制的最大空闲线程年龄(分钟)。默认值为10分钟。

おすすめ

転載: juejin.im/post/7229498604367773756