HystrixとTurbineを用いたサービスモニタリングの実装

マイクロサービスアーキテクチャにおけるHystrixおよびTurbineの活用方法について解説します。この記事では、Hystrixの基本設定やサービスのデグレード処理、そしてTurbineを使った複数サービスの集約監視に焦点を当てます。

Hystrixによる回路遮断の概念

Hystrixは、システム全体の安定性を保つために特定の部分で問題が発生した場合にその影響を最小限に抑えるためのライブラリです。これにより、1つのサービスの障害が他のサービスにも波及する「雪崩効果」を防ぐことができます。

Hystrixの基本設定

まず、プロジェクトにHystrixを導入するためにpom.xmlファイルに以下の依存関係を追加します。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
次に、サービスクラス内でHystrixを使用してエラーハンドリングを行います。
@RestController
public class ServiceController {
    @GetMapping("/service/{id}")
    @CircuitBreaker(name = "default", fallbackMethod = "fallback")
    public ResponseEntity<ServiceDTO> getService(@PathVariable Long id) {
        // サービス呼び出しロジック
    }

    public ResponseEntity<ServiceDTO> fallback(Long id, Throwable t) {
        ServiceDTO dto = new ServiceDTO();
        dto.setId(9999L);
        dto.setName("Error: Service Unavailable");
        return ResponseEntity.ok(dto);
    }
}

サービスデグレード(Fallback)

サービスデグレードは、提供側のサービスが利用不能な場合に代替処理を提供する機能です。以下はFeignClientを使ってサービスデグレードを行う例です。
@FeignClient(name = "service-provider", fallbackFactory = ServiceProviderFallback.class)
public interface ServiceProvider {
    @GetMapping("/service/{id}")
    ServiceDTO getService(@PathVariable Long id);
}

@Component
class ServiceProviderFallback implements FallbackFactory<ServiceProvider> {
    @Override
    public ServiceProvider create(Throwable cause) {
        return id -> {
            ServiceDTO dto = new ServiceDTO();
            dto.setId(-1L);
            dto.setName("Fallback Service");
            return dto;
        };
    }
}

HystrixDashboardによるサービスモニタリング

HystrixDashboardは、Hystrixを使用する各サービスの状態をリアルタイムで可視化するためのダッシュボードです。 1. プロジェクトのpom.xmlに以下の依存関係を追加します。
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
2. アプリケーションクラスに@EnableHystrixDashboardアノテーションを追加します。
@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardApplication {
    public static void main(String[] args) {
        SpringApplication.run(HystrixDashboardApplication.class, args);
    }
}

Turbineによる複数サービスの集約監視

Turbineは、複数のHystrixストリームを集約して一元的に監視できるようにするツールです。 1. Turbineモジュールを作成し、必要な依存関係を追加します。
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
2. application.ymlにTurbineの設定を追加します。
turbine:
  appConfig: service-provider,another-service
  clusterNameExpression: "'default'"
3. Turbineアプリケーションクラスを作成します。
@SpringBootApplication
@EnableTurbine
public class TurbineApplication {
    public static void main(String[] args) {
        SpringApplication.run(TurbineApplication.class, args);
    }
}
これにより、複数のサービスのHystrixデータを集約して監視することが可能になります。

タグ: Hystrix Turbine SpringCloud サービスモニタリング

7月29日 22:25 投稿