当前位置: 首页 > 编程日记 > 正文

CentOS的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三个角色运行在一台服务器上:

安装libevent:

wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz
tar zxvf libevent-1.4.12-stable.tar.gz
cd libevent-1.4.12-stable/
./configure --prefix=/usr
make && make install
/sbin/ldconfig
cd ../

安装Gearman server and library:

wget http://launchpad.net/gearmand/trunk/0.9/+download/gearmand-0.9.tar.gz
tar zxvf gearmand-0.9.tar.gz
cd gearmand-0.9
./configure
make
make install
/sbin/ldconfig
cd ../

安装Gearman PHP extension:

wget http://pecl.php.net/get/gearman-0.5.0.tgz
tar zxvf gearman-0.5.0.tgz
cd gearman-0.5.0
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-gearman
make
make install
cd ../

编辑php.ini配置文件加载相应模块并使之生效:

extension = "gearman.so"

启动Job:

gearmand -d

如果当前用户是root的话,则需要这样操作:

gearmand -d -u root

缺省会使用4730端口,下面会用到。

注意:如果找不到gearmand命令的路径,别忘了用whereis gearmand确认。

我们可以用 ps 指令來查看启动是否成功:

ps aux |grep gearman

编写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 /var/www/html/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 /var/www/html/client.php

输出:!dlroW olleH

首先, PHP Gearman Extension 提供了一个名为GearmanClient 的类别,它可以让程序安排工作给 Job Server 。

addServer 方法表示要通知的是哪些 Job Server ,也就是说如果有多台 Job Server 的话,就可以透过 addServer 新增。

然后我们将要呼叫哪个 Worker 以及该 Worker 所需要的数据,利用 GearmanClient 的doBackground 方法传送过去。 doBackground 方法顾名思义就是在背景执行, Client 在丢出需求后就可以继续处理其他的程序。

=============

$client->doBackground('sendEmail', serialize($emailData));
echo "Email sending is done.\n";

============

doBackground 方法的第一个参数是告诉 Job Server 要执行哪个功能,而这个功能则是由 Worker 提供的;要注意是,这个参数只是识别用的,并不是真正的函式名称。而第二个参数是要传给 Worker 的数据,它必须是个字符串;因此如果要传送的是数组的话,我们就要用 PHP 的 serialize 函式来对这些资料做串行化。



出于方便的考虑,Worker,Client使用的都是PHP,但这并不影响演示,实际应用中,你完全可以通过Gearman集成不同语言实现的Worker,Client。或许此时你还想了解前面提到的负载均衡功能:很简单,只要增加多个Worker即可,你可以按照worker.php的样子多写几个类似的文件,并设置不同的返回值用以识别演示效果。然后依次启动这几个Worker文件,并多次使用client.php去请求,你就会发现Job会把Client请求转发给不同的Worker。

以守护进程启动
gearmand -L 192.168.0.1 -p 4730 -u root -d

命令行工具

如果你觉得安装PHP之类的东西太麻烦的话,你也可以仅仅通过命令行工具来体验Gearman的功能:

启动Worker:gearman -w -f wc -- wc -l &
运行Client:gearman -f wc < /etc/passwd

具体可以参考官方文档,还有一些不错的PDF。

http://docs.php.net/manual/zh/book.gearman.php

http://www.ibm.com/developerworks/cn/opensource/os-php-gearman/index.html


也可以参考此文:http://www.jaceju.net/blog/archives/1211

分布式基础学习【一】 —— 分布式文件系统

http://www.cnblogs.com/duguguiyu/archive/2009/02/22/1396034.html

分布式基础学习【二】 —— 分布式计算系统(Map/Reduce)

http://www.cnblogs.com/duguguiyu/archive/2009/02/28/1400278.html

淘宝网Hadoop专家

http://coderplay.javaeye.com/



相关文章:

putty或xshell上用vi/vim小键盘无法使用的解决方法

在putty或xshell上用vi/vim的时候&#xff0c;开NumLock时按小键盘上的数字键并不能输入数字&#xff0c;而是出现一个字母然后换行(实际上是命令模式上对应上下左右的键)。解决方法&#xff1a;putty&#xff1a;选项Terminal->Features里&#xff0c;找到Disable applicat…

Sqoop数据分析引擎安装与使用

Sqoop数据分析引擎安装与使用>什么是Sqoop ?Sqoop 是一个开源的数据处理引擎&#xff0c;主要是通过 JDBC 为媒介&#xff0c; 在Hadoop&#xff08;Hive&#xff09;与 传统的关系型数据库(Oracle, MySQL,Postgres等)间进行数据的传递HDFS Hive HBase < JD…

《独辟蹊径品内核:Linux内核源代码导读(china-pub首发)》的前言

我觉得作者讲的学习方法很好值得看看。 下面是本书作者所写&#xff1a; 几乎每一个操作系统内核的学习者在初学阶段都会感觉到难以入门。这是由于内核涉及到知识面非常广泛&#xff0c;需要学习者从根本上掌握大量的知识&#xff0c;这包括&#xff1a;程序编译&#xff0c;链…

