makotan _at_ gmail dot com

キューとかDBとか非同期とか分散とか

元ネタはさておき、過去見た色んな物をメモする

プログラムの中のメモリーキュー

プログラム上に用意したメモリー上のキュー
作るのは簡単だし使うのも簡単
モリーの容量制限があるので大量に詰まると大変なことになる
監視が面倒なので気をつけて使おう

サーバのインメモリーキュー

Redisとかそういうの
容量的にもインメモリーなので辛かったりする
とはいえ、意外と便利
絶対的に速度が必要で容量が大丈夫なときにはベスト

キューサーバ上のキュー

ActiveMQとかそっち系
2PCなキューとか作れるキューなのでDBとの同期とかもやる気になれば出来る(色々ハマるけど)
普通にキューを作るんなら多分一番楽だと思ってる

クラウド上のキュー

SQSとか
順序保証なにそれ?とか複数取得出来たりするので実装をだいぶ気をつけないとヤバそうなやつ
それに合わせて実装を頑張ればなんとか出来る
かなり大きいけどリクエストの上限があったり、容量制限がすっごい緩かったりする感じ
最近FIFOオプションとか対応してきてだいぶ良くなってる

ストリーム

最近多くなってきた感じのやつ
大量のリクエストを受け取れたり一定時間保持できたり再処理できたりするサービス
クラウドとオンプレの両方に同じようにある
シャーディング出来るので普通のキューで耐えれないほど大量のリクエストを処理する場合に有効な感じ

DBのキュー

キューというよりポーリングでの実装なのでこれをここに入れるのはちょっと違う気がする
ステータス管理しようが何しようが、普通に作るとDBのロックを使うのでDBへの負荷が結構になる
RDB使っていれば別のサービスとかサーバとか使わなくて良いので追加サーバをようしなくて良くなるのはだいぶ大きいメリット
ただ、この中では唯一と言って良いSQLで不要なメッセージを削除できる能力があるので上手く使うとそこはとっても良い

使い道とか

リクエストに投入する量とかコンシューマの数とかスケール性とかそれ以外の特性を決めると大体何を使ってどういう風に作れば良いのかが決まるはず
なので前提条件を決めずに特定の物をダメと言ったり代替案にするのもいまいちかなぁ〜って思う今日この頃