FROM: http://www.cnblogs.com/cocowool/archive/2011/08/18/2145144.html

对于分布式网络环境或者有大量任务的应用,我们需要将任务在不同的服务器之间进行分布,这个时候正好是Gearman发挥实力的时候。虽然我们也可以使用MQ队列再加一些自己实现的调度算法来将任务进行分发,但是既然已经有了成熟的产品,为什么不使用下呢。

Gearman介绍

Gearman提供了一种通用的程序框架来将你的任务分发到不同的机器或者不同的进程当中。它提供了你进行并行工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。Gearman能够应用的领域非常广泛,从高可用的网站到数据库的复制任务。总之,Gearman就是负责分发处理的中枢系统,它的优点包括:

开源:Gearman免费并且开源而且有一个非常活跃的开源社区,如果你想来做一些贡献,请点击 。

多语言支持:Gearman支持的语言种类非常丰富。让我们能够用一种语言来编写Worker程序,但是用另外一种语言编写Client程序。

灵活:不必拘泥于固定的形式。您可以采用你希望的任何形式,例如 Map/Reduce。

快速:Gearman的协议非常简单,并且有一个用C语言实现的,经过优化的服务器,保证应用的负载在非常低的水平。

可植入:因为Gearman非常小巧、灵活。因此您可以将他置入到现有的任何系统中。

没有单点:Gearman不仅可以帮助扩展系统,同样可以避免系统的失败。

Gearman的工作原理

使用Gearman的应用通常有三部分组成:一个Client、一个Worker、一个 任务服务器。 Client的作用是提出一个 Job 任务 交给 Job Server 任务服务器。Job Server 会去寻找一个 合适的 Worker 来完成这项任务。Worker 执行由 Client 发送过来的 Job,并且将结果通过 Job Server 返回给 Client。Gearman 提供了 Client 和 Worker 的 API,利用这些API 应用可以同 Gearman Job Server来进行通信。Gearman 内部 Client 和 Worker 之间的通信都是通过 TCP 连接来进行的。工作的流程如下图所示:

Gearman的用处

Gearman首先提供了一个多语言通讯的接口,当然还有比这个更简单有效的办法。Gearman可以将工作的负载分担到不同的机器中,如下图所示:

Job Server 可以开启多个实例,这样在其中一个发生故障的时候,可以 Failover 到其他的机器上。同时 Worker 也可以是多个实例进行运行,因为当前的服务器很多都是多核的。

Gearman要依赖于 Boost C++ Libraries 中的 program_options 库,并且需要的版本大于 1.39。笔者的CentOS 5.2 系统中自带的 1.33 不能满足需求,在自己安装的过程中会遇到一些问题,建议参考 Boost 官方手册中的 Easy Build and Install 这部分。

安装Gearman之后,第一次启用可能会遇到 error while loading shared libraries: libgearman.so.1 这个问题。可以用下面的方法解决:

当运行 /usr/local/sbin/gearmand -d 时出现 error while loading shared libraries: libgearman.so.1

运行一下 /sbin/ldconfig -v ,然后再去运行gearman就可以了

ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录 下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc /ld.so.cache,此文件保存已排好序的动态链接库名字列表.

ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.

需要小心的一件事情是数据的共享。Gearman 不进行所交换数据的任何转换或操作。对于这里使用的简单字符串和整数没有问题,但是不能共享 PHP 中的数组值并期望能在 Java 语言中被理解。对于这种类型的交互,可以使用很多结构化数据标准中的一种,比如 JavaScript Object Notation (JSON) 或 XML。另外,如果您在处理来自数据库的信息,只要共享 ID 或者找到需要处理的数据时要用到的信息即可,或者使用 memcached 这样的透明方法(尽管可能仍然需要 JSON 或等价物)。

参考资料:

1、用 Gearman 分发 PHP 应用程序的工作负载

2、Gearman

3、error while loading shared libraries: libgearman.so.1

4、跨多种环境部署Gearman

