Solr 9.4 で Circuit Breaker にいろいろと変更が加えられました。以前の記事で取り上げたときとは変わったところも多いです。
- CPUCircuitBreakerが名前の通りCPU使用率をチェックするようになりました。以前はCPUと言いつつ実際にはロードアベレージをチェックしていました
- ロードアベレージをチェックする Circuit Breaker は LoadAverageCircuitBreaker になりました
- 検索リクエストだけでなく更新リクエストにも効くようになりました
これらの変更に伴い設定方法が変更になっています。
CPUCircuitBreaker
クラス名と閾値を指定します。たとえば以下のように指定すると、CPU使用率75%を超えたら発動します。
<circuitBreaker class="org.apache.solr.util.circuitbreaker.CPUCircuitBreaker">
<double name="threshold">75</double>
</circuitBreake>
LoadAverageCircuitBreaker
クラス名と閾値を指定します。たとえば以下のように指定すると、ロードアベレージ8.0を超えたら発動します。
<circuitBreaker class="org.apache.solr.util.circuitbreaker.LoadAverageCircuitBreaker">
<double name="threshold">8.0</double>
</circuitBreaker>
MemoryCircuitBreaker
クラス名と閾値を指定します。たとえば以下のように指定するとメモリ使用率75%を超えたら発動します。
<circuitBreaker class="org.apache.solr.util.circuitbreaker.MemoryCircuitBreaker">
<double name="threshold">75</double>
</circuitBreaker>
リクエストタイプの指定
リクエストタイプとして search, update を指定できます。上記の例のようにリクエストタイプをしない場合はデフォルトとして search が指定されたことになります。search, update それぞれに別の閾値を設定することもできます。
以下の例の場合、CPU使用率が80%を超えたら更新リクエストの受付を停止し、95%を超えたら検索リクエストを停止するという設定になります。
<config>
<circuitBreaker class="solr.CPUCircuitBreaker">
<double name="threshold">80</double>
<arr name="requestTypes">
<str>update</str>
</arr>
</circuitBreaker>
<circuitBreaker class="solr.CPUCircuitBreaker">
<double name="threshold">95</double>
<arr name="requestTypes">
<str>query</str>
</arr>
</circuitBreaker>
</config>