SQSとは
SQSとは、AWSのMQ(メッセージキュー)サービス。
そのAWSのSQSを試してみました。
SQSとは、「Simple Queue Service」の頭文字。
AさんからBさんへお仕事の依頼
例えば、2つのお仕事があり、前半のお仕事と後半のお仕事は人が違うとします。
AさんからBさんにお仕事を引き継ぐとします。
順調にいけば、Aさんが、Bさんに「Bさんお願い」とお仕事を頼みます。
Bさんが忙しい
しかし、Bさんが忙しい場合、Aさんは、Bさんのお仕事が終わるまで待つことになります。
そこで、Bさんと同じ仕事をしているCさんに頼みます。
Aさんは、BさんとCさんの忙しさをみて、どちらかに頼むことにします。
Aさんは、Bさん、Cさん二人の進捗を見ることになります。
効率よくやるために・・・
この間に「中継所」を設けます。
「お仕事依頼票」を置く場所です。
Aさんは、「依頼票」を書いて、「中継所」に置きます。
Bさん、Cさんは、「中継所」の「依頼票」をみて、仕事をします。
Aさんは、Bさん、Cさんの仕事の進捗に関係なく、自分の仕事に集中できます。
Bさん、Cさんも、自分のすべき仕事だけに専念ができます。
この「中継所」が「キュー」と呼ばれるもので、AWSでは、「SQS」というサービスになります。
AWS SQSは、疎結合
AさんとBさん、およびCさんは、直接関わらないので、「疎遠な関係」になります。
専門的には、「疎結合」と言われてます。
このように一連の処理の中継地点を設けて、全体を効率よくさせるのに「SQS」が役にたちます。
例えば、最初にWEBのアクセスログを取得。その後、ゆっくりとアクセス解析。という処理などに適用できます。
順番
先に、キューに出したのを、最初に処理する。
FIFO、「First In、First Out」と呼ばれています。
AWS SQSでは、FIFOでも処理が可能です。
依頼票は、JSON形式
キューに保存するデータは、JSON形式で、サイズに制限があります。
各種プログラムを介して、SDK経由でキューの発行や取得ができます。
AWS SQSは、何がいいの?
RDBなどで、管理をすることも可能かと思いますが、キューの処理だけを考えると
費用面、堅牢性、などを考えると大規模になればなるほど、AWSのSQSに任せた方がいいかと思います。
結論
AWS SQSは、キューサービスを確実にこなしてくれる、謙虚であるが、頼もしい存在!
ロングポーリング(2019/2/16追加)
SQSに対して、受信の要求をすると、データがなく、空振りでも、料金が発生します。
無駄な料金を削減するために、キューのタイムアウトを長くして、データを取得しやすいようにします。
可視性タイムアウト(2019/2/16追加)
キューを取得している間、他のキュー取得プログラムからは、タイムアウトとして、メッセージを見せないようにします。
これにより、データの取得リクエストを減らし、コストを削減することができます。
Amazon kinesisサービス(2019/2/16追加)
Amazon kinesisサービス(リンク)