Gearman的使用

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

对于分布式网络环境或者有大量任务的应用,我们需要将任务在不同的服务器之间进行分布,这个时候正好是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首先提供了一个多语言通讯的接口,当然还有比这个更简单有效的办法。Gearman可以将工作的负载分担到不同的机器中,如下图所示:

Gearman的使用

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

Gearman的使用

Gearman的使用

Gearman的使用

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229354.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午4:53
下一篇 2026年3月16日 下午4:54


相关推荐

  • poj -2632 Crashing Robots

    poj -2632 Crashing Robots

    2022年1月14日
    38
  • MongoVUE_mongodb使用教程

    MongoVUE_mongodb使用教程 MongoVUE 是个比较好用的MongoDB客户端,需要注册,但是可以变成永久使用,一、基础操作  新增一个连接  进入的界面形如  二、进阶操作   1、查看所有数据,会有三种格式的观看方式,分别为树形,表格,bjosn,详情见1.12、查看特定的数据,使用的时候shell命令,需要一些基础的语法知识,详情见2.13、更新数据,…

    2022年8月21日
    10
  • 卷积神经网络和图像识别[通俗易懂]

    卷积神经网络和图像识别[通俗易懂]卷积神经网络与图像识别我们介绍了人工神经网络,以及它的训练和使用。我们用它来识别了手写数字,然而,这种结构的网络对于图像识别任务来说并不是很合适。本文将要介绍一种更适合图像、语音识别任务的神经网络结构——卷积神经网络(ConvolutionalNeuralNetwork,CNN)。说卷积神经网络是最重要的一种神经网络也不为过,它在最近几年大放异彩,几乎所有图像、语音识别领域的…

    2022年6月2日
    48
  • svn 服务器创建文件夹,svn服务器创建文件夹

    svn 服务器创建文件夹,svn服务器创建文件夹SVN安装配置与使用在本机上创建文件夹SetUp,右键点击SVNCheckout…弹出如下窗体在上图中URLofRepository:下的文本框输入svnserver中代码库的地址,其他默认,点击OK按钮,就开始签出源代码了说明:上图中CheckoutDepth,有四…文章double2li2011-08-12758浏览量转TortoiseSVN405错误服务器发送了意外的返…

    2022年7月19日
    24
  • Cursor 封禁国内使用 Claude 模型,别慌!送你一份保姆级Claude Code教程,送免费额度!

    Cursor 封禁国内使用 Claude 模型,别慌!送你一份保姆级Claude Code教程,送免费额度!

    2026年3月16日
    2
  • js中的三目运算符详解

    判断javascript中的三目运算符用作判断时,基本语法为:expression?sentence1:sentence2当expression的值为真时执行sentence1,否则执行sentence2,请看代码varb=1,c=1a=2;a>=2?b++:b–;b…

    2022年4月4日
    364

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号