8.11. Hystrix
概要
Camel 2.18 から利用可能です。
Hystrix パターンにより、アプリケーションを Netflix Hystrix と統合することができます。これにより、Camel ルートでサーキットブレーカーを提供することができます。hystrix は、レイテンシーとフォールトトレランスのライブラリーで、以下の目的で設計されています
- リモートシステム、サービス、およびサードパーティーライブラリーへのアクセスポイントを分離
- 失敗の連鎖を止める
- 障害を避けられない複雑な分散システムでの耐障害性を実現
Maven を使用する場合は、Hystrix を使用するために以下の依存関係を pom.xml ファイルに追加します。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-hystrix</artifactId>
<version>x.x.x</version>
<!-- Specify the same version as your Camel core version. -->
</dependency>Java DSL の例
以下は、インラインのフォールバックルートにフォールバックすることで、hystrix エンドポイントが遅い処理から保護されることを示すルートの例になります。デフォルトでは、タイムアウトリクエストは 1000ms であるため、HTTP エンドポイントは素早く応答する必要があります。
from("direct:start")
.hystrix()
.to("http://fooservice.com/slow")
.onFallback()
.transform().constant("Fallback message")
.end()
.to("mock:result");XML 設定の例
以下は、XML を使用した場合の同じ例になります。
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:start"/>
<hystrix>
<to uri="http://fooservice.com/slow"/>
<onFallback>
<transform>
<constant>Fallback message</constant>
</transform>
</onFallback>
</hystrix>
<to uri="mock:result"/>
</route>
</camelContext>Hystrix フォールバック機能の使用
onFallback() メソッドは、メッセージを変換したり、Bean などをフォールバックとして呼び出すことができるローカル処理用のものです。ネットワーク経由で外部サービスを呼び出す必要がある場合は、独自のスレッドプールを使用する独立した HystrixCommand オブジェクトで実行される onFallbackViaNetwork() メソッドを使用する必要があります。これにより、最初のコマンドオブジェクトを使い切ることはありません。
Hystrix の設定例
Hystrix には、次のセクションに記載されているように、多くのオプションがあります。以下の例は、実行タイムアウトをデフォルトの 1 秒ではなく 5 秒に設定し、サーキットブレーカーが 5 秒 (デフォルト) ではなく 10 秒待機してから、状態がオープンへ遷移したときにリクエストを再度試行する Java DSL を示しています。
from("direct:start")
.hystrix()
.hystrixConfiguration()
.executionTimeoutInMilliseconds(5000).circuitBreakerSleepWindowInMilliseconds(10000)
.end()
.to("http://fooservice.com/slow")
.onFallback()
.transform().constant("Fallback message")
.end()
.to("mock:result");以下は、XML を使用した場合の同じ例になります。
<camelContext xmlns="http://camel.apache.org/schema/spring">
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:start"/>
<hystrix>
<hystrixConfiguration executionTimeoutInMilliseconds="5000" circuitBreakerSleepWindowInMilliseconds="10000"/>
<to uri="http://fooservice.com/slow"/>
<onFallback>
<transform>
<constant>Fallback message</constant>
</transform>
</onFallback>
</hystrix>
<to uri="mock:result"/>
</route>
</camelContext>You can also configure Hystrix globally and then refer to that configuration. For example:
<camelContext xmlns="http://camel.apache.org/schema/spring">
<!-- This is a shared config that you can refer to from all Hystrix patterns. -->
<hystrixConfiguration id="sharedConfig" executionTimeoutInMilliseconds="5000" circuitBreakerSleepWindowInMilliseconds="10000"/>
<route>
<from uri="direct:start"/>
<hystrix hystrixConfigurationRef="sharedConfig">
<to uri="http://fooservice.com/slow"/>
<onFallback>
<transform>
<constant>Fallback message</constant>
</transform>
</onFallback>
</hystrix>
<to uri="mock:result"/>
</route>
</camelContext>オプション
Ths Hystrix コンポーネントは以下のオプションをサポートします。Hystrix はデフォルト値を提供します。
| 名前 | デフォルト値 | 型 | 説明 |
|---|---|---|---|
|
|
| ブール値 | サーキットブレーカーを使用して健全性を追跡し、トリップした場合にはショートサーキットリクエストを使用するかどうかを決定します。 |
|
|
| Integer | サーキットがトリップしてオープンになり、フォールバックロジックへのショートサーキットリクエストが開始されるエラーの割合 (パーセント) を設定します。 |
|
|
| ブール値 | true の値を指定すると、強制的にサーキットブレーカーをクローズ状態にします。そのため、エラーの割合に関係なくリクエストは許可されます。 |
|
|
| ブール値 | true の値を設定すると、サーキットブレーカーはすべてのリクエストを拒否するオープン (トリップ) 状態になります。 |
|
|
| Integer | サーキットをトリップさせるローリングウィンドウの最小リクエスト数を設定します。 |
|
|
| Integer | サーキットがトリップした後、リクエストを拒否する時間を設定します。この時間が経過すると、サーキットを再度クローズするかどうかを判断するためのリクエストが試行されます。 |
|
| Node ID | String | Hystrix コマンドを識別します。このオプションは設定できません。コマンドを一意にするのは常にノード ID です。 |
|
|
| Integer |
コアスレッドプールのサイズを設定します。これは、同時実行可能な |
|
|
| Integer |
|
|
|
| String |
|
|
|
| ブール値 |
タイムアウトの発生時に |
|
|
| Integer | 実行完了までのタイムアウトをミリ秒単位で設定します。 |
|
|
| ブール値 |
|
|
|
| ブール値 |
失敗または拒否が発生した場合に |
|
|
| Integer |
|
|
|
| String | 統計情報とサーキットブレーカー のプロパティーを関連付けるために使用される Hystrix グループを識別します。 |
|
|
| Integer | keep-alive 時間 (分単位) を設定します。 |
|
|
| Integer |
|
|
|
| Integer | Health Snapshot を取得できるようにする間隔 (ミリ秒単位) を設定します。Health Snapshot は、成功とエラーの割合を算出し、サーキットブレーカーのステータスに影響を与えます。 |
|
|
| Integer | バケットごとに保持される実行回数の最大値を設定します。時間内により多くの実行が発生した場合はラップされ、バケットの先頭から上書きを開始します。 |
|
|
| ブール値 | 実行レイテンシーを追跡するかどうかを示します。レイテンシーはパーセント値として計算されます。false を指定すると、サマリー統計 (平均値、パーセント) が -1 として返されます。 |
|
|
| Integer |
|
|
|
| Integer | パーセント計算をするために実行時間が保持されるローリングウィンドウの期間 (ミリ秒単位) を設定します。 |
|
|
| Integer | ローリング統計ウィンドウを分割するバケット数を設定します。 |
|
|
| Integer |
このオプションと以下のオプションは、 |
|
|
| Integer |
拒否するためのしきい値をキューへ設定します。 |
|
|
| ブール値 |
|
|
|
| String | このコマンドを実行するスレッドプールを定義します。デフォルトでは、グループキーと同じキーを使用します。 |
|
|
| Integer | ローリング統計ウィンドウを分割するバケット数を設定します。 |
|
|
| Integer | 統計ローリングウィンドウの期間をミリ秒単位で設定します。スレッドプール用にメトリクスが保持される期間です。 |