Service Mesh / Envoy でもっとも実現したい機能の1つなのでちゃんと読んでいく。
- microservices の文脈では cascading failure を避けるために circuit breaking 重要よ
- envoy では cluster 単位で circuit breakers field を使って設定するよ
- 設定例はそのまんまという感じ、priority で threashold をグルーピングできるので、例えば High は POST のリクエストなどができそうな雰囲気
- http/1.1 と http/2 では挙動が違うので、設定もそれぞれ対応したものを使う
- http/1.1 は max_connections
- http/2 は max_requests
- 適切な threshold は request 数と latency の2つに依存する
- この例だと、この設定は 10 seconds * 2000 までの間で検討しましょう
- 実際にはどのぐらいの spike がくるかの期待と、どれだけ overprovision しておくかによります
- Advanced circuit braking
- Break–on–latency / 前述したように、service is excessively slow, but not fully down の条件で設定しましょう
- Configure breaking based on a long queue of retries / retry の回数に応じて braking するのもまた有効です。max_retries パラメタを考慮して閾値を調整しましょう
明確に Down した場合よりは、Down してないけど遅いときが cascading failure を起こしてしまう、ほんとそれという感じ。 具体的な latency で cuicuit braking もきっとできると思うけど、遅い場合は結局 connections が滞留するので、ここで braking するのはなるほど合理的だと思いました。