95后架构师晒出工资单:狠补了这个,真香...

经常会有很多人说&#xff1a;“不是谁都可以成为架构师的。”“我们公司用的就是那点东西&#xff0c;不需要会太多。”“技术够用就行了。”…其实他们说的不错&#xff0c;但我也总觉得&#xff0c;程序员可以是一个非常热血的职业。即使不是人人都可以成为架构师&#xff0…

趣味图形之 余弦函数cos与直线相交(另一种相交)

高中的时候做的&#xff0c;前两天看了看&#xff0c;挺好玩的。只想说&#xff0c;当初的代码风格&#xff0c;&#xff0c;&#xff0c;&#xff0c;咳咳&#xff0c;算不上风骚&#xff01;#include <math.h> #include <stdio.h> int main (void) {double y;int…

AI时代:推荐引擎正在塑造人类

We shape our tools and afterwards our tools shape us. ------Marshall McLuhan 麦克卢汉说&#xff1a;“我们塑造了工具&#xff0c;反过来工具也在塑造我们。” 我本人不反感AI&#xff0c;也相信人工智能会开创一个伟大的时代&#xff0c;但是我们要思考一些东西&#xf…

mogileFS 分布式存储-安装手记

环境是centos 呃,装个玩意儿走了好多弯路,以为依赖太多的包河模块,搞了很久. 后来发现其实安装可以简化的,yum没有mogilefs,可以通过epel来安装. 第一种安装方法,用epel # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm # yum…

英特尔成立物联网视频事业部,这届IESS还揭露了哪些信息?

随着5G技术的深入发展与落地&#xff0c;物联网已然成为当下炙手可热的技术话题。当万物相互连接&#xff0c;一个潜力丝毫不亚于互联网的市场就此诞生。驱动互联网的可能是网络&#xff0c;可能是算力&#xff0c;也可能是无数个开发者的开源和共享。那么驱动物联网的力量究竟…

JS数字转换成货币格式

2019独角兽企业重金招聘Python工程师标准>>> // Extend the default Number object with a formatMoney() method:// usage: someVar.formatMoney(decimalPlaces, symbol, thousandsSeparator, decimalSeparator)// defaults: (2, "$", ",", &q…

CentOS 部署 flask项目

原文地址 最近在学习 python&#xff0c;使用 flask 实现了个个人博客程序&#xff0c;完了想部署到服务器上。因为是新手&#xff0c;一路磕磕绊绊最终把它基本搞定。网上资料对新手感觉都不太友好&#xff0c;都是零零碎碎的&#xff0c;所以我整理了一下&#xff0c;一方面作…

Linux系统JDK安装和配置

以下步骤均为root登录状态下进行执行。 一、卸载JDK Linux会自带JDK&#xff0c;如果不使用自带版本的话需要卸载。 1、卸载系统自带的jdk版本 查看自带的jdk #rpm -qa | grep gcj 看到如下信息&#xff1a; libgcj-4.1.2-44.el5 java-1.4.2-gcj-compat-1.4.2.0-40jpp.1…

4000字,详解 Python 操作 MySQL 数据库!

作者 | 黄伟呢出品 | 数据分析与统计学之美本文的重点&#xff0c;就是教会大家&#xff0c;如何用Python来操作MySQL数据库。1. 通用步骤其实&#xff0c;这里有一个通用步骤&#xff0c;都是写死了的&#xff0c;大家照做就行。# 1. 导入相关库 import pymysql# 2. 链接MySQL…

php跨域共享session

、 $gb_DBHOSTname "127.0.0.1"; //主机的名称或是IP地址 02 $gb_DBname "dbname"; //数据库名称 03 $gb_DBuser "username"; //数据库用户名称 04 $gb_DBpass "pwd"; //数据库密码 05 $gb_COOKIE_DOMAIN .a.com; 06 $SESS_DBH …

centos6 防火墙iptables操作整理

使用语句 前言: iptables的启动文件位置再: /etc/init.d/iptables , srevice iptables调用的就是这里的执行文件 查看防火墙状态 service iptables status开启防火墙 service iptables start 关闭防火墙 service iptables stop永久关闭防火墙(开机不启动) chkconfig i…

分布式计算开源框架Hadoop入门实践

在SIP项目设计的过程中&#xff0c;对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计&#xff0c;在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中有所提到。但是由于统计的内容暂时还是十分简单&#xff0c;所以就采用M…

网络配置文件、命令详解

一、网络服务、配置文件二、ifconfig常用命令三、route常用命令四、ip命常用命令五、其他一、网络服务、配置文件修改网络服务配置文件不会立即生效&#xff0c;重启网络服务或主机后生效且永久有效1、配置文件1.1、网络配置文件&#xff1a;/etc/sysconfig/network[rootTESTHO…

