• 利用Gearman,搭建异步分布式计算平台


    Gearman的介绍

    主页在http://gearman.org/index.php, 它的主要优点有:
    1. 实现了异步计算。可以将比较耗时的计算分配到分布式计算集群来减少站点服务器的压力和用户的等待。例如passport里的邮件发送/头像上传裁减/国内外数据分离请求等等。
    2. 跨语言,有利于多语言多系统之间的集成。PHP/Perl/Java/C++可以融合在一起,用Perl实现的邮件发送功能PHP也能自由调用,也可以使用Perl调用另一台服务器上用C++编写的程序的一个函数。
    3. 便于扩展和实现负载均衡。可以通过增加worker的数量来提供更好的性能,在其中一台出现问题的时候能够由其他的worker来完成任务。
    4. 开源
    5. 快速: 利用了c最小化的减少了系统开销。

    Gearman的安装配置

    1.安装Gearman server and library:


    wget http://launchpad.net/gearmand/tr ... gearmand-0.8.tar.gz
    tar zxf gearmand-0.8.tar.gz
    cd gearmand-0.8
    ./configure
    make
    make install


    2.安装Gearman PHP extension:

    wget http://pecl.php.net/get/gearman-0.4.0.tgz
    tar zxf gearman-0.4.0.tgz
    cd gearman-0.4.0
    phpize
    ./configure
    make
    make install


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

    extension = "gearman.so"

    4.启动Job:

    gearmand -d

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

    gearmand -d -u root

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

    以调试的方式启动:

    gearmand -vv

    5.编写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 worker.php &

    6.编写Client:

    client.php文件内容如下:

    <?php
    $client= new GearmanClient();
    $client->addServer('127.0.0.1', 4730);
    echo $client->do('reverse', 'Hello World!'), "/n";
    ?>


    运行client:

    php client.php

    输出:!dlroW olleH

     
    可能遇到的问题
     
    解决办法:在新立得里搜索并安装uuid-dev。

     
    libgearman.so一般是在 /usr/local/lib下,看看/etc/ld.so.conf是否包含这个目录,执行/sbin/ldconfig -v刷新一下。

     
     
     是否在cli的php.ini下加入“extension="gearman.so"”这一行配置。
    Gearman与Perl

    安装Gearman模块,使用Gearman::Worker和Gearman::Client模块即可。
    具体编码方式可参考cpan。
    需要注意的是$client->do_task()方法返回的是一个reference。
    下面是例子。
    worker.pl
    client.pl
    Gearman异步模式的实现
    在Perl的Gearman::Client模块里已经实现了异步的方法,采用dispatch_background时client请求不会等待worker的响应就立即返回了。
  • 相关阅读:
    pythonic奇淫技巧收集
    广联达软件关闭非必要后台进程、服务
    寒假集训Day6 H(二分答案)
    GJSxCXzcjw
    生活新的篇章~
    Apex: SOQL语句未查询到数据时的返回值
    VS Code关联Salesforce失效
    一个sql和C#代码结合的分组求和的查询
    2022开发上的一些常见技术问题整理
    2021迷惘惆怅的一年
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2458350.html
Copyright © 2020-2023  润新知