Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

5分で導入!Failurewall で障害対策

ScalaMatsuri 2016 ランチタイム LT の発表資料です。
Scala 標準ライブラリの Future にリトライ機能や Circuit Breaker 機能を導入するライブラリ、Failurewall の紹介です。

https://2016.scalamatsuri.org/
https://github.com/failurewall/failurewall
https://qiita.com/okumin/items/d7a108ea36f3ad2e3882

  • Login to see the comments

  • Be the first to like this

5分で導入!Failurewall で障害対策

  1. 1. 5分で導入! Failurewall で障害対策 @okumin
  2. 2. Who am I?  @okumin  https://twitter.com/okumin  https://github.com/okumin
  3. 3. akka-persistence-sql-async  Akka persistence のプラグイン  ScalikeJDBC-Async を使って作った  https://github.com/okumin/akka-persistence-sql-async
  4. 4. scalacture  Scala で様々なデータ構造を実装したいライブラリ  https://github.com/okumin/scalacture
  5. 5. ainterface  Akka の上で Erlang node が作れるライブラリ  https://github.com/ainterface/ainterface
  6. 6. 依存システムと障害
  7. 7. Web アプリ Redis MySQL Elasticsearch Twitter Facebook
  8. 8. Web アプリ Redis MySQL Elasticsearch Twitter Facebook
  9. 9. Failurewall
  10. 10. Failurewall  エラー処理をシンプルに取り扱うためのライブラリ  Hystrix にインスパイヤされた  https://github.com/failurewall/failurewall
  11. 11. 使い方 trait HTTPClient { def get(url: String): Future[HTTPResponse] } val client: HTTPClient = ??? // 何らかのエラー処理を行う Failurewall val wall: Failurewall[HTTPResponse, HTTPResponse] = ??? val actual: Future[HTTPResponse] = wall.call { client.get("https://twitter.com/okumin") }
  12. 12. 様々な壁
  13. 13. Retry  失敗したらとりあえずもう一回実行してみる  一時的なエラーであればリカバリーできる可能性が高い マイアプリケーション Twitter
  14. 14. Retry val system = ActorSystem("mofu") val strategy = ExponentialBackoffStrategy( minBackoff = 1.seconds, maxBackoff = 5.seconds ) val retry = AkkaRetryFailurewall[HTTPResponse]( maxTrialTimes = 5, strategy, system.scheduler, system.dispatcher )
  15. 15. Semaphore  同一リソースの同時使用数を制御  依存システムに大量のリクエストを送ってしまうことを防ぐ マイアプリケーション Twitter
  16. 16. Semaphore val executor: ExecutionContext = ??? val semaphore = StdSemaphoreFailurewall[HTTPResponse]( permits = 64, executor )
  17. 17. Circuit Breaker  障害を検知すると呼び出しを諦めてすぐにエラーを返す(fail-fast)  依存システムの障害が長引く場合の影響を最小限に CLOSED 正常モード HALF-OPEN 復旧確認モード OPEN fail-fast モード
  18. 18. Circuit Breaker val system = ActorSystem("mofu") val circuitBreaker = AkkaCircuitBreakerFailurewall[HTTPResponse]( system.scheduler, maxFailures = 16, callTimeout = 5.seconds, resetTimeout = 10.seconds, system.dispatcher )
  19. 19. Composable  もう何も怖くない val retry: Failurewall[HTTPResponse, HTTPResponse] = ??? val semaphore: Failurewall[HTTPResponse, HTTPResponse] = ??? val circuitBreaker: Failurewall[HTTPResponse, HTTPResponse] = ??? circuitBreaker compose semaphore compose retry
  20. 20. おわり  Failurewall  星をください  プルリクも大歓迎  https://github.com/failurewall/failurewall  あわせて読みたい  マイクロサービスにおける障害と Failurewall  http://qiita.com/okumin/items/d7a108ea36f3ad2e3882

×