Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CircuitBreakerの適用
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yoshitomo Hayashi
February 28, 2017
0
1.7k
CircuitBreakerの適用
Yoshitomo Hayashi
February 28, 2017
Tweet
Share
More Decks by Yoshitomo Hayashi
See All by Yoshitomo Hayashi
Ameba DSPのOpen-Auctionにおける入札戦略
yyhayashi303
2
3k
進化する配信ロジックとDSP戦略
yyhayashi303
1
170
モブプロ導入で見えてきた効果@オレシカナイト
yyhayashi303
1
1.2k
CTRオンライン予測システムのアーキテクチャ
yyhayashi303
2
4.5k
Featured
See All Featured
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
51k
My Coaching Mixtape
mlcsv
0
69
Accessibility Awareness
sabderemane
0
77
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
130
Build your cross-platform service in a week with App Engine
jlugia
234
18k
RailsConf 2023
tenderlove
30
1.4k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
300
Designing for Timeless Needs
cassininazir
0
160
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Building Adaptive Systems
keathley
44
2.9k
Un-Boring Meetings
codingconduct
0
220
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Transcript
CircuitBreakerの適用 サイバーエージェント 林 欣朋
目次 • CircuitBreakerの説明 • 障害発生時のハンドリング • 運用・監視として使うCircuitBreaker • まとめ
CircuitBreakerとは Service-A Down Service-B Service-C マイクロサービスで繋がるシステム Service-Cがダウンした場合、障害が連鎖する Timeout Timeout
CircuitBreakerとは Service-A Down Service-B Service-C CircuitBreakerがService-Cの異常を検知し、経路を遮断することで障害の連鎖を防 ぐ Circuit Breaker
マーティン・ファウラー氏のブログ( https://martinfowler.com/bliki/CircuitBreaker.html) OSSの実装 - Java - https://github.com/Netflix/Hystrix - https://github.com/Comcast/jrugged -
Scala - https://github.com/FaKod/Circuit-Breaker-for-Scala - Ruby - https://github.com/wsargent/circuit_breaker/tree/master CircuitBreakerとは
CircuitBreakerのステータス • CLOSED ◦ リモートサービスへのリクエストを実行出来る • OPEN ◦ OPENの間はリモートサービスへのリクエストを実行出来ない •
HALF_OPEN ◦ リモートサービスへのリクエストを再試行し、成功した場合はステータスをリセットする
ステータスの遷移 HALF_OPEN CLOSED OPEN リクエストが失敗した場合 一定期間後HALF_OPEN へ 再試行が失敗した場合 再試行が成功した場合 初期状態
インターフェース interface CircuitBreaker { // リクエスト可能な場合にtrueを返す Boolean allowRequest(); // 処理が正常終了したことを記録する
void onSuccess(); // 処理が異常終了したことを記録する void onFailure(); }
使用例 if (circuitBreaker.allowRequest()) { try { // invoke remote service
circuitBreaker.onSuccess(); } catch (Exception e) { circuitBreaker.onFailure(); } } else { // CircuitBreaker OPEN }
設定値 // 処理を開始する最小リクエスト数 private Integer requestVolumeThreshold; // OPENとなるエラー率 private Integer
errorThresholdPercentage; // エラー率をチェックするデータの期間 private Integer checkDurationSecond; // OPENからHALF_OPENとなるまでの期間 private Integer openDurationSecond;
ステータスの遷移 HALF_OPEN CLOSED OPEN 直近30秒間のリクエストでエラー率が 50%を超えた場合 30秒間はOPEN その後HALF_OPENに 初期状態 再試行の結果、エラー率が
50%を超えた場合 再試行の結果、エラー率が 50%を下回った場合
CircuitBreaker作動イメージ Service-A Down Service-B Service-C 計測したエラー率からService-Cの異常を検知し、経路を遮断することで障害の連鎖 を防ぐ Circuit Breaker エラー率
> 50%
障害発生時のハンドリング① 例)ターゲティングServiceがダウンした場合 ターゲティングは出来ないので、ターゲティング設定がある広告は候補から除外して 処理を継続する
障害発生時のハンドリング② 例)リタゲの実績やフリークエンシーが取得できない場合 • リタゲ設定のある広告は除外して処理を継続する • フリークエンシーキャップ設定のある広告は除外して処理を継続する
障害発生時のハンドリング③ 例)ランキング用の広告の実績(imp/click)が取得できない場合 • ランダムで配信する • 予測CTRが使える場合は予測CTRでのランキングにする
監視を入れる あるサービスが復数のサービスと連携している時に、経路毎にCircuitBreakerの監 視があると、どこで問題が起きているのかがいち早くわかる。
ステータスを運用ツールから変更できる 運用ツールからCircuitBreakerのステータスを任意で変更できると、あるサービスへ の通信だけを止めたいといった運用が簡単に出来るようになる。
まとめ • CircuitBreakerを入れることで障害の連鎖を防ぐことが出来る • 障害発生時のハンドリングはそもそもちゃんとやっておく • 監視や運用のツールとしても使えるので有用