Bonfire API #1 APIのリトライ処理

199 Views

February 05, 18

スライド概要

Bonfire API #1 「APIの役割の多様化」において発表された資料です。

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

APIのリトライ処理 2018年2月5日 山内晨吾 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

2.

自己紹介 8pockets (山内晨吾) ヤフオク!アプリ開発部 業務で触る言語は Swift、Go、C++、PHP 2 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

3.

目次 ・ヤフオク!の設計 ・耐久性向上について ・デモ 3 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

4.

ヤフオク!の設計 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

5.

ヤフオク! の開発 大規模なシステムリニューアル真っ最中 今まで使ってきたレガシー環境を脱却して、 新たな言語やPFに移行している。 新たなシステム設計思想やパターンを適用してコン テナに載せ替えている。 5 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

6.

ヤフオク! の設計思想 マイクロサービス化にあたって、開発のしやすさや拡張のしやすさ を考えて レイヤーを分けてサービスの設計をしている。 Frontend スマホ、PC、パートナー向けツール Service 出品、落札、検索、レコメンド DataAccess 出品PF、ユーザーPF、課金PF Database DB、ストレージ 6 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

7.

ヤフオク! の設計思想 きまり ・必ず各レイヤーを通してデータを引くこと ・自分と同じレイヤーのAPIは叩いてはいけない 独立した単機能になるように努力する。 ・コンポーネントの役割を明確にして 疎結合にすること。 課題点 ・レイヤー化することによるレイテンシの増加がおこり システムが不安定になるのではないか・・? 7 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

8.

耐久性向上 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

9.

耐久性向上 クライアントからサーバーにリクエストする際、 サーバーが落ちている場合、 クライアントで最適なリトライ処理を行いたい。 Circuit Breaker / Exponential Backoff を用いて実現。 9 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

10.

Circuit Breaker ある処理のエラー頻度が閾値を超えたら、 実際にサーバーへリクエストせずに即座にエ ラーを返すパターン 10 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

11.

Circuit Breaker 規定の回数失敗したら起動 11 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

12.

Circuit Breaker なにがいいのか タイムアウト待ちを省略してエラーを返却できるので システム全体の負荷が下がる。 発動時にはアラートで通知することが大事。 システムが復帰した時には、リトライ処理を行うことでリクエストが 再開される 12 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

13.

Exponential Backoff Exponential Backoff (指数関数的後退) リトライの待機時間を失敗回数が増えるに連れて、 指数関数的に増やすアルゴリズム さらに衝突の連続を防ぐために遅延をランダム化。(Jitter) リトライにより後に成功する可能性が高いリクエストを 救える。 13 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

14.

Exponential Backoff アルゴリズム例 ・サーバーへのリクエストが失敗 ・0.5秒待って、リクエストを再試行 ・1.0秒待って、リクエストを再試行 ・2.0秒待って、リクエストを再試行 ・4.0秒待って、リクエストを再試行 ・設定した最大待機時間まで増加を繰り返す 14 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

15.

Exponential Backoff なにがいいのか 長期障害発生時にシステムへの不必要な負担を軽減 大規模分散システム内では常に部分障害が発生しているた め、運用コストを削減するためのパターン 15 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

16.

実演 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

17.

取り組みの効果 APIリクエスト先は1つではなく、別部署や、全社PFだったり 色々。 リクエスト先の異常も自分たちで出来る限りコントロールできる。 事故の早期発見に繋がり、原因も分かりやすくなった。 アラートが減り、不要な通知が減ったため、対応するタスクが より明確になった。 17 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

18.

おわり Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.