web-dev-qa-db-ja.com

サードパーティシステムAPIタイムアウトの処理方法

私の会社では、次のような異なるサードパーティシステムを使用しています。

  • お客様に関する情報を同期するCRM。目標は、1対1の同期を取ることです。
  • お客様にメールを送信できるトランザクションメールシステム。

現在、これらのシステムには1秒あたりの要求の固定しきい値があるため、いくつかのタイムアウトが発生しています。

これらのタイムアウトをどのように処理しますか?たとえば、送信できないメールをDBに保存し、スケジュールされた関数がそれらを取得して、もう一度送信しようとしました。

RateLimiter も使用しようとしましたが、アプリケーションの複数のインスタンスをスケールアップしようとすると、正しく機能しません。

しかし、これらのエラーを処理する適切な方法はありますか?それは本当によくある問題のようです、多分考慮すべきパターンがあるでしょう。これらのシステムは、ストリーミングまたはバルクAPIをサポートしていません。

3
lmarx

サーキットブレーカー の実装を検討してください。これにより、サードパーティがリクエストを再試行できるようになるタイミングがわかります。

アプリケーションが1秒あたり100回データベースに接続し、データベースに障害が発生したとします。アプリケーション設計者は、同じエラーが繰り返し発生することを望んでいません。また、TCP接続タイムアウトを待たずに、エラーを迅速かつ適切に処理したいと考えています。

一般に、サーキットブレーカーを使用して、外部サービスの可用性を確認できます。外部サービスは、アプリケーションで使用されるデータベースサーバーまたはWebサービスです。

サーキットブレーカーは障害を検出し、アプリケーションが失敗する運命にあると思われるアクションを実行しようとするのを防ぎます(再試行しても安全になるまで)。

1
user7294900