Slide 1

Slide 1 text

©2022 RAKUS Co., Ltd. Javaで実現する フォールトトレランス 〜Resilience4jを使ったサーキットブレーカーの実装〜 株式会社ラクス 今野裕介

Slide 2

Slide 2 text

今野裕介(こんのゆうすけ) ● 株式会社ラクス所属 ● サーバーサイドエンジニア ● 楽楽勤怠の開発に従事 ● チーム内における役割 ○ 打刻機能をメインに新機能開発を担当 ○ 他にも開発プロセスの改善などいろいろやってます 2

Slide 3

Slide 3 text

サーキットブレーカーパターンとは ● マイクロサービスなどでカスケード障害に対応するために採用される ● 障害を検知したサービスへのリクエストを予め遮断する ○ 局所的な問題がシステム全体に波及しないようにする ○ 予め遮断することで応答が速くなる 3

Slide 4

Slide 4 text

Resilience4jの概要 ● Javaのフォールトトレラント用のライブラリ ○ サーキットブレーカー以外にもリトライ、流量制御、 タイムアウトハンドリングなどができる ● 各要素を組み合わせて適用できる ○ サーキットブレーカー+リトライなど ● 内部依存しているのはvavrのみ 4

Slide 5

Slide 5 text

サーキットブレーカーのステート ● CLOSED、OPEN、HALF_OPENの3つがある ○ CLOSED:ブレーカーは未稼働=すべてのリクエストが通る ○ OPEN:ブレーカーは稼働=すべてのリクエストを遮断 ○ HALF_OPEN:ブレーカーは半稼働=一部のリクエストだけ通す 5 CLOSED OPEN HALF_OPEN

Slide 6

Slide 6 text

実装のステップ ● 実装はたったの3ステップ ○ 設定を作る ○ リクエスト部分をデコレートする ○ デコレートした処理を実行する ● サーキットブレーカー以外も上記の方法で実現できる ○ また、複数のフォールトトレランスを組み合わせられる 6

Slide 7

Slide 7 text

コードサンプル(サーキットブレーカー) 7

Slide 8

Slide 8 text

リトライ ● デコレートした処理を指定回数だけやりなおす処理 ○ 偶発的な失敗をリカバリするのに向いている ● 実装方法はサーキットブレーカーと同様に3ステップ ○ 設定 => デコレーション => 実行 8

Slide 9

Slide 9 text

コードサンプル(リトライ) 9

Slide 10

Slide 10 text

コードサンプル(組み合わせ) 10

Slide 11

Slide 11 text

勤怠管理システムでの適用例 ● ICカード打刻機能で採用 ○ 専用端末によるICカード打刻用のマイクロサービス ○ 独立したインフラ・アプリケーションを構築している ● 勤怠管理本体に対してリクエストを送る際に適用 ○ 本体と通信が不通な場合に備え、パターン適用 ○ 他にはリトライも適用 11

Slide 12

Slide 12 text

勤怠管理システムでの適用例 ICカード 打刻端末 打刻アプリ ケーション 本体 同期バッチ ① ④ ② ③ A B サーキットブレーカー+リトライ リトライのみ 12

Slide 13

Slide 13 text

まとめ ● Resilience4jで簡単にサーキットブレーカーを実現できる! ● Resilience4jは適用も簡単! ○ 設定 => 対象処理のデコレート => 実行の3ステップ ○ 複数のフォールトトレランスの組み合わせもかんたん 13

Slide 14

Slide 14 text

ご清聴ありがとうございました!