beanstalkd 安裝 入門

2021-09-01 16:06:44 字數 4519 閱讀 3394

beanstalkd,乙個高效能、輕量級的分布式記憶體佇列系統,最初設計的目的是想通過後台非同步執行耗時的任務來降低高容量web應用系統的頁面訪問延遲,支援過有9.5 million使用者的facebook causes應用。後來開源,現在有postrank大規模部署和使用,每天處理百萬級任務。beanstalkd是典型的類memcached設計,協議和使用方式都是同樣的風格,所以使用過memcached的使用者會覺得beanstalkd似曾相識。

官網

安裝

centos

yum install beanstalkd --enablerepo=epel
原始碼:

tar -zxvf /usr/bin/beanstalkd/beanstalkd-1.10.tar.gz

cd beanstalkd

make install perfix=/usr/bin/beanstalkd

參考:

啟動

/usr/bin/beanstalkd -l 0.0.0.0 -p 11300 -b /var/lib/beanstalkd/binlog -f &
beanstalkd引數:

/usr/bin/beanstalkd -h

use: /usr/bin/beanstalkd [options]

options:

-b 開啟binlog,斷電後重啟會自動恢復任務。

-f ms fsync最多每ms毫秒

-f從不fsync(預設)

-l addr偵聽位址(預設為0.0.0.0)

-p埠偵聽埠(預設為11300)

-u user成為使用者和組

-z bytes設定最大作業大小(以位元組為單位)(預設值為65535)

-s bytes設定每個wal檔案的大小(預設為10485760) (將被捨入到512位元組的倍數)

-c壓縮binlog(預設)

- n 不要壓縮binlog

-v顯示版本資訊

-v增加冗長度

-h顯示這個幫助

4、配置檔案

/etc/sysconfig/beanstalkd
核心概念

job 的生命週期

當producer直接put乙個job時,job就處於ready狀態,等待consumer來處理,如果選擇延遲put,job就先到delayed狀態,等待時間過後才遷移到ready狀態。consumer獲取了當前ready的job後,該job的狀態就遷移到reserved,這樣其他的consumer就不能再操作該job。當consumer完成該job後,可以選擇delete, release或者bury操作;delete之後,job從系統消亡,之後不能再獲取;release操作可以重新把該job狀態遷移回ready(也可以延遲該狀態遷移操作),使其他的consumer可以繼續獲取和執行該job;有意思的是bury操作,可以把該job休眠,等到需要的時候,再將休眠的job kick回ready狀態,也可以delete buried狀態的job。正是有這些有趣的操作和狀態,才可以基於此做出很多意思的應用,比如要實現乙個迴圈佇列,就可以將reserved狀態的job休眠掉,等沒有ready狀態的job時再將buried狀態的job一次性kick回ready狀態。

一些特性

優先順序任務 (job) 可以有 0~2^32 個優先順序, 0 代表最高優先順序,預設優先順序為1024。

持久化

可以通過binlog將job及其狀態記錄到檔案裡面,在beanstalkd下次啟動時可以通過讀取binlog來恢復之前的job及狀態。

分布式容錯

分布式設計和memcached類似,beanstalkd各個server之間並不知道彼此的存在,都是通過client來實現分布式以及根據tube名稱去特定server獲取job。

超時控制

為了防止某個consumer長時間占用任務但不能處理的情況,beanstalkd為reserve操作設定了timeout時間,如果該consumer不能在指定時間內完成job,job將被遷移回ready狀態,供其他consumer執行。

1、向佇列中新增job

<?php 

//建立佇列訊息

require_once('./vendor/autoload.php');

use pheanstalk\pheanstalk;

$pheanstalk = new pheanstalk('127.0.0.1',11300);

$tubename='user_eamil_message_list';

$jobdata=array(

'uid' => time(),

'email' => '[email protected]',

'message' => 'hello world !!',

'dtime' => date('y-m-d h:i:s'),

);$pheanstalk ->usetube( $tubename) ->put( json_encode( $jobdata));

echo json_encode($jobdata).php_eol;

echo 'success ~~'.php_eol;

2、從佇列中取出job

<?php 

//消費佇列訊息

require_once('./vendor/autoload.php');

use pheanstalk\pheanstalk;

$pheanstalk = new pheanstalk('127.0.0.1',11300);

$tubename='user_eamil_message_list';

while(true)

//暫停(不可能是百分百的準確,跟系統的排程、cpu時鐘週期等有一定關係)

usleep(500000);

}echo 'success ~~'.php_eol;

3、檢查服務狀態

<?php 

//監控服務狀態

require_once('./vendor/autoload.php');

use pheanstalk\pheanstalk;

$pheanstalk = new pheanstalk('127.0.0.1',11300);

$isalive = $pheanstalk->getconnection()->isservicelistening();

var_dump($isalive);

/**可以開發監控面板,監控資料的,有多少tube,多少佇列,多少延遲等等

//檢視beanstalkd狀態

//var_dump($pheanstalk->stats());

//檢視有多少個tube

//var_dump($pheanstalk->listtubes());

//設定要監聽的tube

$pheanstalk->watch('test');

//取消對預設tube的監聽,可以省略

$pheanstalk->ignore('default');

//檢視監聽的tube列表

//var_dump($pheanstalk->listtubeswatched());

//檢視test的tube當前的狀態

//var_dump($pheanstalk->statstube('test'));

*/

測試:

生產訊息:

$ php  producer.php 

success ~~

php producer.php

success ~~

php producer.php

success ~~

消費訊息:

$ php consumer.php 

執行成功

執行成功

執行成功

參考:

ELK安裝入門

簡介 elk 由 elasticsearch logstash 和kiabana 三個開源工具組成。官方 1 elasticsearch 是個開源分布式搜尋引擎,它的特點有 分布式,零配置,自動發現,索引自動分片,索引副本機制,restful 風格介面,多資料來源,自動搜尋負載等。2 logstas...

sass安裝入門

安裝的時候注意勾選第二項 add ruby executablesto your path.配置全域性變數。安裝完成過後,可以通過ruby v檢視是否成功。1 官方安裝 gem install sass sass v 檢視是否安裝成功 2 安裝rubychina的源 gem sources remo...

git 安裝 入門

1.開啟eclipse 3.search git 安裝 隨便乙個 都可以 4.配置git 提交 ssh2 5.登入 github 6.進入 settings 7.新增 ssh2 key 也就是之前複製的public key 8.修改 git repository 通過命令把bblog 上傳到 hex...