SQSとはどんなサービスでしょうか?←これ、初心者が理解するのめちゃくちゃ難しくないですか??
なんか、同時並行?で処理させたいとき?に使う?みたいな。笑
Udemyの有料教材のハンズオンとか使えばまあ理解できるかもしれませんが、そのためにわざわざお金と時間を投資する熱心な人は本業で使うエンジニアくらいで、そうでなければ、さくっと概要理解したいですよね。
この記事を読めば、そもそもキューイングやポーリングを知らない人でも5分でSQSを理解できるようになりますのでご安心ください!
ちなみに、上記の理解の程度でも、AWS認定クラウドプラクティショナーなら合格できます。資格に興味のある方はこちら↓↓↓
では、早速参りましょう!
Amazon SQS(Simple Queue Service)とは?
Amazon SQSとは、
完全マネージド型のメッセージキューイングサービス。ポーリング処理を合わせて使用するPULL型(ポーリング型配信方式)でメッセージに永続性がある。
です。
これを聞いて、はいはい、なるほどね〜全て理解した!という方は離脱して大丈夫です笑
公式ドキュメントによると、
分散されたソフトウェアシステムとコンポーネントを統合および分離することができる、安全で耐久性があり、利用可能なホストされたキューを提供します。
公式ドキュメントより
はいはい、なるほどね〜全て理解した!という方は離脱して大丈夫です(2回目)
私はちんぷんかんぷんでした。
キーワードは、
- キュー
- キューイング
- ポーリング
です。この3つの用語を理解できれば、SQSがどんなサービスを提供してくれているのかわかります。
1.キュー(queue)とは「列」
最も基本的なデータ構造の一つで、要素を入ってきた順に一列に並べ、先に入れた要素から順に取り出すという規則で出し入れを行うもの。順番を待つ人の行列と同じ仕組みであるため「待ち行列」とも訳される。
要するに、レジ待ちの列をイメージしていただければ完璧です。先に並んでいた人が先にレジに呼ばれる。後から来た人は、列の後ろに並ぶ。そういう仕組みの列がキューです。
ちなみに、その仕組み自体のことを、「先入先出」 = FIFO(First In First Out)と言います。反対に、タンスに収納した服のように、奥から順に服を入れていって、最後に入れた手前の服から取り出していくような仕組みをスタック「後入先出」 = LIFO(Last In First Out)と言います。これは特に理解する必要はないですが、詳しく知りたい方は、私がよく使う外部サイト:わわわIT辞典やIT用語辞典e-Wordsをご覧ください。
まとめると、
キュー(queue):先入先出 = FIFO(First In First Out)の仕組みの列
スタック(stack):後入先出 = LIFO(Last In First Out)の仕組みの列
2.キューイング(queuing)とは「順番に並んでお待ち下さい」な仕組み
キューを用いて要素の管理を行うこと。 「キュー」がわかっていれば、なんてことはないですね。
順番に並んでもらって、先に並んでいた人から案内する、新しく後からきた人は後ろに並んでもらう、人に限らず、そうやって管理することを「キューイング」と言います。
より専門的な解説も読んでみたいという方はこちらへどうぞ
キュー(queue)とは?:コンピュータでも「待ち行列」は重要
ちなみに、コーチングで使われる「キューイング」はスペルが異なる(Coaching cue)ので別物。
3.ポーリングとは?・・・「仕事ありませんか?」と尋ねる方式
複数の機器やソフトウェアを円滑に連携させるために、主となるシステムが他のシステムに対して一定間隔で順繰りに要求がないか尋ねる制御方式。
例えば、「主となるシステム」を部下、連携すべき「他のシステム」を上司とします。部下は上司に対して、仕事がないか?と聞いていきます。上司に「今はない」と言われたら待機して、また一定時間経ったら仕事がないか?と聞きにいきます。また、レビューや承認など、上司に頼んだ仕事がある時も同様です。承認していただけましたか?と聞いていきます。上司に「まだだ」と言われたら待機して、また一定時間経ったら再度聞きにいきます。
このように、部下つまり「主たるシステム」が主導権を握り、「他のシステム」に要求がないか尋ねる方法が「ポーリング」です。
これにより、「他のシステム」が複数あったり、要求が頻繁にあるような場合でも、不具合が少なく手軽に実装することができます。
ポーリングの反対は、「割り込み処理」です。
先の例でいくと、上司が、「今やってる仕事はとりあえず中断してこの処理をやれ」と言ってくる感じです。処理が行われるまでのタイムラグ(順番待ち)がない分早く処理できますが、処理が中断されることが増えると負荷がかかります。
詳しくは外部サイトシステムを安定稼働させるために必要な「ポーリング」とは?をご覧ください。
<まとめ>改めて、Amazon SQSとは?
先ほどの説明を再掲しましょう。
完全マネージド型のメッセージキューイングサービス。ポーリング処理を合わせて使用するPULL型(ポーリング型配信方式)でメッセージに永続性がある。
メッセージとは、リクエストや命令文などのデータのことですから、1文目は、
「リクエストや命令文を順番待ちさせて、先に来たものから順番に処理させていく」サービス
です。
そして永続性というのは、基本的にメッセージは削除されないという意味なので、2文目は、
「並ばせたリクエストや命令文は、処理してくれるシステムが尋ねてくるまで基本的には削除せず保存しておく」方式
と言えそうです。
まとめると、
Amazon SQSとは、
- リクエストや命令文を順番待ちさせて、先に来たものから順番に処理させていくことができる。
- 並ばせたリクエストや命令文は、処理してくれるシステムが尋ねてくるまで基本的には削除せず保存しておく。
ということが実現できるサービスです。
※ ただし、上記は「ざっくり」理解することを目的としているため、厳密に言うと正しくない表現が含まれています。例えば、厳密に「先に来たものから順番に」処理させるためには、キューのタイプとして「FIFOキュー」を選択する必要があります。「標準キュー」を選択した場合、「少なくとも 1 回のメッセージ配信」がサポートされているだけなのでご留意ください。
つまり、SQSを使うことによって、処理を分散させてシステムの負荷を下げることができる、というわけです。処理を分散させる、というのが同時処理が可能、という話に繋がります。
ユースケースとしては、主に、サーバーレス(マイクロサービス化・疎結合化)を実現するために、API GatewayやLabmdaと一緒に使われることが多いようです。よく似たサービスであるSNSを前に挟むという使い方もあります。認定試験や、サービス概要をつかむならこの程度で十分ですが、実際に使用される場合は、実例などを調べてみるとヒントが多いかもしれませんね。
<コラム1>Amazon SNSとの違い
SQSもSNSも同じメッセージングサービスですが、配信方式が全く違います。
SNS(Simple Notification Service)は、
発行者から受信者へのメッセージ配信を提供するマネージド型サービスです。(中略)クライアントは SNS トピックにサブスクライブし、Amazon Kinesis Data Firehose、Amazon SQS、AWS Lambda、HTTP、Eメール、モバイルプッシュ通知、モバイルテキストメッセージ(SMS)など。
公式ドキュメントより引用
ざっくり違いをつかむなら、
- SQSは列を作って順番待ちさせて、後続にきちんと処理させる
- SNSは投げて終わり。その代わりいつ誰に何を投げるか指定するのは得意。(通知がメイン)
という違いがあります。
SQS | SNS | |
配信方式 | PULL式 (ポーリング処理が必要) | PUSH式 |
配信先 | P2P (1対1) | PubSub方式 (1対多) |
メッセージの保存場所 | キュー | トピック |
メッセージの永続性 | 永続性あり (削除の設定が必要) | 永続性なし |
主な使用目的 | バッチ処理の分散化や、 サーバーレスサービスの スケーリング | 通知 |
こう比べてみると全く異なるサービスであることがわかりますね。
<コラム2>Amazon MQとの違い
これも、最初何が違うの?と思いましたが、はっきりとユースケースが異なるようです。
MQは、
Apache ActiveMQ および RabbitMQ 向けのマネージド型メッセージブローカーサービス。(中略)業界スタンダードの API とプロトコルを使用して現在のアプリケーションに接続するため、コードを書き直すことなく AWS に簡単に移行できます。
公式ページより引用
SQSやSNSとの違いはずばり、
- 新規構築するならSQSかSNS
- 既存のアプリケーションで処理しているメッセージング機能をAWSに移したいならMQ
を使用すると良いみたい。
最後まで読んでくださってありがとうございました!
コメント