beanstalkd概要
キューシステム
producers(生産者)とworker(労働者)がjobのやりとりをする
jobの状態は、[READY]・[RESERVED]・[DELAYED]・[BURIED]がある
インストール
uname -a Linux akat 3.2.0-54-generic #82-Ubuntu SMP Tue Sep 10 20:08:42 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux vi /etc/default/beanstalkd ################################## ## Defaults for the beanstalkd init script, /etc/init.d/beanstalkd on ## Debian systems. Append ``-b /var/lib/beanstalkd'' for persistent ## storage. BEANSTALKD_LISTEN_ADDR=0.0.0.0 BEANSTALKD_LISTEN_PORT=11300 # キューはメモリ上に展開するが、-bオプションでディレクトリを設定すると、ディスクにログが残り、再起動時もキューがクリアされない BEANSTALKD_BINLOG_DIR=/var/lib/beanstalkd/ DAEMON_OPTS="-l $BEANSTALKD_LISTEN_ADDR -p $BEANSTALKD_LISTEN_PORT -b $BEANSTALKD_BINLOG_DIR" ## Uncomment to enable startup during boot. START=yes ################################## /etc/init.d/beanstalkd start * Starting in-memory queueing server beanstalkd [ OK ] netstat -anp | grep beanstalkd tcp 0 0 0.0.0.0:11300 0.0.0.0:* LISTEN 9811/beanstalkd unix 3 [ ] STREAM CONNECTED 254916 9811/beanstalkd unix 3 [ ] STREAM CONNECTED 254915 9811/beanstalkd
producers用コマンド
telnet localhost 11300 # ★beanstalkdに接続する # キューにjobを登録する # put <pri> <delay> <ttr> <bytes>\r\n # <data>\r\n # <pri> 優先度。整数値2**32以下の値で小さいほうが優先される # <delay> readyキューに入るまでに待つ時間。このときは”delayed”状態と呼ぶ # <ttr> workerがこのjobを処理するために許可する秒数。workerがreserveしてからカウントが開始される # この秒数の間に、delete, release, buryされなければ、jobをタイムアウトし、releaseする。最小値1、clientが0を送ってきても1に変更する # <bytes> jobのbodyの容量数(bytes) # <data> jobのbodyの文字列 put 1024 10 10 5 # ★キューにjobをいれる job01 # データ(上で指定したbytes数ぴったりでないと問題と入力を受け付けなかったため注意) INSERTED 1 use tube1 # ★putするtubeの指定、なければtube名defaultに入る USING tube1 list-tube-used # ★利用しているtubeの表示 USING tube1 put 1024 10 10 5 job02 INSERTED 2 put 1024 10 10 5 job03 INSERTED 3
worker用コマンド
基本的に”reserve”, “delete”,”release”, and “bury”を利用してjobを操作する
※コマンドは★マーク付き
telnet localhost 11300 # ★beanstalkdに接続する reserve # ★jobをreserveする。多くのjobがあった場合は一番小さいpriを持つものを返却する、priが同じであれば、最初に受け取ったjobを返す RESERVED 1 5 job01 delete 1 # ★jobをdeleteする DELETED ★★★ watch tube1 # ★watchしたtubeはwatchリストに加えられる。reserveコマンドはwatchリストからjobを取得する。tube名defaultは最初からwatchしている ※deleteはwatchしていなくても削除可能 WATCHING 2 list-tubes-watched # ★現在クライアントからwatchedされているtubeのlistを返す OK 22 — - default - tube1
その他コマンド
telnet localhost 11300 # ★beanstalkdに接続する stats # ★システム全体の統計情報 OK 807 --- current-jobs-urgent: 0 # priority < 1024 であるready jobの数 current-jobs-ready: 2 # ready queueに入っているjob数 current-jobs-reserved: 0 # すべてのクライアントからreservedされているjob数 current-jobs-delayed: 0 current-jobs-buried: 0 cmd-put: 3 # putコマンド累計数 cmd-peek: 0 # peekコマンド累計数 cmd-peek-ready: 0 # peek-readyコマンド累計数 cmd-peek-delayed: 0 cmd-peek-buried: 0 cmd-reserve: 1 cmd-reserve-with-timeout: 0 cmd-delete: 1 cmd-release: 0 cmd-use: 1 cmd-watch: 1 cmd-ignore: 0 cmd-bury: 0 cmd-kick: 0 cmd-touch: 0 cmd-stats: 1 cmd-stats-job: 0 cmd-stats-tube: 0 cmd-list-tubes: 0 cmd-list-tube-used: 2 cmd-list-tubes-watched: 1 cmd-pause-tube: 0 job-timeouts: 1 # タイムアウトしたjobの累計数 total-jobs: 3 # 生み出したjobの累計数 max-job-size: 65535 # jobの最大サイズ(byte) current-tubes: 2 current-connections: 1 # 現在開いている接続数 current-producers: 0 # 少なくとも1回以上putコマンドを実行した現在接続している数 current-workers: 1 # 少なくとも1回以上reserveコマンドを実行した現在接続している数 current-waiting: 0 # reserve commandを発行して、レスポンスを待っている現在接続している数 total-connections: 2 # 累計接続数 pid: 10120 version: 1.4.6 rusage-utime: 0.004000 # このプロセスが利用したuserCPU時間 rusage-stime: 0.000000 # このプロセスが利用したsystemCPU時間 uptime: 497 binlog-oldest-index: 1 binlog-current-index: 1 binlog-max-size: 10485760 list-tubes # ★存在するtubeを表示する OK 22 — - default - tube1 stats-tube tube1 # ★tubeの確認 OK 249 --- name: tube1 # tube名 current-jobs-urgent: 0 # priority < 1024 であるready jobの数 current-jobs-ready: 2 # ready queueに入っているjob数 current-jobs-reserved: 0 # すべてのクライアントからreservedされているjob数 current-jobs-delayed: 0 current-jobs-buried: 0 total-jobs: 2 # このtubeで生み出されたjobの累計総数 current-using: 0 # このtubeに接続している数 current-watching: 1 current-waiting: 0 # reserve commandを発行して、レスポンスを待っている状態の接続している数 cmd-pause-tube: 0 # このtubeにて実行したpause-tube commandsの累計数 pause: 0 # このtubeでのpauseされた秒数 pause-time-left: 0 # pause解除までの秒数 use tube1 peek-ready # ★次のready jobidを返す (peek:のぞく) FOUND 2 5 job02 peek-delayed # ★次のdelayedされたjobidを返す NOT_FOUND peek-buried # ★次のburiedされたjobidを返す NOT_FOUND peek 2 # ★jobidを返す FOUND 2 5 job02 stats-job 2 # ★jobの統計情報を表示する OK 140 --- id: 2 tube: tube1 # このjobが含まれているtube名 state: ready # “ready” or “delayed” or “reserved” or “buried” pri: 1024 # put,release,buryコマンド時に入力されたpriority値 age: 892 # putコマンドでこのjobができてから経過した秒数 delay: 10 ttr: 10 time-left: 0 # サーバがこのjobをready queueにputしてから、残された秒数? reserves: 0 # このjobがreservedされた回数 timeouts: 0 # このjobがreservedされたときにタイムアウトした回数 releases: 0 # このjobがreservedされたときにreleaseした回数 buries: 0 # このjobがburiedされた回数 kicks: 0 # このjobがkickedされた回数 quit # ★終了する Connection closed by foreign host.
キューの可視化
beanstalk_console
https://github.com/ptrofimov/beanstalk_console
wget -d https://github.com/downloads/ptrofimov/beanstalk_console/beanstalk_console.zip unzip beanstalk_console.zip chown -R www-data:www-data beanstalk_console vi lib/include.php # /* Write here list of your servers */ を'127.0.0.1:11300' に書き換え
・全体をみやすい(jobが追加されたときに色づけ可能)
・job追加時にprioryなども設定して投入可能
・jobの詳細情報が確認可能
phpBeanstalkdAdmin
http://mnapoli.fr/phpBeanstalkdAdmin/
wget -d https://github.com/mnapoli/phpBeanstalkdAdmin/tarball/master tar xzvf master chown -R www-data:www-data mnapoli-phpBeanstalkdAdmin-4ed210d cd mnapoli-phpBeanstalkdAdmin-4ed210d/ vi .htaccess # php_flagをコメントアウト
参考URL
https://github.com/kr/beanstalkd/wiki/faq
http://nubyonrails.com/articles/about-this-blog-beanstalk-messaging-queue
https://github.com/kr/beanstalkd/blob/master/doc/protocol.txt