COLUMN
アプリケーションをゆるやかに「つなぐ」Amazon SQSの特徴と魅力
導入前に知っておきたいAWSの主要サービスについての基礎がわかる無料のお役立ち資料はこちらからダウンロードできます。
分散アプリケーションでは、個々のサービスが複雑に絡み合っています。それゆえ、1つのサービスに問題が発生すると他サービスにも影響が出てしまうということが少なくありません。Amazon SQSはサービス間をゆるやかに「つなぐ」ことで影響範囲を限定し、開発コストの大幅な削減が期待できるサービスです。
今回は、Amazon SQSの特徴と基本的な仕組み、活用方法などをご紹介します。
Amazon SQSとは
Amazon SQS(Simple Queue Service)は、AWSが提供する「サーバーレスでキューイングを実現できる」サービスです。Amazon SQSを理解するためにはまず「キューイング」の概念を知る必要があります。「キューイング」とは日本語にすると「待ち行列」という意味です。人気のお店で行列ができるのと同じで、システム用語では「処理の順番待ち」という意味で使われます。
さて、このキューイングがどういう効果をもたらすかというと、「分散アプリケーション上で非同期に処理が進められる」ようになるのです。通常、システム間での処理連携(メッセージング)は同期的に行われます。しかし、同期メッセージングでは受信側の状態に問題があった場合、送信側はメッセージを送信できません。すると、送信側のシステムが処理できないままスタック(停止)してしまいます。
そこで登場するのがキューイングです。キューイングを使えば、送信側は受信側の状態に左右されずメッセージを投げて自分の仕事に戻ることができます。言葉だけでは理解が難しいので下図をご覧ください。
メッセージキューイングを使わない場合と使う場合
例えるならば、ハンバーガーショップの店員さんがレジで注文を受け、別のスタッフがハンバーガーを作っているのと同じイメージです。一人で注文から調理まで担当していたらお店の効率は上がりません。
このように、お互いの状態の影響を受けないようにシステム間を疎結合にすることで、システムの可用性を高めることができるのです。ほかにもキューイングのサービスとしては「Azure Queue Storage」「Google Cloud Tasks (GAE Task Queue)」などでも提供されていますが、Amazon SQSはほかのAWSサービスと容易に連携でき、高度な処理も実現できるところが大きな特徴といえるでしょう。
次に、Amazon SQSの特徴を簡単に順にみていきましょう。
Amazon SQSの特徴
システムの疎結合を実現
さきほど述べたように、キューイングを利用することでシステム間を疎結合にでき、分散アプリケーションの拡張性、可用性を大幅に改善できます。サーバーレスで分散アプリケーションをつなぐため、高い負荷がかかった場合でも柔軟なスケールができます。また、テストや保守の面でも大幅なコスト削減が期待できるでしょう。
メンテナンスや負荷を気にせずスケーリング
キューイングに関することはすべてAmazon SQSにお任せしてしまうことで、負荷やメンテナンスのことを気にする必要はありません。技術者はサービスの充実に注力できます。
確実に転送する堅牢性
キューイングで送信されたキューは複数のサーバーに分散格納され、そのうちの1つが取り出されて処理されます。これにより、キューが紛失することなく確実にメッセージングできます。
前払い料金・最低料金なし
利用するにあたって前払い料金や最低料金は発生しません。使った分だけ課金される従量課金制なので、スタートアップ企業や小規模から始めたい場合でも安心して利用できます。
高い情報セキュリティ
Amazon SQSのキューイングで送受信されるメッセージはAWS Key Management Service (KMS)によって暗号化されます。
Amazon SQSの仕組み
用語
Amazon SQSを理解するうえで重要な用語をみていきましょう。Amazon SQSは基本的に「プロデューサー」と「コンシューマー」の関係で成り立っています。
プロデューサー
キューにメッセージをプロデュース(提供)する側のアプリケーション
コンシューマー
キューに溜まったメッセージをコンシューム(消費)する側のアプリケーション
そして、キューを呼び出すことを「ポーリング」と呼びます。
基本的な処理の流れ
Amazon SQSではキューイングされたキューの処理を以下の流れで行います。
- 1.ポーリング
- 2.取得&処理
- 3.削除
ポーリングでキューを取得して処理し、処理されたキューは一定時間後に削除されます。キューには2つのタイプがあります。
2つのキュータイプ
キューには「スタンダードキュー」と「FIFOキュー」という2つのタイプがあります。
スタンダードキュー
スタンダードキューは確実にメッセージを届けるため、複製されたメッセージがランダムに分散・配置されます。そして、その分散されたキューは時系列に関係なくポーリングされることになります。どういうことかというと「1、2、3」という処理をキューしても、処理される順番は「2、3、1」かもしれないし「1、3、2」かもしれないということです。スタンダードキューでは処理の順番を保証しません。
標準キューの処理順序
スタンダードキューは「順序はどうあれ、最終的に処理されていればOK」な処理に向いています。たとえば、画像の圧縮処理、データのバックアップ処理などがこれに該当するでしょう。また、留意しなければならないのは、Amazon SQSでは「最低1回以上の配信」が保証されている点です。つまり、一度処理されたメッセージが再度配信される可能性がある、ということです。このため、アプリケーション側では重複処理を行わない、もしくは重複処理しても問題ない設計にしておく必要があります。
FIFOキュー
スタンダードキューに対して、先入れ先出し方式でキューを処理できるのが「FIFOキュー」です。FIFOは"First In, First Out"の略で、「先入れ先出し」を意味します。FIFOキューはまさに「1、2、3」という処理をキューすれば、「1、2、3」という順番で処理してくれます。
FIFOキューの処理順序
両者にはそれぞれ特徴がありますが、Amazon SQS上での違いをまとめたのが以下です。
スタンダードキュートFIFOキューの特徴と関係性
なお、Amazon SQSの料金の詳細については、AWS公式ページでご確認ください。
Amazon SQS の料金(AWS公式ページ)
https://aws.amazon.com/jp/sqs/pricing/
ライフサイクル
Amazon SQSのキューイングでは、一度ポーリングされたキューは即座には削除されず、一定期間保持されます。これを「可視性タイムアウト」と呼びます。なぜ可視性タイムアウトが必要なのかというと、分散アプリケーションでは、ネットワーク接続やコンシューマーに問題があった場合に実際に受信されたかを確認する方法がないためです。
そのため、Amazon SQS自身が処理されたキューを自動で削除するという機能は持っていません。キューを処理したコンシューマーがキューの削除依頼を出すことで、キューは初めて削除されます。可用性タイムアウトはデフォルトで30秒ですが、0秒~12時間の間で設定できます。
メッセージ(キュー)のライフサイクル概念
具体的な用途例
Eコマース
Eコマースでは受注してから各種在庫処理が行われます。この処理をSQSで分散して処理することにより、大規模なEコマースアプリケーションの安定した運用を支援します。
チャット機能
チャットサービスというとリアルタイム性ばかりが注目されがちですが、チャットで交わされた会話をいつどのように保存するか、という課題もあります。そこで、Amazon SQSを利用して、チャットシステムのバックグラウンドで会話の内容をデータベースに保存する、といった用途が考えられます。
他AWSサービスとの連携
Amazon SQS × Amazon SNS
通常、Amazon SQSではプロデューサーとコンシューマーは1対1の関係でつながっていますが、これにpub/sub型(送信型と受信側の非同期型)のメッセージングサービスであるAmazon SNS(Simple Notification Service)を組み合わせることで、1対Nの関係性でメッセージを一斉に送受信するシステムが構築可能です。メッセージングの並列処理を行いたいときにはぜひ組み合わせたい利用方法です。
Amazon SQS × S3 × Lambda
システム構築では重たい処理をいかに高速に処理するかがいつも課題になります。画像の加工処理は重たい処理の代表ですが、これをAmazon SQSとその他のAWSサービスを連携させることで実現可能です。たとえば、画像データ自体はAWSの「S3」に配置し、「Lambda」を使って画像処理を行う、といった方法で分散処理を行います。これらをAmazon SQSでつないでいきます。
なによりも柔軟性と手軽さが魅力
Amazon SQSは、分散アプリケーションをキューイングによってゆるやかにつなぐサービスです。アプリケーション相互の影響度を下げることは、システムの運用コストや開発コストにも大きく影響する要素です。導入も簡単ですぐにコードを書いて試せるので、検討してみてはいかがでしょうか。
Amazon SQSの構築や運用について、NTT東日本のクラウド導入・運用サービスで貴社システムをサポートいたします。クラウド導入・運用サービスの提供機能や料金など詳しく記載したサービス資料をぜひダウンロードください。
移行準備段階で知っておくべきAmazon Web Servicesの
サービスを学び、具体的にクラウド検討を考える!
RECOMMEND
その他のコラム
無料ダウンロード
自社のクラウド導入に必要な知識、ポイントを
この1冊に総まとめ!
あなたはクラウド化の
何の情報を知りたいですか?
- そもそも自社は本当にクラウド化すべき?オンプレとクラウドの違いは?
- 【AWS・Azure・Google Cloud】
どれが自社に最もマッチするの? - 情シス担当者の負荷を減らしてコストを軽減するクラウド化のポイントは?
- 自社のクラウド導入を実現するまでの具体的な流れ・検討する順番は?
初めての自社クラウド導入、
わからないことが多く困ってしまいますよね。
NTT東日本では
そんなあなたにクラウド導入に必要な情報を
1冊の冊子にまとめました!
クラウド化のポイントを知らずに導入を進めると、以下のような事になってしまうことも・・・
- システムインフラの維持にかかるトータルコストがあまり変わらない。。
- 情シス担当者の負担が減らない。。
- セキュリティ性・速度など、クラウド期待する効果を十分に享受できない。。
理想的なクラウド環境を実現するためにも、
最低限の4つのポイントを
抑えておきたいところです。
-
そもそも”クラウド化”とは?
その本質的なメリット・デメリット - 自社にとって
最適なクラウド環境構築のポイント - コストを抑えるための
具体的なコツ - 既存環境からスムーズにクラウド化を
実現するためのロードマップ
など、この1冊だけで自社のクラウド化のポイントが簡単に理解できます。
またNTT東日本でクラウド化を実現し
問題を解決した事例や、
導入サポートサービスも掲載しているので、
ぜひダウンロードして読んでみてください。
面倒でお困りのあなたへ
クラウドのご相談できます!
無料オンライン相談窓口
NTT東日本なら貴社のクラウド導入設計から
ネットワーク環境構築・セキュリティ・運用まで
”ワンストップ支援”が可能です!
NTT東日本が選ばれる5つの理由
- クラウド導入を
0からワンストップでサポート可能! - 全体最適におけるコスト効率・業務効率の改善を
中立的にご提案 - クラウド環境に問題がないか、
第3者目線でチェック
してもらいたい - 安心の24時間・365日の対応・保守
- NTT東日本が保有する豊富なサービスの組み合わせで
”課題解決”と”コスト軽減”を両立
特に以下に当てはまる方はお気軽に
ご相談ください。
- さまざまな種類やクラウド提供事業者があってどれが自社に適切かわからない
- オンプレミスのままがよいのか、クラウド移行すべきなのか、迷っている
- オンプレミスとクラウド移行した際のコスト比較を行いたい
- AWSとAzure、どちらのクラウドが自社に適切かわからない
- クラウド環境に問題がないか、第3者目線でチェックしてもらいたい
- クラウド利用中、ネットワークの速度が遅くて業務に支障がでている
クラウドを熟知するプロが、クラウド導入におけるお客さまのLAN 環境や接続ネットワーク、
クラウドサービスまでトータルにお客さまのお悩みや課題の解決をサポートします。
相談無料!プロが中立的にアドバイスいたします
クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。