ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

LEARN ENVOY - Circuit Breaking

Service Mesh / Envoy でもっとも実現したい機能の1つなのでちゃんと読んでいく。

www.envoyproxy.io


  • 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
      1. Break–on–latency / 前述したように、service is excessively slow, but not fully down の条件で設定しましょう
      1. Configure breaking based on a long queue of retries / retry の回数に応じて braking するのもまた有効です。max_retries パラメタを考慮して閾値を調整しましょう

明確に Down した場合よりは、Down してないけど遅いときが cascading failure を起こしてしまう、ほんとそれという感じ。 具体的な latency で cuicuit braking もきっとできると思うけど、遅い場合は結局 connections が滞留するので、ここで braking するのはなるほど合理的だと思いました。