ボクダイモリ

Life is like a Game

メッセージキューについて調べてみた

メッセージキューについて

nsqをいじってみたがいまいちどう役に立つのかよく分からなかったので調べてみた。 一番下の参考文献を一通り読むことでメッセージキューを導入することによる利点は分かると思う。

メッセージキューとは

システム間のメッセージの送信と受信の間を仲介して、送受信されるメッセージを制御するためのシステム。 やっていることはシンプルだが、システムをコンポーネントとして分割し、独立性を高める役割を果たしている。 まず送信側は受信側の状態に関わらずメッセージをキューに送信してしまうことでメッセージをすぐ手放すことができる。 例えば受信側が処理待ちや障害が発生していても、送信側がそれに合わせる必要がない。 受信側も同様、メッセージを処理している最中にメッセージが送られることがない。 メッセージキューがシステム間の仲介をすることで、受信側と送信側の独立性を高められる。

可用性

受信側がメッセージを受け取った時点で、キューにメッセージのコピーが作られる。 コピーはキューが受信側からメッセージを受け取ったという通知をもらうまでは、コピーを削除しない。 そのため、複数台あるうちの受信側のマシンで障害が発生しても、一定時間後に別のマシンがメッセージを受信する ことで処理をやり直すことができる。

拡張性

受信側の処理スピードが間に合わなくなり、キューにメッセージが貯まるようになったとき、キューがそれを検知して 受信側のマシンを増やすという運用にすることができる。 例えばAWSには仮想マシンの台数を増減させるオートスケーリングというサービスがある。

メッセージキューの種類

以下のリンク先でメッセージキューライブラリの紹介がされている。 http://postd.cc/dissecting-message-queues/

各ライブラリのパフォーマンスや導入のしやすさ等を比較したサイト。 1回読んでみたがまだ所々分からないところがある。

まとめ

  • メッセージキューとは送信側と受信側でのメッセージの仲介を行う
  • 送信側と受信側はお互いの状態を気にすることなく、メッセージの送受信ができるためパフォーマンスの劣化を防げる(可用性を上げられる)
  • メッセージキューに一定以上のメッセージが貯まったことをトリガーにして、受信側のマシンを増減させるなどの運用が可能
  • メッセージキューのライブラリは色々ある

参考文献

若手が知らない昔の技術MQ、クラウドではホットだ http://itpro.nikkeibp.co.jp/atcl/watcher/16/110700001/011600017/

分散型メッセージングミドルウェアの詳細比較 http://postd.cc/dissecting-message-queues/