高效能分散式記憶體佇列系統beanstalkd(轉)
beanstalkd 一個高效能、輕量級的分散式記憶體佇列系統,最初設計的目的是想通過後臺非同步執行耗時的任務來降低高容量Web應用系統的頁面訪問延遲,支援過有9.5 million使用者的Facebook Causes應用。後來開源,之後有PostRank大規模部署和使用,每天處理百萬級任務.
安裝略了PHP客戶端可使用pheanstalk. 可以去github上在看
require_once(`pheanstalk/pheanstalk_init.php`); $pheanstalk = new Pheanstalk(`127.0.0.1:11300`); // Pushing things into the queue for($i=0; $i<1000; $i++) { $job = new stdClass(); $job->envelope_id = rand(); $job->date = date(`Y-m-d H:i:s`); $job_data = json_encode($job); $pheanstalk->useTube(`test`)->put($job_data); echo "pushed: " . $job_data . " "; }
server.php
class Worker { private $path; public function __construct($path) { $this->setBasePath($path); $this->log(`starting`); require_once(`pheanstalk/pheanstalk_init.php`); $this->pheanstalk = new Pheanstalk(`127.0.0.1:11300`); } public function __destruct() { $this->log(`ending`); } private function setBasePath($path) { $this->path = $path; } public function run() { $this->log(`starting to run`); $cnt = 0; $done_jobs = array(); while(1) { $job = $this->pheanstalk->watch(`test`)->ignore(`default`)->reserve(); $job_encoded = json_decode($job->getData(), false); $done_jobs[] = $job_encoded; $this->log(`job:`.print_r($job_encoded, 1)); $this->pheanstalk->delete($job); $cnt++; $memory = memory_get_usage(); $this->log(`memory:` . $memory); if($memory > 1000000) { $this->log(`exiting run due to memory limit`); exit; } usleep(10); } } private function log($txt) { file_put_contents($this->path . `/log/worker.txt`, $txt . " ", FILE_APPEND); } } Picking up things from the queue $worker = new Worker(dirname($argv[0])); $worker->run();
注:
1)可使用supervisor或deamontools等將php worker.php變為守護程式.
2)其它語言類庫參考
worker端不一定用php來寫,可以用Python 或是 nodejs ,go寫,都比PHP強
相關文章
- 從構建分散式秒殺系統聊聊Disruptor高效能佇列分散式佇列
- Laravel 佇列 --- beanstalkd 驅動Laravel佇列Bean
- Laravel 中使用 Beanstalkd 訊息佇列系統傳送郵件LaravelBean佇列
- 簡單易用的任務佇列-beanstalkd佇列Bean
- JUC併發程式設計與高效能記憶體佇列disruptor實戰-下程式設計記憶體佇列
- JUC併發程式設計與高效能記憶體佇列disruptor實戰-上程式設計記憶體佇列
- 怎麼快速記憶系統陣列函式陣列函式
- PHP操作Beanstalkd佇列(1)安裝與基礎PHPBean佇列
- 訊息佇列在大型分散式系統中的實戰要點分析!佇列分散式
- 【轉載】ARM嵌入式系統為什麼要做記憶體對齊記憶體
- (二) MdbCluster分散式記憶體資料庫——分散式架構1分散式記憶體資料庫架構
- 實現簡單延遲佇列和分散式延遲佇列佇列分散式
- PHP操作Beanstalkd佇列(2)生產者與消費者PHPBean佇列
- 段頁式記憶體管理(轉載)記憶體
- 高效能佇列——Disruptor佇列
- 高效能無鎖佇列 Disruptor 初體驗佇列
- 分散式系統學習筆記分散式筆記
- 分散式系統架構筆記分散式架構筆記
- 分散式訊息佇列知識圖譜分散式佇列
- 基於Dynomite的分散式延遲佇列MIT分散式佇列
- Linux記憶體子系統——Locking Pages(記憶體鎖定)Linux記憶體
- 高效能佇列設計佇列
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- 虛擬記憶體系統——瞭解記憶體的工作原理記憶體
- 高效能記憶體快取 ristretto記憶體快取
- Sieve—Android 記憶體分析系統Android記憶體
- 作業系統-記憶體管理作業系統記憶體
- 作業系統——記憶體管理作業系統記憶體
- 分散式之訊息佇列複習精講分散式佇列
- Hatchet:Python中分散式、容錯任務佇列Python分散式佇列
- Facebook的分散式優先順序佇列FOQS分散式佇列
- 分散式服務(RPC)+分散式訊息佇列(MQ)面試題精選分散式RPC佇列MQ面試題
- 記一次 vue 的非同步更新佇列導致記憶體洩漏Vue非同步佇列記憶體
- 分散式系統分散式
- MySQL記憶體管理,記憶體分配器和作業系統MySql記憶體作業系統
- 一個Java基於阻塞的定時消費記憶體佇列Java記憶體佇列
- [轉載] Java直接記憶體與堆記憶體Java記憶體
- 分散式系統2:分散式系統中的時鐘分散式
- 計算機作業系統——虛擬記憶體與實體記憶體計算機作業系統記憶體