Spring Cloud Eurekaによる高可用サービスレジストリの構築

Spring Cloudの概要

Spring CloudはSpring Boot上に構築された分散システム開発のためのツールセットであり、開発者が分散システムにおける一般的なパターンを迅速に実装することを支援します。

主な機能として、設定管理、サービスディスカバリ、サーキットブレーカー、インテリジェントルーティング、マイクロプロキシ、コントロールバス、ワンタイムトークン、グローバルロック、リーダー選出、分散セッション、クラスタ状態管理などが含まれます。

マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャは、単一のアプリケーションを小さなサービスの集合として開発する手法です。各サービスは独立したプロセスで動作し、HTTPリソースAPIなどの軽量なメカニズムを通じて通信します。これらのサービスはビジネス機能に基づいて構築され、完全自動デプロイメカニズムにより独立してデプロイ可能です。

Eurekaの基本概念

EurekaはNetflixが開発したサービス登録と発見のためのオープンソース製品で、完全なService RegistryとService Discoveryの実装を提供します。Spring Cloudシステムにおいて最も重要なコアコンポーネントの一つです。

Eurekaは主に二つのコンポーネントで構成されます:EurekaサーバーとEurekaクライアントです。Eurekaサーバーはサービス登録サーバーとして機能し、EurekaクライアントはJavaクライアントとしてサーバーとの相互作用を簡素化し、ロードバランサーとして機能し、サービスのフェイルオーバーサポートを提供します。

開発環境の設定

必要な環境

  • JDK 1.8以上
  • Spring Boot 2.1.1.RELEASE
  • Spring Cloud Finchleyリリース

Maven依存関係の設定:

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

Eurekaサーバーの実装

application.propertiesの設定:

spring.application.name=eureka-registry-server
server.port=8000
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.default-zone=http://localhost:8000/eureka/

設定項目の説明:

  • spring.application.name: サービス名の指定
  • server.port: サービスポート番号
  • eureka.client.register-with-eureka: 自身をEureka Serverに登録するかどうか
  • eureka.client.fetch-registry: 登録情報をEureka Serverから取得するかどうか
  • eureka.client.service-url.default-zone: Eureka Serverとの通信アドレス

起動クラスの実装:

@EnableEurekaServer
@SpringBootApplication
public class RegistryServer {
    public static void main(String[] args) {
        SpringApplication.run(RegistryServer.class, args);
    }
}

Eurekaクライアントの実装

application.propertiesの設定:

spring.application.name=service-client
server.port=9001
eureka.client.service-url.default-zone=http://localhost:8000/eureka/

起動クラスの実装:

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceClient {
    public static void main(String[] args) {
        SpringApplication.run(ServiceClient.class, args);
    }
}

高可用性レジストリの構成

複数のEurekaサーバーを相互登録することで高可用性を実現します。

サーバー2の設定例:

spring.application.name=eureka-cluster
server.port=8002
eureka.instance.hostname=node2
eureka.client.service-url.default-zone=http://node3:8003/eureka/

サーバー3の設定例:

spring.application.name=eureka-cluster
server.port=8003
eureka.instance.hostname=node3
eureka.client.service-url.default-zone=http://node2:8002/eureka/

ホストファイルの設定(Windowsの場合):

127.0.0.1    node2
127.0.0.1    node3

Eurekaの保護メカニズム

Eurekaはネットワーク異常に対する保護メカニズムを備えており、15分以内に85%以上のクライアントノードが正常なハートビートを送信しない場合、自己保護モードに入ります。

主要な設定パラメータ:

  • eureka.server.enable-self-preservation: 自己保護機能の有効/無効
  • eureka.server.eviction-interval-timer-in-ms: 失效サービスチェック間隔
  • eureka.instance.lease-renewal-interval-in-seconds: ハートビート送信間隔
  • eureka.instance.lease-expiration-duration-in-seconds: インスタンス削除までの待機時間

タグ: Spring Cloud Eureka サービスディスカバリ マイクロサービス 高可用性

6月21日 01:07 投稿