面了一个大佬,一看就背了很多面试题

2021都说工作不好找&#xff0c;其实也是对开发人员的要求变高了。正好前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档&#xff08;1000道高频题&#xff09;&#xff0c;同时也整理一些图文解析及笔记。今天在这免费分享给大家&#xff0c;希望大…

swift的特点

swift与OC的区别&#xff1a; swift是一门强语言&#xff0c;而OC是一门弱语言。强语言比弱语言更加严谨 每写一行代码系统都会自动检测是否有错误&#xff0c;这样就减少了运行后出错的可能。swift支持开源&#xff0c;所以可以引用到其他语言开发的项目中&#xff0c;OC是闭源…

Apache模块开发helloworld无错版

环境&#xff1a;CentOS 5.4 第一步&#xff1a;安装Apache的apxs 首先来介绍下apache的一个工具apxs。apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具&#xff0c;用于编译一个或多个源程序或目标代码文件为动态共享对象&#xff0c;使之可以用由mod_so提供的LoadM…

Golang+Python 实现安全动态开机密码+服务器存储

作者 | 李秋键 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 引言&#xff1a; 如果谈到近几年来新起的语言&#xff0c;必然离不开Python语言和Go语言&#xff0c;正如python在人工智能领域的发展火热&#xff0c;Go语言在服务器并发处理也有着非常优势。 Go语言…

《中国顶尖技术团队访谈录·第二季》发布

卷首语&#xff08;InfoQ中国总编辑 崔康&#xff09;\\在提笔写这篇卷首语的时候&#xff0c;我们刚刚为InfoQ中国过完八岁生日。回溯到2007年的3月28日&#xff0c;InfoQ中文站正式上线运营&#xff0c;从此中国的IT技术人有了一个崭新的学习和成长的平台&#xff0c;InfoQ中…

record-09 ATM 过程思想 综合练习

#__author: hasee #date: 2018/1/16 # user_info.txt包含内容&#xff1a; # zhangsan1 123456 3500 # zhangsan2 123456 4000 # zhangsan3 123456 4500 # zhangsan4 123456 5000 # zhangsan5 123456 5500 # zhangsan6 123456 6000 # zhangsan7 123456 6500 # zhangsan8 12345…

在ApacheHTTPD服务器中使用DSO完全分析

Apache HTTP 服务器是一个模块化&#xff08;或说积木式&#xff09;的程序&#xff0c;管理员可以选择一些模块来增加服务器的某些功能。这些模块&#xff0c;可以在创建服务器程序时静态地编译到httpd服务器的二进制代码中&#xff0c;也可以编译成一些独立于服务器程序的Dyn…

apache 2.4.12 + tomcat 7.0.61 + jk connectors 1.2.40实现tomcat负载均衡集群

实验环境&#xff1a; CentOS 5.11 final hostname&#xff1a;T1.getg.com IP地址&#xff1a;192.168.50.138软件准备&#xff1a; CentOS Linux 5.*系统光盘中的“Development tools”工具包组 jdk-8u45-linux-x64.tar.gz pcre-8.36.tar.gz apr-util-1…

有哪些新手程序员不知道的小技巧?

提到新手程序员&#xff0c;大家想到的第一个词可能就是&#xff1a;刷题。尤其是通过LeetCode刷题&#xff0c;想必新手程序员们都经历过这一步&#xff0c;甚至不少人认为只要在LeetCode上刷的题目够多&#xff0c;就一定能够进阶为大神。但是&#xff0c;不难发现&#xff0…

cocostudio UI编辑器中UITextField输入框控件光标

http://www.cocoachina.com/bbs/read.php?tid194533

在apache中使用 memcache 来作 session 存储

session.save_handler memcache session.save_path "tcp://127.0.0.1:11211" 使用多个 memcached server 时用逗号","隔开&#xff0c;并且和 Memcache::addServer() 文档中说明的一样&#xff0c;可以带额外的参数"persistent"、"weigh…

Android WebView访问SSL证书网页(onReceivedSslError)

Android WebView访问https SSL证书网页&#xff0c;如淘宝&#xff0c;需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebViewClient() {Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {// 不要使用su…

改名 Meta,打元宇宙牌,老龄化的 Facebook 能否再换新颜

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 美东时间10月28日周四&#xff0c;在名为 Facebook Connect 的年度大会上&#xff0c;Facebook 宣布&#xff0c;Facebook 将公司名称更改为“Meta”&#xff0c;这个新名字反映了该公司在社交媒体之外…

Android NDK开发之旅31 FFmpeg音频解码

###前言 #####基于Android NDK开发之旅30--FFmpeg视频播放这篇文章&#xff0c;我们已经学会视频解码基本过程。这篇文章就对音频解码进行分析。 #####音频解码和视频解码的套路基本是一样的&#xff0c; 否则怎么会做到音视频同步播放呢&#xff1f; ###1.FFmpeg音视解码过程分…