专栏首页Java架构师必看使用Gearman做分布式计算

使用Gearman做分布式计算

通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用WebService的方式来处理此类PHP

 通常,多语言

一个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

while ($worker->work());

function my_reverse_function($job) {     return strrev($job->workload()); } ?>

设置后台运行work:

php worker.php &

编写Client:

client.php文件内容如下:

<?php

运行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

本文由来源 21aspnet,由 system_mush 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项

    Tomcat有Tomcat7,Tomcat8和Tomcat9等版本,目前企业使用较多的是Tomcat8,所以这里以Tomcat8为列

    Java架构师必看
  • 事半功倍系列 javascript

    清华大学出版的《事半功倍系列javascript》,本人照着书敲出来的,有些翻译了一下.前几年...

    Java架构师必看
  • Flink在美团的应用与实践听课笔记

    原始视频视频资源已经在优酷公开:2018.8.11 Flink China Meetup·北京站-Flink在美团的应用与实践

    Java架构师必看
  • Aloha:一个分布式任务调度框架

    Aloha 是一个基于 Scala 实现的分布式的任务调度和管理框架,提供插件式扩展功能,可以用来调度各种类型的任务。Aloha 的典型的应用场景是作为统一的任...

    Spark学习技巧
  • python 实现 2048 游戏 (二)

    上一篇文章中,我们梳理了实现简易版 2048 游戏的基本知识,这篇文章将介绍如何实现各个模块。换句话说,上一次我们确定了旅行的目的地,这一次就让我们自由畅行在山...

    用户2870857
  • 手残手抖不再害怕,你也可以画出逼真的肖像画

    真相可能让你大跌眼镜,第二行的帅哥美女都是AI根据第一行的灵魂画作想象出来的。神奇的是AI能准确地识别出潦草的笔触画出的发型、眉毛、眼神、脸部轮廓,甚至是嘴巴的...

    AI科技评论
  • 怎样成为解决问题的高手(连载一)

    什么是问题?一言以蔽之,问题来源于现实与目标的差距。因此,问题产生的原因可能是不清楚目标是什么;还可能是不知道差距产生的原因是什么;或者虽然知道差距产生的原因,...

    黄成甲
  • Spring/Spring Boot中使用@Async

    当我们在调用某些耗时的方法,比如发起第三方调用时而不关心他的返回值,可以采用@Async来实现异步调用。极大的提升程序的响应速度。

    我的小熊不见了丶
  • 这家日活8000万的羞羞网站,公布了这些重口味的羞羞数据

    著名的大型性教育科普网站Pornhub每年都会发布一次数据,在其最新发布的2017年度数据中,有以下有趣的点:

    挖数
  • 条件格式单元格图表

    今天跟大家分享条件格式单元格图表! ▼ 这类图表比较特殊,不是通过excel的内置图标库制作,而是通过excel的条件格式工具制作的存放在单元格中的图表。这种图...

    数据小磨坊

扫码关注云+社区

领取腾讯云代金券