こんにちは。
AMDlabの松原です。
AWSのサービスはみなさんお使いですか?
今日はちょっとAWSのサービスの話。
最近、私がよく使うサービスはこちら。
そう、SQSです。
これが名前通り、シンプルなサービスなのですが、とてもとても便利なのです。
例えば、Webサーバーからとあるアクションがあった時に何か別のサーバーで処理する場合や、
複数サーバーで何かを処理する際に、同じ処理を行わせないようにする場合にこのSQSというメッセージサービスを使うと、非常に便利です。
原理は簡単。
何かの工程の後SQSへ、例えばJSON形式で{task:hoge,param:1}みたいなメッセージをSQSにへキューを発砲します。
そうするとSQSにそのメッセージが残った状態になります。
今度は、何かを処理させたサーバーからそれを取りに行き、JSONを受け取り処理を行わせるわけです。
(そのために、処理を実行するcronやdaemonを準備しておかなないといけないわけですが)
ただ、最近気づいたことが一つ。
SQSのメッセージは、そのメッセージが処理されている間、そのメッセージはロックされた状態になります。
そのため、同じメッセージを取得しようと、他の処理がアクセスしてきても取得できないようになっています。
(処理が成功した場合は、メッセージを削除するようにするのが一般的ですね)
なのに、複数のサーバーで同じ処理のDaemonを実行していたところ、何故か同じ処理が2度………
よくよく調べてみると「2%」の確率で同時に取得されてしまうことが起きるのだとか。
しょうがないの処理側に重複を防ぐ処理を追加しましたが、そこはAWSにがんばって欲しいものです。
よし、AMDlabの方のサーバーも早く整備しよう。
ではまた。
COMMENTS