MessageQueueとは
端的にいうと異なるソフトウェアでデータの通信を行うため使う機構です。
一般的なRESTAPIの構造だと、requestをしたらresponseが返るまで処理が行えません。そのため非同期の処理を行うことはできません。
なので、ソフトウェア間の通信を一旦 MQに格納して、双方の任意のタイミングで送受信を行えるようにするのがMQの思想です。
SQS
Amazonが提供しているMessageQueueのサービスで二つのタイプからMQを構築することができます。
standard
性能を重要視した代わりに、順番の保証を捨てたMQです。
無限に近いスループットを持っていますが、
その代わりに、値を重複して返したり、順番もずれちゃう可能性があるため
冪等性を持った処理などに向いている種類です。
FIFO
一般的なデータ構造のキューに基づいたMQです。
FIFOに基づいているため、順番は保証されますが、速度に限界があります。
スループットは1秒間に3000程ですが、順番の保証と必ず1度しか値を返さないという保証があるため、処理の順番が大事な場合に向いてます。
MQが使えるケース
- 画像の加工など非常に重い処理を並列で行いたい場合
- 画像などを一旦MQに格納して同時にAWSのlambdaなどで加工を噛ませる。
- 画像が必要になったタイミングでGETで取得してもらう。
- バッチ処理を数で行いたい場合
- 処理に必要なデータをMQに書き込んで行き、規定数に到達したらバッチを走らせるという構成。