- 浏览: 1877782 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wangyudong:
Wisdom RESTClient工具地址更新了哦https: ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
wangyudong:
很多REST Client是不支持自动化测试RESTful A ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
higkoo:
一个非常棒的系统,要是能支持LDAP等开源认证就完美了。
Cynthia 是个问题管理/BUG管理/任务管理/项目管理系统。 -
寻光之旅:
标签库使用有啥好处呢?
thinkphp 使用标签库的步骤 -
lgdjy123:
Android:TextView属性大全
尽管一个 Web 应用程序的大部分内容都与表示有关,但它的价值与竞争优势却可能体现在若干专有服务或算法方面。如果这类处理过于复杂或拖沓,最好是进行异步执行,以免 Web 服务器对传入的请求没有响应。实际上,将一个计算密集型的或专门化的功能放在一个或多个独立的专用服务器上运行,效果会更好。
PHP 的 Gearman 库能把工作分发给一组机器。Gearman 会对作业进行排队并少量分派作业,而将那些复杂的任务分发给为此任务预留的机器。这个库对 Perl、Ruby、C
、Python 及 PHP 开发人员均可用,并且还可以运行于任何类似 UNIX® 的平台上,包括 Mac OS X、 Linux® 和 Sun Solaris。
向一个 PHP 应用程序添加 Gearman 非常简单。假设您将 PHP 应用程序托管在一个典型的 LAMP 配置上,那么 Gearman 将需要一个额外的守护程序以及一个 PHP 扩展。截止到 2009 年 11 月,Gearman 守护程序的最新版本是 0.10,并且有两个 PHP 扩展可以用 — 一个用 PHP 包裹了 Gearman C
库,另一个用纯 PHP 编写。我们要用的是前者。它的最新版本是 0.6.0,可以从 PECL 或 Github(参见参考资料)获取它的源代码。
请注意:对于本文而言,producer 指的是生成工作请求的机器;consumer 是执行工作的机器;而 agent 则是连接 producer 与适当 consumer 的中介。
向一个机器添加 Gearman 需要两步:第一步构建并启动这个守护程序,第二步构建与 PHP 版本相匹配的 PHP 扩展。这个守护程序包包括构建此扩展所需的所有库。
首先,下载 Gearman 守护程序 gearmand
的最新源代码,解压缩这个 tarball,构建并安装此代码(安装需要有超级用户的权限,即根用户权限)。
$ wget http://launchpad.net/gearmand/trunk/\ 0.10/+download/gearmand-0.10.tar.gz $ tar xvzf gearmand-0.10.tar.gz $ cd gearmand-0.10 $ ./configure $ make $ sudo make install |
安装 gearmand
后,构建 PHP 扩展。您可以从 PECL 获取这个 tarball,也可以从 Github 复制该存储库。
$ wget http://pecl.php.net/get/gearman-0.6.0.tgz $ cd pecl-gearman # # or # $ git clone git://github.com/php/pecl-gearman.git $ cd pecl-gearman |
有了这些代码后,就可以开始构建扩展了:
$ phpize $ ./configure $ make $ sudo make install |
这个 Gearman 守护程序通常被安装在 /usr/sbin。可以从命令行直接启动此守护程序,也可以将这个守护程序添加到启动配置中,以便在机器每次重启时就可以启动这个守护程序。
接下来,需要安装 Gearman 扩展。打开 php.ini 文件(可以通过 php --ini
命令快速找到这个文件),然后添加代码行 extension = gearman.so
:
$ php --ini Loaded Configuration File: /etc/php/php.ini $ vi /etc/php/php.ini ... extension = gearman.so |
保存此文件。要想验证扩展是否启用,请运行 php --info
,然后查找 Gearman:
$ php --info | grep "gearman support" gearman gearman support => enabled libgearman version => 0.10 |
此外,还可以用一个 PHP 代码片段来验证构建和安装是否得当。将这个小应用程序保存到 verify_gearman.php:
<?php print gearman_version() . "\n"; ?> |
接下来,从命令行运行此程序:
$ php verify_gearman.php 0.10 |
如果这个版本号与之前构建和安装的 Gearman 库的版本号相匹配,那么系统就已准备好了。
我们前面提到过,一个 Gearman 配置有三个角色:
- 一个或多个 producer 生成工作请求。每个工作请求命名它所想要的函数,例如
email_all
或analyze
。 - 一个或多个 consumer 完成请求。每个 consumer 命名它所提供的一个或多个函数并向 agent 注册这些功能。一个 consumer 也可以被称为是一个 worker。
- 代理对与之建立连接的那些 consumer 提供的所有服务进行集中编制。它将 producer 与恰当的 consumer 联系起来。
借助如下的命令行,可以立即体验 Gearman:
- 启动这个 agent,即 Gearman 守护程序:
$ sudo /usr/sbin/gearmand --daemon
- 用命令行实用工具
gearman
运行一个 worker。这个 worker 需要一个名字并能运行任何命令行实用工具。例如,可以创建一个 worker 来列出某个目录的内容。-f
参数命名了该 worker 所提供的函数:$ gearman -w -f ls -- ls -lh
- 最后的一个代码块是一个 producer,或用来生成查找请求的一个作业。也可以用
gearman
生成一个请求。同样,用-f
选项来指定想要从中获得帮助的那个服务:$ gearman -f ls < /dev/null drwxr-xr-x@ 43 supergiantrobot staff 1.4K Nov 15 15:07 gearman-0.6.0 -rw-r--r--@ 1 supergiantrobot staff 29K Oct 1 04:44 gearman-0.6.0.tgz -rw-r--r--@ 1 supergiantrobot staff 5.8K Nov 15 15:32 gearman.html drwxr-xr-x@ 32 supergiantrobot staff 1.1K Nov 15 14:04 gearmand-0.10 -rw-r--r--@ 1 supergiantrobot staff 5.3K Jan 1 1970 package.xml drwxr-xr-x 47 supergiantrobot staff 1.6K Nov 15 14:45 pecl-gearman
从 PHP 使用 Gearman 类似于之前的示例,惟一的区别在于这里是在 PHP 内创建 producer 和 consumer。每个 consumer 的工作均封装在一个或多个 PHP 函数内。
清单 1 给出了用 PHP 编写的一个 Gearman worker。将这些代码保存在一个名为 worker.php 的文件中。
清单 1. Worker.php
<?php $worker= new GearmanWorker(); $worker->addServer(); $worker->addFunction("title", "title_function"); while ($worker->work()); function title_function($job) { return ucwords(strtolower($job->workload())); } ?> |
清单 2 给出了用 PHP 编写的一个 producer,或 client。将此代码保存在一个名为 client.php 的文件内。
清单 2. Client.php
<?php $client= new GearmanClient(); $client->addServer(); print $client->do("title", "AlL THE World's a sTagE"); print "\n"; ?> |
现在,可以用如下的命令行连接客户机与 worker 了:
$ php worker.php & $ php client.php All The World's A Stage $ jobs [3]+ Running php worker.php & |
这个 worker 应用程序继续运行,准备好服务另一个客户机。
在一个 Web 应用程序内可能有许多地方都会用到 Gearman。可以导入大量数据、发送许多电子邮件、编码视频文件、挖据数据并构建一个中央日志设施 — 所有这些均不会影响站点的体验和响应性。可以并行地处理数据。而且,由于 Gearman 协议是独立于语言和平台的,所以您可以在解决方案中混合编程语言。比如,可以用 PHP 编写一个 producer,用 C
、Ruby 或其他任何支持 Gearman 库的语言编写 worker。
一个连接客户机和 worker 的 Gearman 网络实际上可以使用任何您能想象得到的结构。很多配置能够运行多个代理并将 worker 分配到许多机器上。负载均衡是隐式的:每个可操作的可用 worker(可能是每个 worker 主机具有多个 worker)从队列中拉出作业。一个作业能够同步或异步运行并具有优先级。
Gearman 的最新版本已经将系统特性扩展到了包含持久的作业队列和用一个新协议来通过 HTTP 提交工作请求。对于前者,Gearman 工作队列保存在内存并在一个关系型数据库内存有备份。这样一来,如果 Gearman 守护程序故障,它就可以在重启后重新创建这个工作队列。另一个最新的改良通过一个 memcached 集群增加队列持久性。memcached 存储也依赖于内存,但被分散于几个机器以避免单点故障。
Gearman 是一个刚刚起步却很有实力的工作分发系统。据 Gearman 的作者 Eric Day 介绍,Yahoo! 在 60 或更多的服务器上使用 Gearman 每天处理 600 万个作业。新闻聚合器 Digg 也已构建了一个相同规模的 Gearman 网络,每天可处理 400,000 个作业。Gearman 的一个出色例子可以在 Narada 这个开源搜索引擎(参见 参考资料)中找到。
Gearman 的未来版本将收集并报告统计数据、提供高级监视和缓存作业结果等。为了跟踪这个 Gearman 项目,可以订阅它的 Google 组,或访问 Freenode 上它的 IRC 频道 #gearman
。
学习
- 利用 Gearman 站点,了解有关此库的更多信息。
-
Narada 搜索引擎 是一个开源项目,强调了最新开源技术(包括 Gearman)的使用。
-
PHP.net 是面向 PHP 开发人员的中心资源。
- 查阅 “推荐 PHP 读物列表”。
- 浏览 developerWorks 上的全部 PHP 内容。
- 查看 IBM developerWorks 的 PHP 项目资源,扩展您的 PHP 技巧。
- 收听针对软件开发人员的有趣访谈和讨论,一定要访问 developerWorks podcasts。
- 要将数据库与 PHP 结合使用?查看 Zend Core for IBM,它是一个无缝的、可以立即使用、易于安装、支持 IBM DB2 V9 的 PHP 开发和生产环境。
-
My developerWorks 涵盖了大量主题,是一个成功社区的典范。
- 随时关注 developerWorks 技术活动和网络广播。
- 查阅最近将在全球举办的面向 IBM 开放源码开发人员的研讨会、交易展览、网络广播和其他 活动 。
- 访问 developerWorks Open source 专区 获得丰富的 how-to 信息、工具和项目更新以及 最受欢迎的文章和教程,帮助您用开放源码技术进行开发,并将它们与 IBM 产品结合使用。
- 查看免费的 developerWorks 演示中心,观看并了解 IBM 及开源技术和产品功能。
获得产品和技术
- 查阅 Gearman 下载 和扩展,包括针对
C
库的 PHP 扩展。
- 使用 IBM 产品评估试用版软件 改进您的下一个开发项目,这些软件可以通过下载获得。
- 下载 IBM 产品评估试用版软件 或 IBM SOA Sandbox for Reuse,并开始使用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。
讨论
- 访问 Gearman 组。
- 参与 developerWorks blogs 并加入 developerWorks 社区。
- 参与 developerWorks PHP Forum: Developing PHP applications with IBM Information Management products (DB2, IDS)。
发表评论
-
Lumen写事件
2018-02-10 10:46 8021.在事件里面定义事件 <?php /** * ... -
PHP设计模式之状态机模式-实现业务流控制
2018-01-28 11:16 1811应用场景:在我们日常开发中经常会遇到各种状态的切换,例如电 ... -
装wampserver时显示计算机丢失MSVCR110.dll
2017-03-07 10:15 1211http://www.microsoft.com/zh-CN ... -
phpdocument的使用
2016-10-25 16:24 631官网: https://www.phpdoc.org/ ... -
微信调试方法
2016-05-24 09:25 7921. 在本地搭建类似LAMP的环境(或者WAMP)都行,目的 ... -
创建自己的composer包
2015-12-10 17:01 995创建一个composer/packagist包 在g ... -
微信nickname乱码及mysql编码格式设置(utf8mb4)
2015-12-08 12:24 1730将数据库的编码设置为utf8mb4_general_ci ... -
docker php 配置
2015-10-28 18:10 1119FROM php:5.6-fpm MAINTAINER S ... -
四种数据存储结构---顺序存储 链接存储 索引存储 散列存储
2015-08-15 21:54 1531存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 ... -
分享PHP代码检查经验
2015-08-09 23:03 1613问: 团队十多人开发, 如何保证代码规范统一? http ... -
php过滤只匹配中英文字符串
2015-08-04 15:26 1908<?php $str = "php $ ... -
移除emoji内容
2015-08-04 14:52 1247public static function removeE ... -
php 敏感词过滤高级版
2015-08-04 10:20 1494前面介绍过一个过滤了 ... -
php过滤广告内容(兼职,QQ号,淘宝兼职,网址)
2015-08-04 10:17 1180如果你网站有评论那么你肯定会发现你网站经常会被一人注入广告了 ... -
写第一个PHP扩展, 实现计算数组的个数
2015-07-20 19:09 1357需求: 写第一个PHP扩展, 里面包含一个函数叫 maxw ... -
PHP常用设计模式单例, 工厂, 观察者, 责任链, 装饰, 策略,适配,桥接模式
2015-07-15 11:08 1658// 多态, 在JAVA中是这样用的, 其实在PHP当中可 ... -
php命令行界面
2015-07-16 17:03 978常用选项 php -v php -i ... -
使用phpdocument
2015-07-14 17:05 888pear install phpdoc phpDocumen ... -
将session存储到数据库中
2015-07-14 15:33 830CREATE TABLE sessions ( id ... -
正则表达式向前查找向后查找,环绕或零宽断言
2015-07-14 12:40 2418向前查找和向后查找 1. 向前查找:根据要匹配的字符序列后 ...
相关推荐
Gearman是一个工作负载分发服务器和库,允许将工作分散到多个机器或者机器上的多个核心上进行异步处理。它在Web应用程序中处理耗时的后台任务时尤其有用,如文件上传、邮件发送、图片处理等。 2. PHP Gearman扩展...
4. **负载均衡**:Gearman 服务器可以自动进行负载均衡,将任务分发到空闲的 Workers 上。 综上所述,Laravel 结合 PHP Gearman 提供了一个强大而灵活的解决方案,用于处理异步任务和分布式计算,极大地提升了系统...
Gearman是一种分布式任务队列系统,它允许应用程序在不同的服务器之间分发工作负载,从而实现负载均衡和异步处理。本篇文章将详细讲解如何在Linux环境中搭建Gearman,包括依赖库的安装和Gearman服务的配置。 首先,...
通过这种方式,GearMAN允许系统将耗时的任务从请求线程中分离出来,以非阻塞的方式处理,从而显著提高了应用程序的响应能力和吞吐量。 GearMAN的主要特点包括多方式支持(支持PHP、Java、Python等多种编程语言)、...
在PHP的世界里,Gearman是一个强大的分布式任务处理框架,它允许开发者将任务分发到多台服务器上执行,从而实现负载均衡和异步处理。本文将深入探讨net_gearman-master.zip,这是一个专为PHP设计的Gearman客户端插件...
Gearman 是一个开源的分布式任务队列系统,它允许应用程序将耗时的任务分发到多台机器上异步处理,从而提高系统的响应速度和整体性能。`gearman-1.0.2.tgz` 是 Gearman 的一个特定版本,即 1.0.2 版本的源代码压缩包...
齿轮人(Gearman)是一个开源的分布式任务队列系统,主要设计用于在多台服务器之间分发计算任务,实现负载均衡和并行处理。在 Gearman 的架构中,客户端提交任务到 Gearman 服务器,而工作者(worker)则从服务器...
Gearman是一个分布式任务队列系统,它允许将任务分发到多个工作节点上,同时在这些工作节点间负载均衡和故障转移。这个系统常用于需要处理大量异步任务的场景中,比如发送电子邮件、推送通知、消息传递、导入大型...
通过将工作分发到多个服务器,Gearman提高了处理大量并发请求的能力。PHP的gearman扩展提供了与Gearman服务器通信的功能,使得开发者能够轻松地创建后台处理任务,提高应用程序的性能和响应速度。 2. Memcached.so...
齿轮人(Gearman)是一个开源的工作队列系统,它的主要目标是解耦应用程序的不同部分,使得分布式处理变得简单。 Gearman-0.8.0.tgz 是一个包含齿轮人0.8.0版本源代码的压缩包文件。下面将详细探讨齿轮人(Gearman)...
通信是通过 TCP 连接进行的,这使得 Gearman 能够有效地在多台机器之间分发负载。 安装 Gearman 包括两个步骤:首先,需要在服务器上安装 Gearmand 服务,可以通过 RPM 包管理器或者源码编译安装。接着,为了在 ...
这个扩展的核心目标是让PHP能够无缝地利用Gearman的并行计算能力,提升应用程序的性能和可伸缩性。 **Gearman简介** Gearman是一个开源的、跨平台的框架,用于在分布式环境中分发任务。它允许你将工作负载分散到多...
Gearman 是一个分布式任务分发调度框架,支持多语言、并发的任务执行,支持负载均衡。其主要特点包括: 1. 开源:Gearman 是一个开源的任务调度系统,这使得其可以被自由地使用和修改。 2. 支持多语言接口:Gearman...
Yii2扩展与Gearman的结合,让开发者能够轻松地在多台服务器之间分发工作,提高系统的可伸缩性和可靠性。 Yii2队列扩展提供的这些选项,让开发者可以根据项目需求和现有基础设施选择最适合的队列服务。使用这个扩展...
这个系统允许将任务分发到多个 worker 进程,以实现负载均衡和并发处理。在本文中,我们将深入探讨 Gearman 任务的两个关键特性:优先级和返回状态。 一、任务的优先级 在 Gearman 中,任务的优先级分为三个级别:...
Gearman是一个通用的工作队列系统,它允许应用程序将任务分发到网络中的其他机器上进行异步处理,从而提高系统的并行性和可扩展性。G2作为Gearman的一个现代化实现,旨在提供更高效、更稳定的解决方案。 在了解G2...
齿轮人(Gearman)是一个开源的工作队列系统,它的主要目标是解耦应用程序中的任务处理,使得异步处理和分布式工作负载成为可能。`gearmand-1.1.5.tar.gz` 是齿轮人(Gearman)1.1.5版本的源代码压缩包,它遵循了...
Gearman是一种用于分发任务的高性能网络应用,它可以将大量工作分发到多台计算机或多个进程上并行执行,非常适合用于构建分布式图片处理平台。 - **客户端(Client)**:客户端使用PHP+Gearman客户端扩展实现,负责...