Simple Queue Service

こんにちは。
AMDlabの松原です。

AWSのサービスはみなさんお使いですか?

今日はちょっとAWSのサービスの話。

最近、私がよく使うサービスはこちら。

 

そう、SQSです。

これが名前通り、シンプルなサービスなのですが、とてもとても便利なのです。

例えば、Webサーバーからとあるアクションがあった時に何か別のサーバーで処理する場合や、
複数サーバーで何かを処理する際に、同じ処理を行わせないようにする場合にこのSQSというメッセージサービスを使うと、非常に便利です。

原理は簡単。

何かの工程の後SQSへ、例えばJSON形式で{task:hoge,param:1}みたいなメッセージをSQSにへキューを発砲します。

そうするとSQSにそのメッセージが残った状態になります。

今度は、何かを処理させたサーバーからそれを取りに行き、JSONを受け取り処理を行わせるわけです。
(そのために、処理を実行するcronやdaemonを準備しておかなないといけないわけですが)

ただ、最近気づいたことが一つ。

SQSのメッセージは、そのメッセージが処理されている間、そのメッセージはロックされた状態になります。
そのため、同じメッセージを取得しようと、他の処理がアクセスしてきても取得できないようになっています。
(処理が成功した場合は、メッセージを削除するようにするのが一般的ですね)

なのに、複数のサーバーで同じ処理のDaemonを実行していたところ、何故か同じ処理が2度………

よくよく調べてみると「2%」の確率で同時に取得されてしまうことが起きるのだとか。
しょうがないの処理側に重複を防ぐ処理を追加しましたが、そこはAWSにがんばって欲しいものです。

よし、AMDlabの方のサーバーも早く整備しよう。

ではまた。

ARTICLES