文档章节

gearman初探(一、编译和安装)

须臾时光
 须臾时光
发布于 2014/11/08 20:45
字数 930
阅读 153
收藏 0

gearman是一个任务分发系统,将计算比较耗时的任务分发给不同的机器专门进行计算,而任务发起的初始程序不必等待这些任务完成就可以返回而继 续执行。笔者最开始做PHP邮件发送的时候,因为邮件发送耗时比较长,这时PHP脚本就会被阻塞,必须等待邮件发送完毕后,脚本才能运行结束。不但用户体 验不好,也会带来负载的问题,那么可不可以把发送邮件的任务分派给其他机器,程序把任务分派之后就立即返回呢。答案就是:gearman

我们先来编译和安装gearman
gearman官网上的文档很详细:http://gearman.org/getting-started/

其中涉及到各平台的安装方法,包括windows : http://www.phpvs.net/2010/11/30/installing-gearman-and-gearmand-on-windows-with-cygwin/ . 这里采取源代码安装的方式(yum安装有时候让人沮丧,因为repository里可能没有这个软件)

因为gearmen的工作原理,它分为Job Server和 Client & Worker APIs两部分,如下图所示(图片取自gearman官网)stack

整个程序执行的流程自上而下,上面的和下面的两个蓝色块都是你的程序代码——实现你的业务逻辑,上面的蓝色块是你的任务发起代码,比如你的邮件数据 的准备和发送请求的准备,下面的蓝色块是任务执行的代码,比如邮件发送的执行。三个黄色块的总和就是gearman,上面的黄色块是Client API,提供和各种语言沟通的统一接口,下面的黄色块是Worker API,也是提供统一的接口,只不过一个靠近请求发送,另一个靠近请求处理。两者统称为Client & Worker APIs。中间的黄色块就是gearman的服务部分了,即Gearman Job Server(gearmand)。我们首先安装Gearman Job Server.

Gearman Job Server 有三个实现版本(http://gearman.org/download/): gearmand(c)、java-gearman-service(java) 和 Gearman::Server(perl)。三种语言,三种实现版本,这里选择gearmand(c),你也可以根据你熟悉的语言进行选择。

在https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz 上将源码下载后

#cd ~/下载
#tar -xvzf gearman-1.1.12.tar.gz
#cd ./gearman-1.1.12

在./configure 之前,请确保你的系统里 gcc 和 g++ 能正常工作,如果没有安装,请yum install。如果yum无法安装g++,可以使用Gnome的系统工具—管理—添加/删除软件功能,添加C++ support for gcc。有一点要注意的是,如果没有g++,那么即使你安装了boost和boost-devel库,也会提示你找不到boost-lib.

然后确认是否安装 gperf、libevent开发包、libuuid开发包和mysql开发包。
如果没有安装,分别进行yum安装

yum install gperf
yum install libevent-devel
yum install libuuid-devel
yum install mysql-devel

然后./configure,成功后make && make install
在编译过程中,笔者还遇到一个问题,就是提示找不到mysql.h头文件,这是缺失mysql开发包导致的,执行whereis mysql 果然没有看到 include路径,解决方法就是 yum install mysql-devel,成功后再次执行whereis mysql 看到了include路径,然后编译gearmand(c)成功,安装成功。
安装成功后,启动gearmand

#gearmand -d

但在笔者的机器上提示了一个错误:

gearmand: Could not open log file “/usr/local/var/log/gearmand.log”, from “/root/下载/geard-1.1.12″, switching to stderr. (No such file or directory) 

这是/usr/local文件夹的权限导致的,gearmand(c)服务程序没有写这个文件夹的权限,将/usr/local的权限改为766 或者建立/usr/local/var/log/文件夹即可。

© 著作权归作者所有

共有 人打赏支持
须臾时光
粉丝 72
博文 35
码字总数 18605
作品 0
朝阳
iOS工程师
Linux的企业-Redis 作 mysql 的缓存服务器

一.配置环境 redhat6.5 server1:lump php模块 172.25.50.1 server2:redis 172.25.50.2 server3:mysql 172.25.50.3 二.安装 lnmp 环境 1.安装php 2.配置nginx 3.配置nginx php默认发布文件......

一百个小排
2017/10/23
0
0
wdlinux centos 7 gearman安装

一、GearMan环境安装 依赖环境:yum install -y boost-devel gperf libevent-devel libuuid-devel 如果boost版本太低,则要自己编译安装 下载地址:https://launchpad.net/gearmand/ wget ht...

刘草
2016/10/08
95
0
mac os 10.13 php7.1 gearman 安装

需要从源码编译安装 安装gearman https://github.com/gearman/gearmand/releases 下载1.18版本 根据readme里的步骤进行安装 https://github.com/gearman/gearmand #大写V gearmand -V 安装p...

云墨雪
05/13
0
0
CentOS 6 安装 gearman 和它的 php 扩展

PHP 中的 gearman 扩展(http://php.net/manual/en/gearman.requirements.php) 我的服务器使用的是 ius 的 php5.5 ,如果你使用其他源和版本,请自行替换部分包名 1. 安装 epel 和 ius 源 2....

XiongLiding
2016/03/04
140
0
PHP利用Gearman来处理并行多进程问题

PHP利用Gearman来处理并行多进程问题 by yuansir 2013 年 11 月 25 日 Linux, PHP, 开发应用 0 转载请注明: 转载自Yuansir-web菜鸟 | LAMP学习笔记 本文链接地址: PHP利用Gearman来处理并行...

蜗牛奔跑
2016/03/10
18
0

没有更多内容

加载失败,请刷新页面

加载更多

java JDK动态代理

本篇随笔是对java动态代理中的JDK代理方式的具体实现。 首先需要定义一个接口,为其定义了两个方法:   public interface UserService { public void add(); public void delete(); } 然后需...

编程SHA
24分钟前
2
0
轻松理解Dubbo分布式服务框架

Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的...

别打我会飞
32分钟前
2
0
TypeScript基础入门之JSX(一)

转发 TypeScript基础入门之JSX(一) 介绍 JSX是一种可嵌入的类似XML的语法。 它旨在转换为有效的JavaScript,尽管该转换的语义是特定于实现的。 JSX在React框架中越来越受欢迎,但此后也看到了...

durban
56分钟前
1
0
JavaScript使用原型判断对象类型

1. constructor属性 在JavaScript创建对象(二)——构造函数模式中,我们说过可以使用对象的constructor属性判断对象的类型:p1.constructor === Person,可能当时就有细心的读者会想,我们...

Bob2100
58分钟前
1
0
10-《深度拆解JVM》JVM是怎么实现invokedynamic的?(下)

一、问题引入 上回讲到,为了让所有的动物都能参加赛马,Java 7 引入了 invokedynamic 机制,允许调用任意类的“赛跑”方法。不过,我们并没有讲解 invokedynamic,而是深入地探讨了它所依赖...

飞鱼说编程
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部