builders.flash✨ サーバーレスにおけるべき等性の実装 (メッセージ編) サーバーレスが気になる開発者に捧ぐ「べき等性」ことはじめ 第 2 回

builders.flash✨ サーバーレスにおけるべき等性の実装 (メッセージ編) サーバーレスが気になる開発者に捧ぐ「べき等性」ことはじめ 第 2 回

このシリーズの第一回では、べき等性とは何かについて紹介しました。べき等性とは「ある操作を 1 回行っても複数回行っても結果が同じである」という概念で、例えば実数の乗算では 0 と 1 がべき等になります (ある数字に 0 または 1 を何回掛けても同じ結果になる)。前回の記事では注文処理の例、障害復旧時のフロー処理の例でべき等性の考え方を紹介し、べき等性を保証する実装の典型的な基本パターンとして、①入力時チェック方式、②出力時チェック方式、③トランザクション型への処理への対応について説明しました。本シリーズでは AWS のサーバーレスサービスの利用を前提に、べき等性を実現する具体的な実装について紹介します。べき等性の実現には考慮すべき点が多いため、個別のユースケースを取り上げながら、どのようにべき等性を実装するかについて、これから数回に分けて解説していきます。

builders.flash✨ サーバーレスにおけるべき等性の実装 (メッセージ編) サーバーレスが気になる開発者に捧ぐ「べき等性」ことはじめ 第 2 回

第一回の記事 では、クライアントからバックエンドのサービスを利用する際に、リトライ処理によって重複したリクエストを送信する可能性があることを説明しました。例えば、商品の注文情報を注文サービスに依頼するために注文のメッセージを送信するような場合、クライアント側の処理で何らかのエラーが発生してリトライ処理が行われると、同じ注文メッセージが複数注文サービスに送信される可能性があります。

第二回の本記事では、そのような場合のべき等性の実装について取り上げます。ここでは、上記で紹介した①入力時のチェック方式として、そもそものデータの重複を避ける手段を取り上げます。送信時のリトライ処理によって発生するデータの重複をデータストアに書き込む前に排除してしまう考え方です。本記事では、このメッセージの重複排除にフォーカスし、AWS のサービスを利用してどのようにメッセージの重複排除を行うのかを説明をしたいと思います。

クライアントからメッセージを送信する時に利用可能な AWS のサービスには、Amazon Simple Notification Service (以下 Amazon SNS) と Amazon Simple Queue Service (以下 Amazon SQS) があります。本記事では、これら Amazon SNS と Amazon SQS を利用してメッセージの重複を排除する方法について紹介します。入力の重複をチェックする方法は様々ですが、自分で実装する代わりに、Amazon SNS や Amazon SQS の機能を利用することで、より簡単に重複排除を実装することができます。