使用Gearman做分布式计算
通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用WebService的方式来处理此类集成问题,但不管采用何种风格的WebService,如RPC风格,或者REST风格,其本身都有一定的复杂性。相比之下, Gearman也能实现类似的作用,而且更简单易用。
一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。
Client:请求的发起者,可以是C,PHP,Perl,MySQL UDF等等。
Job:请求的调度者,用来负责协调把Client发出的请求转发给合适的Work。
Worker:请求的处理者,可以是C,PHP,Perl等等。
因为Client,Worker并不限制用一样的语言,所以有利于多语言多系统之间的集成。
甚至我们通过增加更多的Worker,可以很方便的实现应用程序的分布式负载均衡架构。
下面看看如何安装运行一个例子,条件所限,我们把Client,Job,Worker三个角色运行在一台服务器上:
安装Gearman server and library:
wget http://launchpad.net/gearmand/trunk/0.8/+download/gearmand-0.8.tar.gz
tar zxf gearmand-0.8.tar.gz
cd gearmand-0.8
./configure
make
make install
安装Gearman PHP extension:
wget http://pecl.php.net/get/gearman-0.4.0.tgz
tar zxf gearman-0.4.0.tgz
cd gearman-0.4.0
phpize
./configure
make
make install
编辑php.ini配置文件加载相应模块并使之生效:
extension = "gearman.so"
启动Job:
gearmand -d
如果当前用户是root的话,则需要这样操作:
gearmand -d -u root
缺省会使用4730端口,下面会用到。
注意:如果找不到gearmand命令的路径,别忘了用whereis gearmand确认。
编写Worker:
worker.php文件内容如下:
<?php
$worker= new GearmanWorker();
$worker->addServer('127.0.0.1', 4730);
$worker->addFunction('reverse', 'my_reverse_function');
while ($worker->work());
function my_reverse_function($job)
{
return strrev($job->workload());
}
?>
设置后台运行work:
php worker.php &
编写Client:
client.php文件内容如下:
<?php
$client= new GearmanClient();
$client->addServer('127.0.0.1', 4730);
echo $client->do('reverse', 'Hello World!'), "\n";
?>
运行client:
php client.php
输出:!dlroW olleH
出于方便的考虑,Worker,Client使用的都是PHP,但这并不影响演示,实际应用中,你完全可以通过Gearman集成不同语言实现的Worker,Client。或许此时你还想了解前面提到的负载均衡功能:很简单,只要增加多个Worker即可,你可以按照worker.php的样子多写几个类似的文件,并设置不同的返回值用以识别演示效果。然后依次启动这几个Worker文件,并多次使用client.php去请求,你就会发现Job会把Client请求转发给不同的Worker。
命令行工具
如果你觉得安装PHP之类的东西太麻烦的话,你也可以仅仅通过命令行工具来体验Gearman的功能:
启动Worker: gearman -w -f wc -- wc -l &
运行Client: gearman -f wc < /etc/passwd
具体可以参考 官方文档,还有一些不错的 PDF。
使用Gearman做分布式计算相关推荐
- 浅谈分布式计算的开发与实现(一)
阅读目录: 介绍 利用分片算法 利用消息队列 Hadoop简介 MapReduce 离线计算 介绍 分布式计算简单来说,是把一个大计算任务拆分成多个小计算任务分布到若干台机器上去计算,然后再进行结果汇 ...
- 浅谈分布式计算的开发与实现
2019独角兽企业重金招聘Python工程师标准>>> 介绍 分布式计算简单来说,是把一个大计算任务拆分成多个小计算任务分布到若干台机器上去计算,然后再进行结果汇总. 目的在于分析计 ...
- 【沉淀】从网络中间件到搜索,从移动开发到分布式计算平台,阿里高级专家李睿博谈自己的折腾路...
<沉淀>是云栖社区展示专家风采的人物栏目.它呈现每个专家独一无二的人生经历.认识和感悟的同时,也能帮助你沉淀技术,收获对技术和人生的判断.我们的想法是:"若你想精进为一个很厉害的 ...
- 谁说高颜值女神做不了技术?她偏做,还是百万级主链!
记者 | Aholiab 编者注:以下内容根据迅雷链总工程师来鑫采访整理,并获得独家授权,未经许可不得擅自转载. 还有20来天,万众期待的EOS主网就要上线了,公链的战场里又会入场一个大玩家.在中国, ...
- 【科创人独家】远望资本创始人程浩:四旬少年的玩味儿人生,做投资玩王者皆需逆风坚守
接触过程浩的人,定会被他昂扬的语气和随时可能爆发出的笑声感染,只要30秒就能产生这样的感觉:这人,实在. 对话中,程浩复盘了他成长过程中几次关键决策背后的思考,<科创人>尽量原汁呈现. 离 ...
- 使用 Gearman 实现分布式处理
因为近来在研究 Mogilefs 的分布文件系统,在读读这个的源码,另外,为公司新设计了一个下载的系统,所以更加要深入研究一下,因为这个好东西是 Perl 写的,真不容易,在读这个的时间发现了几个好东 ...
- makefile学习(转载)
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客: http://blog.csdn.net/haoel/article/details/2886 makefile很重 ...
- 谈谈职业规划——CSDN对我的采访
职业规划就像软件工程 电信.银行等行业一直是许多人非常向往的工作单位,清差厚禄,旱涝保收,陈皓却不以此为然.所以当记者采访他的时候,他连用了两个"最"字来形容他离开银行的成就感. ...
- 一文总结词向量的计算、评估与优化
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:芙蕖,Datawhale优秀学习者,东北石油大学 为了处理语言,需 ...
最新文章
- EXPLAIN PLAN获取SQL语句执行计划
- POJ 2987 Firing(最大权闭合图)
- 测试一下能够图文混排
- 9、MySQL定义条件和处理程序
- OC-Foundation框架
- C# (逻辑与) ||(逻辑或)优先级辨析
- javascript/jquery获取图片的原始大小
- .net remoting 技术
- java写的小米商城_Taru-Xmall
- 全新We7 CMS 2.6版火热发布
- mysql open files
- 计算机动画的教育应用研究,计算机动画技术在高校CAI课件制作中的应用研究
- 顺风车这么难搞,滴滴为何从不放弃?
- 记一次失败的项目经历
- vue 网络异常提示
- 分享下自己的经历!2020春招四五月份大厂面经 一:(腾讯、网易、斗鱼、富途、美团、快手)
- 用 python 对音乐(音频)进行处理,画出相应的音谱图
- 实战篇ConstraintLayout的崛起之路
- 刘可 寂寞才说爱歌曲试听 刘可 寂寞才说爱MP3歌词
- The Pilots Brothers' refrigerator开灯问题
热门文章
- html表格重置标签,HTML——表格标签
- java 跳转 oop_Java基础之:OOP——接口
- linux执行命令段错误,Linux运行fortran程序 出现段错误(segmentation fault)
- data的值 如何初始化vue_vue data恢复初始化数据的实现方法
- IDEA Java解析GeoJson.json文件
- Anaconda中pytorch环境搭建(包括详细的虚拟环境创建,以及虚拟环境中jupyter notebook的使用)
- keras 的 example 文件 addition_rnn.py 解析
- 深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失梯度爆炸)
- C++中的双冒号(::)
- 1 字节的 utf-8 序列的字节 1 无效_字节码文件结构详解