Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CircuitBreakerの適用
Search
Yoshitomo Hayashi
February 28, 2017
1.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CircuitBreakerの適用
Yoshitomo Hayashi
February 28, 2017
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
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5k
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
A Tale of Four Properties
chriscoyier
163
24k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
750
What's in a price? How to price your products and services
michaelherold
247
13k
Abbi's Birthday
coloredviolet
4
10k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Side Projects
sachag
456
43k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
490
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.1k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
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を入れることで障害の連鎖を防ぐことが出来る • 障害発生時のハンドリングはそもそもちゃんとやっておく • 監視や運用のツールとしても使えるので有用