📚

Amazon SQSの超詳細解説

2023/12/12に公開

はじめに

この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧はこちら

この記事ではAmazon SQSに関連する内容を超詳細にまとめています。

具体的には以下流れで説明します。

  • Amazon SQSとは
  • Amazon SQSの仕組み
  • Amazon SQS for Advance
  • Amazon SQSのベストプラクティス

AWSの区分でいう「Level 200:トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

この記事を読んでほしい人

  • Amazon SQSがどういうサービスか説明できるようになりたい人
  • Amazon SQSを採用するときのベストプラクティスを説明できるようになりたい人
  • AWS Certified DevOps Engineer Professionalを目指している人

Amazon SQSとは

Amazon SQSとは、AWSが提供するメッセージキューイングサービスです。
メッセージキューイングとは、アプリケーション間でメッセージをやり取りする仕組みのことで、メッセージは一時的にキューと呼ばれる場所に格納されます。

Amazon SQSを使うと、アプリケーションはメッセージの送受信を簡単に行うことができます。
また、Amazon SQSはフルマネージドなサービスなので、キューの作成や管理、スケーリングなどを自動的に行ってくれます。

Amazon SQSの仕組み

Amazon SQSでは、メッセージは基本的にキューに送られた順番に処理されます。

しかし、実際には、ネットワークの遅延やサーバーの障害などの理由で、メッセージの順番が入れ替わることがあり、これをメッセージのジッターと呼びます。
Amazon SQSの場合、標準キューだとこのジッターの影響を受ける可能性があり順序は保証されません。

メッセージのジッターが許容できない場合は、FIFOキューという特別なタイプのキューを使うことができます。
FIFOキューでは、メッセージの順番が保証されるだけでなく、重複したメッセージも排除されます。

Amazon SQSでは、メッセージは可視性タイムアウトという期間内に処理される必要があります。
可視性タイムアウトとは、メッセージがキューから受信された後に、他の受信者から見えなくなる期間のことです。
この期間内にメッセージを処理して削除しない場合は、メッセージは再びキューに戻ります。

これにより、メッセージの損失や処理漏れを防ぐことができます。可視性タイムアウトはデフォルトでは30秒ですが、1秒から12時間まで変更することができます。

Amazon SQS for Advance

Amazon SQSでは、さまざまな機能を使って、アプリケーションのパフォーマンスや信頼性を向上させることができます。

デッドレターキュー

デッドレターキューはメッセージが何度も処理に失敗した場合に、別のキューに移動させる機能です。
デッドレターキューに移動したメッセージは、後で分析や再処理を行うことができます。

ロングポーリング

ロングポーリングはメッセージがキューに到着するまで待機する機能です。
ロングポーリングを使うと、空のレスポンスを受け取る回数を減らし、コストやネットワークトラフィックを削減することができます。

バッチ処理

バッチ処理は一度に複数のメッセージを送受信する機能です。
バッチ処理を使うと、レイテンシーやオーバーヘッドを減らし、スループットを向上させることができます。

メッセージ属性

メッセージ属性はメッセージに付加するメタデータです。
メッセージ属性を使うと、受信者がメッセージの内容や処理方法を判断することができます。

メッセージフィルタリング

メッセージフィルタリングはメッセージ属性に基づいて、メッセージを受信するかどうかを決める機能です。
メッセージフィルタリングを使うと、受信者が必要なメッセージだけを受け取ることができます。

Amazon SQSのベストプラクティス

Amazon SQSを効果的に使うためには、以下のようなベストプラクティスを守ることが重要です。

ベストプラクティス 説明
キューの種類を適切に選択する FIFOキューと標準キューでは、メッセージの順序や重複性が異なります。アプリケーションの要件に応じて、最適なキューの種類を選びましょう。
可視性タイムアウトを適切に設定する 可視性タイムアウトは、メッセージの処理時間に影響します。可視性タイムアウトが短すぎると、メッセージが重複して処理される可能性があります。可視性タイムアウトが長すぎると、メッセージの処理が遅延する可能性があります。可視性タイムアウトは、メッセージの処理時間の平均値よりも少し長めに設定しましょう。
ロングポーリングを有効にする ロングポーリングは、メッセージの到着を待つことで、空のレスポンスを減らします。ロングポーリングを有効にすると、コストやネットワークトラフィックを削減することができます。ロングポーリングは、キューまたはリクエストレベルで設定することができます。
バッチ処理を利用する バッチ処理は、一度に複数のメッセージを送受信することで、レイテンシーやオーバーヘッドを減らします。バッチ処理を利用すると、スループットを向上させることができます。バッチ処理は、送信者または受信者のコードで実装することができます。
メッセージ属性やメッセージフィルタリングを活用する メッセージ属性やメッセージフィルタリングは、メッセージの内容や処理方法を制御することができます。メッセージ属性やメッセージフィルタリングを活用すると、受信者が必要なメッセージだけを受け取ることができます。メッセージ属性やメッセージフィルタリングは、送信者または受信者のコードで実装することができます。
デッドレターキューの利用 メッセージの処理でエラーが発生した場合、デッドレターキューにリダイレクトして再処理を容易にすることができます。メッセージ処理のデバックやリドライブにも活用できます。

まとめ

この記事ではAmazon SQSに関連する内容を超詳細にまとめました。

  • Amazon SQSとは
  • Amazon SQSの仕組み
  • Amazon SQS for Advance
  • Amazon SQSのベストプラクティス

次回はAWS X-Rayについて超詳細解説します。

Discussion