Gearman的使用相关推荐

  1. CentOS的Gearman安装与使用无错版

    通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用WebService的方式来处理此类集成问题,但不管采用何种风格的WebService,如RPC风格,或者REST风格,其本身都有一定的 ...

  2. 使用Gearman做分布式计算

    通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用WebService的方式来处理此类集成问题,但不管采用何种风格的WebService,如RPC风格,或者REST风格,其本身都有一定的 ...

  3. gearman中任务的优先级和返回状态

    gearman中任务的优先级和返回状态 一.任务的优先级 同步阻塞调用,等待返回结果 doLow:最低优先 doNomal:正常优先级 doHigh:最优先执行 异步派发任务,不等待返回结果,返回任务 ...

  4. Redis集群——利用Gearman在Lnmp架构中做MySQL的缓存服务器

    一.概述 Redis的集群主要是使用切片技术来搭建的,简单来说就是把所有KEY分散存放到不同的redis节点上(不要把鸡蛋都放在一个篮子里). 1. 集群基本原理 Redis集群中内置了16384个槽 ...

  5. PHP利用Gearman来处理并行多进程问题

    2019独角兽企业重金招聘Python工程师标准>>> PHP利用Gearman来处理并行多进程问题 by yuansir 2013 年 11 月 25 日 Linux, PHP, ...

  6. 分布式任务分发框架Gearman测试、性能监控、队列持久化【python 实例】

    Gearman提供了一种通用的程序框架来将你的任务分发到不同的机器或者不同的进程当中.它提供了你进行并行工作的能力.负载均衡处理的能力,以及在不同程序语言之间沟通的能力.Gearman能够应用的领域非 ...

  7. gearman mysql udf

    gearman安装 apt-get install gearman gearman-server libgearman-dev 配置bindip /etc/defalut/gearman-job-se ...

  8. 利用gearman实现redis缓存mysql

    环境: centos6.5 mysql5.6 gearman简介: Gearman是一个支持分布式的任务分发框架.设计简洁,获得了非常广泛的支持.一个典型的Gearman应用包括以下这些部分: Gea ...

  9. gearman的持久化,以mysql的方式

    1.为什么要持久化? gearman的job server中的工作队列存储在内存中,一旦服务器有未处理的任务时重启或者宕机,那么这些任务就会丢失. 持久化存储队列可以允许添加后台任务,并将其存储在外部 ...

  10. [转]Gearman分布式远程过程处理框架

    对于绝大多数发展中等的web 2.0网站来说,LAMP结构已经不能满足现在的需要了,新的架构组合是GLAMMP,G=Gearman(分布式远程过程处理),M=Memcached(高性能的分布式的内存对 ...

最新文章

  1. python代码教程-【Python】Python3纯代码极简教程
  2. Latex算法伪代码使用总结
  3. Linux下面 多线程死锁问题的调试
  4. StackExchange.Redis性能调优
  5. Mysql 基础命令
  6. 窗口最小化消息的解决之道
  7. linux 渲染程序图层管理,Linux驱动多图层开发--lcdc/framebuffer的注册(RK平台)
  8. java 获取季度第一天_Java获取当天、本周、本月、本季度、本年等 开始及结束时间...
  9. ROW_NUMBER() OVER()函数用法详解
  10. ubuntu 设置定时任务
  11. .NET Mail : 注意Win 7 不再包含SMTP服务
  12. 申请 GoDaddy SSL 证书
  13. 世界各国电压频率和电源插头规格对照表
  14. 兔子会死怎么办? 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,假如兔子会死
  15. python 携程_请教两个关于使用 python 爬去哪儿,携程等机票网站的问题
  16. python写出雷霆战机_利用Python自制雷霆战机小游戏,娱乐编程,快乐学习!
  17. android 双缓冲地图,卡马克卷轴算法的研究地图双缓冲.doc
  18. 【机器人学】机器人开源项目KDL源码学习:(4)机械臂逆动力学的牛顿欧拉算法
  19. java 超市收银_java-超市收银系统
  20. 打脸谢尔顿的电池,了解一下

热门文章

  1. 《玩转git三剑客》笔记
  2. log4j的配置参数
  3. flannel源码分析--WatchLeases
  4. leetcode算法题--寻找两个有序数组的中位数★★
  5. C语言编译、链接过程探究
  6. jdbc mysql参数_Mysql JDBC URL中的重要参数有啊些
  7. 以太网实习_一位工科男在拿到华为实习生offer后的面经干货
  8. 小程序接收json_微信推出QQ小程序,但只能接收消息无法回复!网友:鸡肋
  9. 代码提示_PHPStorm 支持 Laravel Facades 的代码提示
  10. kafka之Producer同步与异步消息发送及事务幂等性案例应用实战