memcacheQ是一個單純的分布式消息隊列服務(wù)。
一,MEMCACHEQ的應用背景
Web應用中為什
么 會需要消息隊列?主要原因是由于在高并發(fā)環(huán)境下,由于來不及同步處理,請求往往會發(fā)生堵塞,比如說,大量的insert,update之類的請求同時到達 mysql,直接導致無數(shù)的行鎖表鎖,甚至最后請求會堆積過多,從而觸發(fā)too manyconnections錯誤。通過使用消息隊列,我們可以異步處理請求,從而緩解系統(tǒng)的壓力。在Web2.0的時代,高并發(fā)的情況越來越常見,從 而使消息隊列有成為居家必備的趨勢,相應的也涌現(xiàn)出了很多實現(xiàn)方案,像Twitter以前就使用RabbitMQ實現(xiàn)消息隊列服務(wù),現(xiàn)在又轉(zhuǎn)而使用 Kestrel來實現(xiàn)消息隊列服務(wù),此外還有很多其他的選擇,比如說:ActiveMQ,ZeroMQ等。
上述消息隊列的軟件中,大多為了實現(xiàn)AMQP,STOMP,XMPP之類的協(xié)議,變得極其重量級,但在很多Web應用中的實際情況是:我們只是想找到一個緩解高并發(fā)請求的解決方案,不需要雜七雜八的功能,一個輕量級的消息隊列實現(xiàn)方式才是我們真正需要的。
二,MEMCACHEQ的特性
1 簡單易用
2 處理速度快
3 多條隊列
4 并發(fā)性能好
5 與memcache的協(xié)議兼容。這就意味著只要裝了memcache的extension就可以了,不需要額外的插件。
三,安裝
MEMCACHEQ依賴于libevent和BerkleyDB。
BerkleyDB用于持久化存儲隊列的數(shù)據(jù)。 這樣在MEMCACHEQ崩潰或者服務(wù)器掛掉的時候,
不至于造成數(shù)據(jù)的丟失。這一點很重要,很重要。
它的安裝依賴于BerkeleyDB 和 libevent,所以要先安裝這BerkeleyDB和libevent:
其中l(wèi)ibevent如果你安裝過memcached就已經(jīng)安裝了,如果不確定,就檢查一下吧
1. 先檢查libevent, libevent-devel是否已經(jīng)安裝: rpm -qa|grep libevent 輸出中必須包含libevent, libevent-deve, 如果缺失,使用以下命令安裝:
yum install libevent yum
install libevent-devel
注意事項:libevent, libevent-devel優(yōu)先使用yum安裝源,光盤鏡像中的rpm包安裝,這樣穩(wěn)定性和兼容性可得到保證,網(wǎng)上流傳的使用源碼安裝libevent 的方法會有問題,因為很可能系統(tǒng)已經(jīng)安裝libevent, 再使用源碼安裝, 必然導致沖突,造成意外問題,所以一定要使用上述命令檢查系統(tǒng)是否已經(jīng)安裝相應的庫
2. 安裝BerkleyDB
1.tar zxvf bdb-5.3.3.tar.gz
2.cd db-5.3.3/
#需要進入特定操作系統(tǒng)編譯環(huán)境,更常規(guī)軟件的編譯有些區(qū)別
3.cd build_unix/
4. ../dist/configure --prefix=http://www.3lian.com/usr/local/berkeleydb
#如果沒有指定特殊安裝路徑,編譯完成,需要將Berkeley Db運行庫的路徑添加到系統(tǒng)配置里面
echo "/usr/local/BerkeleyDB.5.3/lib/" >> /etc/ld.so.conf
#重載系統(tǒng)Ld運行庫
ldconfig
5. make & make install
記得改/etc/ld.so.conf文件,添加/usr/local/BerkeleyDB.5.3/lib啊,不然后面的mcq會安裝錯誤。
而BerkeleyDB就要去下載了
點擊下載Berkeley DB 5.3.21.rar
下面安裝memcacheq,
先下載一個memcacheq-0.2.0.rar
解壓,進目錄
./configure –with-bdb=http://www.3lian.com/usr/local/BerkeleyDB.5.1 –with-libevent=http://www.3lian.com/usr/local/lib –enable-threads
make
make install
關(guān)鍵是紅色字體那一步,一定輸入正確,不然make不通過,無法安裝
下面是啟動
memcacheq -d -r -u root -p21201 -H /data/memcacheq -N -v -L 1024 -B 1024 > /data/mq_error.log 2>&1
這里不推薦使用root用戶,有些帖子里說不可以,我這里測試是可以的,不過可能會不安全。
1 下面是啟動時候的參數(shù)
使用memcacheq -h 的命令來查看命令行選項
2 這個是正確的啟動memcacheq:memcacheq -d -uroot -r -p11212 -H /home/wwwroot/mcq -N -R -v -L 1024 -B 1024 > /home/wwwlogs/mq_error.log 2 > &1
3 這個不知道為什么就不行/usr/local/memcacheq/bin/memcacheq -d -l 127.0.0.1 -A 8192 -H /data/memcacheq -B 65535 -N -R -u root
-p <num> TCP監(jiān)聽端口(default: 22201)
-U <num> UDP監(jiān)聽端口(default: 0, off)
-s <file> unix socket路徑(不支持網(wǎng)絡(luò))
-a <mask> unix socket訪問掩碼(default 0700)
-l <ip_addr> 監(jiān)聽網(wǎng)卡
-d 守護進程
-r 最大化核心文件限制
-u <username> 以用戶身份運行(only when run as root)
-c <num> 最大并發(fā)連接數(shù)(default is 1024)
-v 詳細輸出 (print errors/warnings while in event loop)
-vv 更詳細的輸出 (also print client commands/reponses)
-i 打印許可證信息
-P <file> PID文件
-t <num> 線程數(shù)(default 4)
--------------------BerkeleyDB Options-------------------------------
-m <num> BerkeleyDB內(nèi)存緩存大小, default is 64MB
-A <num> 底層頁面大小, default is 4096, (512B ~ 64KB, power-of-two)
-H <dir> 數(shù)據(jù)庫家目錄, default is '/data1/memcacheq'
-L <num> 日志緩沖區(qū)大小, default is 32KB
-C <num> 多少秒checkpoint一次, 0 for disable, default is 5 minutes
-T <num> 多少秒memp_trickle一次, 0 for disable, default is 30 seconds
-S <num> 多少秒queue stats dump一次, 0 for disable, default is 30 seconds
-e <num> 達到緩存百分之多少需要刷新, default is 60%
-E <num> 一個單一的DB文件有多少頁, default is 16*1024, 0 for disable
-B <num> 指定消息體的長度,單位字節(jié), default is 1024
-D <num> 多少毫秒做一次死鎖檢測(deadlock detecting), 0 for disable, default is 100ms
-N 開啟DB_TXN_NOSYNC獲得巨大的性能改善, default is off
-R 自動刪除不再需要的日志文件, default is off
測試