大規模なECサイトでは、分散型アプリケーションによって受発注や在庫の管理を行います。このとき膨大な処理を高速化して、システム間におけるデータの確実な送受信が重要になります。
Amazon SQS(Simple Queue Service)は、システム間の連携の安全性を確保して効率化を行うキューイングサービスです。今回はキューイングの概要を踏まえた上で、Amazon SQSのメリット、使う前に知っておくべき用語や機能などを解説します。
Amazon SQSとは?
キューイングとは
まずキューイングについて解説します。キューイングは日本語で「待ち行列」と呼ばれ、異なるアプリケーション間でデータの送受信をする方法です。メッセージの要求(キュー)を処理できるまで保留にして順番待ちを行う機能を呼びます。
通常、システム間の連携は同期して行われます。この場合、受信する側のシステムに問題があると送信側はメッセージを送ることができません。したがって処理が停止します。しかし、キューイングを行うことによって送信側は受信側の状態に関わらずメッセージの送信が可能になり、システム全体の安定した連携ができます。
このようなシステム間の依存性が少ない連携が「疎結合」です。キューイングは疎結合を実現し、負荷がかかった場合に柔軟にスケールできるようにします。
Amazon SQSのメリット
Amazon SQS(Simple Queue Service)は、分散システムやサーバーレスアプリケーション用に提供されたフルマネージド型のメッセージングサービスです。
以下のような3つのメリットがあります。
1. システム構築と管理の負荷軽減
メッセージキューを管理するために独自のソフトウェアを開発したり、初期設定に時間を費したりする必要がありません。ソフトウェア取得とインストール、各種設定が不要であり、システム構築の手間を省くことができます。
また、自社システムや市販のパッケージでは、定期的なメンテナンスのリソースを確保しなければなりませんが、Amazon SQSではメッセージのキューイングに関するサービスがインフラストラクチャを含めてフルマネージドで提供されます。
2. 柔軟なスケーリングとコスト効率
キューは動的に作成され、自動的にスケールします。プロビジョニングや容量を気にすることなく、ほとんど制限のないスループットが得られます。前払い料金や最低料金がない従量課金制のため、常時課金状態の自己管理型ミドルウェアと比較してコスト削減ができます。
3. 堅牢性と高度なセキュリティ
メッセージの転送時にはアプリケーションコンポーネントが切り離され、メッセージの複数のコピーがAWS上の複数のアベイラビリティゾーンに保存されます。確実にメッセージを配信する堅牢性を備えています。Amazon SQS SSEとAWS Key Management Service (KMS)を統合した暗号化による一元管理が可能です。
コンプライアンスの側面としては、Amazon SQS はPCI DSS レベル 1に認定、HIPAAに対応しています。
Amazon SQSで使われる用語と機能
Amazon SQSを使うときに必要な用語を解説します。
1. プロデユーサー
プロデューサー(producer)は、メッセージをAmazon SQSに送信する側の分散システムのコンポーネント、アプリケーションです。送信側のサーバーの暗号化(SSE)により、暗号化されたキューを使って機密データの送信ができます。
2. コンシューマー
コンシューマー(consumer)は一般的に「消費者」と訳されますが、Amazon SQSの場合はメッセージを受信する側の分散システムのコンポーネント、アプリケーションです。
3. メッセージ
キューイングで送受信されるデータをいいます。メッセージには、ヘッダー部分とペイロードと呼ばれる送信内容の本体があります。
ペイロードには任意のフォーマットで最大256KBのテキストを含めることができます。テキストとしては、XML、JSON、未フォーマットなどが使えます。 64KBのチャンクが1つのリクエストとして課金されます。バッチを利用するとコスト削減に役立ちます。
4. キュー
キュー(queue)は、一列上にメッセージを並べたデータ構造です。無制限にキューを作成することが可能です。キューの名前は 80 文字に制限され、英数字、ハイフン、下線を使用できます。キューの名前はAWSのアカウントとリージョンに対して一意である必要があるため重複できませんが、既存の名前を削除後に再利用が可能です。
アクセスポリシーステートメントを関連付けることにより、キューの共有ができます。アカウント番号によりユーザーを識別し、メッセージキューの所有者に課金されます。
コンシューマーがメッセージを正常に使用できないときにメッセージを送信する機能を「デッドレターキュー」といいます。未送信メッセージの管理とともに、例外ログなどを分析して問題の診断ができます。コンシューマーの不具合が回復すると、デッドレターキューのメッセージはリドライブされます。
5. ポーリング
ポーリング(polling)は、問い合わせによってキューを呼び出すことをいいます。一定期間ごとにポーリングを実行してメッセージのやりとりを行います。
通常のショートポーリングの場合は、ポーリングされたメッセージキューが空の場合にも即座に応答を返します。しかし、ロングポーリングの場合は、メッセージキューに達するかタイムアウトになるまで応答を返しません。受信回数を削減しメッセージを低コストで受信できるようになるため、パフォーマンスの向上とコスト削減に役立ちます。
Amazon SQSのロングポーリングのタイムアウトは、20秒が上限値です。可能な限り大きな値を設定すると応答回数を減らせます。
Amazon SQSで使われる2つのキュータイプ
Amazon SQSでは、標準キューとFIFOキューの2つを使用できます。
1. 標準キュー
標準キューは、ほぼ無制限で最大限のスループットが得られるベストエフォート型のキューです。高速のキューイング処理ができ、配信順序を保証するFIFOキューに対して安価である反面、メッセージの重複配信や配信の順序が前後する可能性があります。
2. FIFOキュー
FIFO (First in First out:先入れ先出し)キューでは、メッセージの送信または受信の順序が厳密に保持されます。デフォルトでは毎秒最大300件の送信・受信・削除のオペレーションをサポートし、バッチ処理を使うと1秒あたり最大3,000件のメッセージを実行します。さらに高スループットモードを設定してバッチ処理を行うと 1 秒あたり最大 30,000 件のメッセージ処理が可能になります。
Amazon SQSと他サービスの違いと連携
AWSのキューイングサービスには、Amazon MQがあります。クラウドネイティブで自動的にスケーリングするAmazon SQSとは異なり、Amazon MQはApache ActiveMQ、RabbitMQといったオープンソースを基盤として構築されたキューイングです。オンプレミスのキューイングをAWSに移行するときなどに適しています。
Amazon SNS(Simple Notification Service)は、受信型のコンシューマーの状態に関わらずプッシュ型でメッセージを送信するサービスです。Amazon SQSとAmazon SNSを組み合わせると1対Nの送信ができることから、メッセージングの並行処理が行なえます。
AWSの他サービスの連携としては、サーバーレスでプログラムを実行できるAWS LambdaとAmazon SQSを組み合わせることで画像処理を高速化するなどの使い方も考えられます。
おわりに
ECサイトやチャットの開発においては、分散型、サーバーレス、マイクロサービスといった技術が欠かせません。キューイングは複数のアプリケーションやサービスをつなぐために必要な機能であり、開発や運用のコストを削減する重要な要件といえるでしょう。
AWSのメッセージングサービスは歴史が古いレガシーな機能です。しかし、さまざまな用途に活用できます。オープンソースを利用して独自のキューイングを開発することも可能ですが、Amazon SQSを利用すると便利です。
ONETECHのAWS SQSの構築と運用実績
ONETECHはベトナムオフショア開発で数多くのAWS開発の実績があります。
今回はSQSを利用した事例をご紹介します。
AWSサーバレスでオンライン教育ライブ動画配信中のチャットシステム開発
AWSサーバレスでオンライン教育ライブ配信中にリアルタイムチャットができるシステムを開発しました。配信中に視聴者は主催者へ質問などをリアルタイムで交換できます。アーキテクチャはAWSサーバレス構成でLambdaやApp Syncなどで構築しました。
気象のビッグデータと連動してGoogle広告やFacebook広告を制御できる機能を追加開発しました。GoogleおよびFacebookの地域情報と広告キャンペーンと気象のビッグデータをあらかじめ設定しておき最適な広告を自動的に配信できる仕組みです。
ベトナムオフショア開発会社 ONETECHはAWSセレクトティアパートナー
もし、AWSについてプロのアドバイスが欲しいのなら、ぜひONETECHにご相談ください。
ONETECHはオフショア開発会社として100社以上との取引実績を誇ります。
ONETECHではAWS資格保有のエキスパートがお客様の課題をカタチにします。
- インターネットサービスの企画はあるがどうしたら良いか
- どのようにクラウドを利用したら良いかわからない
- クラウドを利用するためのコストやポイントを知りたい
- 保守運用まで考慮した設計をしたい
Lambdaを含むAWSのコンサルティングサービスを提供しています。気になること、不安なことをお気軽にご相談ください。
AWS導入について相談する
AWS構築などご興味があれば簡単なことでも結構です。お気軽にお問合せください。