高性能分布式内存队列系统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 . "\n";
- }
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 . "\n", 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强
高性能分布式内存队列系统beanstalkd(转)的更多相关文章
- Beanstalkd 一个高性能分布式内存队列系统
需要一个分布式内存队列,能支持这些特性:任务不重不漏的分发给消费者(最基础的).分布式多点部署.任务持久化.批量处理.错误重试..... 转载:http://rdc.taobao.com/blog/c ...
- Beanstalkd一个高性能分布式内存队列系统
高性能离不开异步,异步离不开队列,内部是Producer-Consumer模型的原理. 设计中的核心概念: job:一个需要异步处理的任务,是beanstalkd中得基本单元,需要放在一个tube中: ...
- 一个高性能、轻量级的分布式内存队列系统--beanstalk
Beanstalk是一个高性能.轻量级的.分布式的.内存型的消息队列系统.最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟.其实Beanstalkd是典型的类Mem ...
- Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇
目前业界流行的分布式消息队列系统(或者可以叫做消息中间件)种类繁多,比如,基于Erlang的RabbitMQ.基于Java的ActiveMQ/Apache Kafka.基于C/C++的ZeroMQ等等 ...
- Netty构建分布式消息队列实现原理浅析
在本人的上一篇博客文章:Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇 中,重点向大家介绍了AvatarMQ主要构成模块以及目前存在的优缺点.最后以一个生产者.消费者传递消息的例子, ...
- 深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件. 本场 Chat 主要内容: Kafk ...
- Kafka 和 ZooKeeper 的分布式消息队列分析
1. Kafka 总体架构 基于 Kafka-ZooKeeper 的分布式消息队列系统总体架构如下: 如上图所示,一个典型的 Kafka 体系架构包括若干 Producer(消息生产者),若干 bro ...
- kafka高吞吐量的分布式发布订阅的消息队列系统
一:kafka介绍kafka(官网地址:http://kafka.apache.org)是一种高吞吐量的分布式发布订阅的消息队列系统,具有高性能和高吞吐率. 1.1 术语介绍BrokerKafka集群 ...
- 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训
原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...
随机推荐
- Linux环境下使用perl编写CGI(httpd)
例子1: /var/www/cgi-bin/hello.cgi #!/usr/bin/perl print "Content-type: text/html\n\n"; print ...
- 使用SQL语句向已有数据表添加约束
如果向存在数据的表里添加约束,有可能会出现数据不符合检查约束而造成添加约束失败. 如: 这是一个表,为身份证号添加检查约束. USE DEmo--指向当前操作的数据库 GO ALTER TABLE E ...
- loj 1316(spfa预处理+状压dp)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27024 题意:求0-(n-1)的经过最多的标记的点的最短路. 思路 ...
- ios摇一摇截屏代码
#import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...
- CE搜索内存数据的原理
最近发现有朋友在玩游戏时, 使用一款工具来修改游戏的部分数据,作弊的效果, 也就是CE(Cheat Engine),这款工具是 delphi 编写的, 于是好奇, 然后瞬间想到API OpenPr ...
- JAVA多线程实现的四种方式
Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Cal ...
- RxJava
Grokking RxJava, Part 1: The Basics Grokking RxJava, Part 2: Operator, Operator Grokking RxJava, Par ...
- 通俗理解T检验与F检验的区别【转】
转自:http://blog.sina.com.cn/s/blog_4ee13c2c01016div.html1,T检验和F检验的由来一般而言,为了确定从样本(sample)统计结果推论至总体时所犯错 ...
- IComparer 指定排序。
public class NeEntityComparer : IComparer<NeEntity> { public int Compare(NeEntity x, NeEntity ...
- Bower In ASP.NET Core
创建一个ASP.NET Core MVC项目的时候,会产生一个bower.json的文件,用于管理前段的js. NPM & Bower NPM主要运用于Node.js项目的内部依赖包管理,安装 ...