Gearman介绍、调研、测试与原理分析

Gearman分布式工作模式实战指南 本文还有配套的精品资源,点击获取 简介:Gearman是一个开源的分布式任务队列系统,它通过分发工作到多台机器上来提高计算资源的利用率,并支持负载均衡与高可用性。在Java中,利用Gearman库可构建分布式工作流程,实现异步处理和并行执行任务。文章介绍了Gearman的基本概念、工作流程以及如何在Java中通过Gearman客户端和工作者库实现分布式任务处理。 ... 阅读详情

Gearman分布式任务处理系统

gearman是什么?

它是分布式的程序调用框架,可完成跨语言的相互调用,适合在后台运行工作任务。最初是2005年perl版本,2008年发布C/C++版本。目前大部分源码都是(Gearmand服务job Server)C++,各个API实现有各种语言的版本。PHP的Client API与Worker API实现为C扩展,在PHP官方网站有此扩展的中英文文档。

gearman架构中的三个角色

client:请求的发起者,工作任务的需求方(可以是C、PHP、Java、Perl、Mysql udf等等)
Job Server:请求的调度者,负责将client的请求转发给相应的worker(gearmand服务进程创建)
worker:请求的处理者(可以是C、PHP、Java、Perl等等)

gearman是如何工作的?


从上图可以看出,Gearman Client API,Gearman Worker API,Gearman Job Server都是由gearman本身提供,我们在应用中只需要调用即可。目前client与worker api都很丰富。

gearman的吞吐能力

经过的测试,结果如下:

系统环境:ubuntu-14.0.4 1个CPU 4核 2G内存 (虚拟机)

默认启动:./gearmand -d

client.php

1 <?php
2 echo "starting...", microtime(true), "\n";
3 $gmc = new GearmanClient();
4 $gmc->setCompleteCallBack(function($task){
5 //echo $task->data(), "\n";
6 });
7 $gmc->addServer("127.0.0.1", 4730);
8 for ($i = 0; $i < 100000; $i++) {
9      $gmc->addTaskBackground("reserve", "just test it", null, $i);
10 }
11 $gmc->runTasks();
12 echo "end...", microtime(true), "\n";

worker.php

1 <?php
2 $gmw = new GearmanWorker();
3 $gmw->addServer("127.0.0.1", 4730);
4 $gmw->addFunction("reserve", function($job) {
5      if ($job->unique() == 99999) {
6           echo microtime(true), "\n";
7      }
8      return strrev($job->workload());
9 });
10 while($gmw->work());

启动一个job server实例:job server IP:127.0.0.1 PORT:4730

启动一个worker: php worker.php

worker注册reserve函数,将client的job字符串反转后返回。

client工作任务的消息为:just test it(12字节)

同步:4100/s异步:25700/s

memcached内存准持久化的吞吐能力测试./gearmand -d -q libmemcached --libmemcached-servers=127.0.0.1:11211

client投递100000个工作任务:16400/s

gearman典型的部署结构

从上图可以看出,gearman支持的特性:

1.高可用

启动两个job server,他们是独立的服务进程,有各自的内存队列。当一个job server进程出现故障,另一个job server可以正常调度。(worker api与client api可以完成job server故障的切换)。在任何时候我们可以关闭某个worker,即使那个worker正在处理工作任务(Gearman不会让正在被执行的job丢失的,由于worker在工作时与Job server是长连接,所以一旦worker发生异常,Job server能够迅速感知并重新派发这个异常worker刚才正在执行的工作)

2.负载均衡(附gearman协议会详细解释)

job server并不主动分派工作任务,而是由worker从空闲状态唤醒之后到job server主动抓取工作任务。

3.可扩展

松耦合的接口和无状态的job,只需要启动一个worker,注册到Job server集群即可。新加入的worker不会对现有系统有任何的影响。

4.分布式

gearman是分布式的任务分发框架,worker与job server,client与job server通信基于tcp的socket连接。

5.队列机制

gearman内置内存队列,默认情况队列最大容量为300W,可以配置最大支持2^32-1,即4 294 967 295。

6.高性能

作为Gearman的核心,Job server的是用C/C++实现的,由于只是做简单的任务派发,因此系统的瓶颈不会出在Job server上。

两种工作任务

后台工作任务Background job——时序图

由图可知,client提交完job,job server成功接收后返回JOB_CREATED响应之后,client就断开与job server之间的链接了。后续无论发生什么事情,client都是不关心的。同样,job的执行结果client端也没办法通过Gearman消息框架 获得。

一般工作任务Non-background job——时序图

由图可知,client端在job执行的整个过程中,与job server端的链接都是保持着的,这也给job完成后job server返回执行结果给client提供了通路。同时,在job执行过程当中,client端还可以发起job status的查询。当然,这需要worker端的支持的。

关于持久化

对于队列持久化的问题,是一个值得考虑的问题。持久化必然影响高性能。gearman支持后台工作任务的持久化,支持drizzle、mysql、memcached的持久化。对于client提交的background job,Job server除了将其放在内存队列中进行派发之外,还会将其持久化到外部的持久化队列中。一旦Job server发生问题重启,外部持久化队列中的background job将会被恢复到内存中,参与Job server新的派发当中。这保证了已提交未执行的background job不会由于Job server发生异常而丢失。并且我测试发现如果开启了持久化,那么后台工作任务会先将工作任务写到持久化介质,然后在入内存队列,再执行。非后台工作任务,由于client与job server是保持长连接的状态,如果工作任务执行异常,client可以灵活处理,所以无须持久化。

gearman框架中的一个问题

从典型部署结构看出,两个Job server之间是没有连接的。也就是Job server间是不共享background job的。如果通过让两个Job server指向同一个持久化队列,可以让两个Job serer互相备份。但实际上,这样是行不通的。因为Job server只有在启动时才会将持久化队列中的background job转入到内存队列。也就是说,Job server1如果宕机且永远不启动,Job server2一直正常运行,那么Job server1宕机前被提交到Job server1的未被执行的background job将永远都呆在持久化队列中,得不到执行。另外如果多个job server实例指向同一个持久化队列,同时重启多个job server实例会导致持久队列中的工作任务被多次载入,从而导致消息重复处理。

我建议的部署结构

采用memcached做后台工作任务的准持久化队列,最好memcached和job server在内网的不同机器。两个机器的两个服务同时挂掉的可能性比较小,同时也保证了高性能。而且memcached应该为两个相互独立实例,防止其上述的gearman框架中的问题。我们可以做一个监控脚本,如果某个job server异常退出,可以重启,也最大化的保证了job server的高可用。


Unix进程控制-Supervisor

  • 关于Worker守护进程的启动和监控

    上面例子中直接启动worker脚本作为守护进程,无法监控到worker进程是否存活.
    使用Unix进程监控supervisord则可轻松解决这个问题.
    将如下配置添加到supervisord的配置中,即可实现由supervisord来启动和监控myworker.

    [program:myworker]
    command=/usr/local/php5415/bin/php myworker.php
    process_name=%(program_name)s_%(process_num)02d
    ;修改numprocs即可同时开启多个worker进程
    numprocs=1 
    directory=/data/www/gearman/worker
    autostart=true
    autorestart=true
    user=gearmand
    stopsignal=KILL



关于gearman的管理工具

目前有一个现在的管理工具,https://github.com/brianlmoon/GearmanManager,但是只支持php-5.2,不过可以自行修改支持php-5.4,我建议如果使用PHP作为worker进程,使用php-5.4以上的版本。该工具的设计方法可以借鉴,可以比较好的管理gearman worker。时间有限,还没有深入研究。

应用场景

1.结合linux crontab,php脚本负责产生job,将任务分发到多台服务器周期性的并发执行。可以取代目前我们比较多的crontab的工作任务。

2.邮件短信发送

3.异步log

4.跨语言相互调用(对于密集型计算的需求,可以用C实现,PHP直接调用)

5.其他耗时脚本

gearman安装(unbuntu)

1.下载

#wget https://launchpadlibrarian.net/165674261/gearmand-1.1.12.tar.gz

2.安装依赖包

#sudo apt-get install libboost1.55-all-dev gperf libevent libevent-dev uuid libmemcached-dev

#tar zxvf gearmand-1.1.12.tar.gz

#cd gearmand-1.1.12.tar.gz

#./configure --prefix=/home/phpboy/Server/gearman

#make & make install

3.启动

a)默认启动

./gearman -d

b)支持memcached准持久化

./gearmand -d -q libmemcached --libmemcached-servers=127.0.0.1:11211

4.安装php的gearman扩展

#wget http://pecl.php.net/get/gearman-1.1.2.tgz

#tar zxvf gearman-1.1.2.tgz#cd gearman-1.1.2

#phpize

#./configure --with-php-config=php-config

#make & make install

5.php client api与php worker api的测试,可以用上面我的测试的示例

附gearmand(job server的启动参数简单说明)

-b, –backlog=BACKLOG 连接请求队列的最大值

-d, –daemon Daemon 守护进程化

-f, –file-descriptors=FDS 可打开的文件描述符数量

-h, –help

-l, –log-file=FILE Log 日志文件

-L, –listen=ADDRESS 开启监听的地址

-p, –port=PORT 开启监听的端口

-P, –pid-file=FILE File pid file

-r,–protocol=PROTOCOL 使用的协议

-q, –queue-type=QUEUE 持久化队列类型

-t, –threads=THREADS I/O线程数量

-u, –user=USER 进程的有效用户名

libdrizzle Options:

--libdrizzle-host=HOST Host of server.

--libdrizzle-port=PORT Port of server.

--libdrizzle-uds=UDS Unix domain socket for server.

--libdrizzle-user=USER User name for authentication.

--libdrizzle-password=PASSWORD Password for authentication.

--libdrizzle-db=DB Database to use.

--libdrizzle-table=TABLE Table to use.

--libdrizzle-mysql Use MySQL protocol.

libmemcached Options:

--libmemcached-servers=SERVER_LIST List of Memcached servers to use.

libsqlite3 Options:

--libsqlite3-db=DB Database file to use.

--libsqlite3-table=TABLE Table to use.

libpq Options:

--libpq-conninfo=STRING PostgreSQL connection information string.

--libpq-table=TABLE Table to use.

http Options:

--http-port=PORT Port to listen on.

附gearman通信协议,个人翻译与理解:

总括

Gearman工作在TCP上,默认端口为4730,client与job server、worker与job server的通信都基于此tcp的socket连接。client是工作任务的发起者,worker是可以注册处理函数的工作任务执行者,job server为工作的调度者。协议包含请求报文与响应报文两个部分,所有发向job server的数据包(TCP报文段的数据部分)认为是请求报文,所有从job server发出的数据包(TCP报文段的数据部分)认为是响应报文。worker或者client与job server间的通信是基于二进制数据流的,但在管理client也有基于行文本协议的通信。

请求的报文体

响应的报文体

后台工作任务Background job——时序图

一般工作任务Non-background job——时序图

二进制包

请求报文与响应报文是由二进制包封装。一个二进制包由头header和可选的数据部分data组成。

header的组成

a.报文类别,请求报文或者响应报文,4个字节
"\0REQ" 请求报文
"\0RES" 响应报文

b.包类型,高(大)字节序(网络字节序),4个字节可能的类型有

类型值 名称 报文类型 发送者

1 CAN_DO REQ Worker

2 CANT_DO REQ Worker

3 RESET_ABILITIES REQ Worker

4 PRE_SLEEP REQ Worker

5 (unused) - -

6 NOOP RES Worker

7 SUBMIT_JOB REQ Client

8 JOB_CREATED RES Client

9 GRAB_JOB REQ Worker

10 NO_JOB RES Worker

11 JOB_ASSIGN RES Worker

12 WORK_STATUS REQ Worker

13 WORK_COMPLETE REQ Worker

14 WORK_FAIL REQ Worker

15 GET_STATUS REQ Client

16 ECHO_REQ REQ Client/Worker

17 ECHO_RES RES Client/Worker

18 SUBMIT_JOB_BG REQ Client

19 ERROR RES Client/Worker

20 STATUS_RES RES Client

21 SUBMIT_JOB_HIGH REQ Client

22 SET_CLIENT_ID REQ Worker

23 CAN_DO_TIMEOUT REQ Worker

24 ALL_YOURS REQ Worker

25 WORK_EXCEPTION REQ Worker

26 OPTION_REQ REQ Client/Worker

27 OPTION_RES RES Client/Worker

28 WORK_DATA REQ Worker

29 WORK_WARNING REQ Worker

30 GRAB_JOB_UNIQ REQ Worker

31 JOB_ASSIGN_UNIQ RES Worker

32 SUBMIT_JOB_HIGH_BG REQ Client

33 SUBMIT_JOB_LOW REQ Client

34 SUBMIT_JOB_LOW_BG REQ Client

35 SUBMIT_JOB_SCHED REQ Client

36 SUBMIT_JOB_EPOCH REQ Client

c.可选数据部分长度,高(大)字节序(网络字节序),4个字节,可表示的值为4294967295

数据部分,数据部分的各个部分为null字符分隔。

具体各包类型的说明

client和worker都可以发送的请求报文:

ECHO_REQ

当job server收到此包类型的请求报文时,就简单的产生一个包类型为ECHO_RES,同时将请求报文的数据部分作为响应报文的数据部分的报文。主要用于测试或者调试

如:

Client -> Job Server

00 52 45 51 \0REQ 报文类型

00 00 00 a0 16 (Packet type: ECHO_ERQ)

00 00 00 04 4 (Packet length)

74 65 73 74 test (Workload)

client和worker都可以接收的响应报文:

ECHO_RES

当job server响应ECHO_REQ报文时发送的包类型为ECHO_RES的响应报文

如:

Job Server -> Client

00 52 45 53 \0RES 报文类型

00 00 00 a1 17 (Packet type: ECHO_ERS)

00 00 00 04 4 (Packet length)

74 65 73 74 test (Workload)

ERROR

当job server发生错误时,需要通知client或者worker

client发送的请求报文:(仅能由client发送的请求报文)
SUBMIT_JOB, SUBMIT_JOB_BG,SUBMIT_JOB_HIGH, SUBMIT_JOB_HIGH_BG,SUBMIT_JOB_LOW, SUBMIT_JOB_LOW_BG

当client有一个工作任务需要运行,就会提交相应的请求报文,job server响应包类型为JOB_CREATED数据部分为job handle的响应报文。SUBMIT_JOB为普通的工作任务,client得到状态更新及通知任务已经完成的响应;SUBMIT_JOB_BG为异步的工作任务,client不关心任务的完成情况;SUBMIT_JOB_HIGH为高优先级的工作任务,SUBMIT_JOB_HIGH_BG为高优先级的异步任务;SUBMIT_JOB_LOW为低优先级的工作任务,SUBMIT_JOB_LOW_BG为低优先级的异步任务。

如:

Client -> Job Server

00 52 45 51 \0REQ (报文类型)

00 00 00 07 7 (Packet type: SUBMIT_JOB)

00 00 00 0d 13 (Packet length)

72 65 76 65 72 73 65 00 reverse\0 (Function)

00 \0 (Unique ID)

74 65 73 74 test (Workload)

SUBMIT_JOB_SCHED

和SUBMIT_JOB_BG类似,此类型的工作任务不会立即执行,而在设置的某个时间运行。

如:

Client -> Job Server

00 52 45 51 \0REQ (报文类型)

00 00 00 23 35 (Packet type: SUBMIT_JOB_SCHED)

00 00 00 0d 13 (Packet length)

72 65 76 65 72 73 65 00 reverse\0 (Function)

00 \0 (Unique ID)

01 \0 (minute 0-59)

01 \0 (hour 0-23)

01 \0 (day of month 1-31)

01 \0 (day of month 1-12)

01 \0 (day of week 0-6)

74 65 73 74 test (Workload)

SUBMIT_JOB_EPOCH

和SUBMIT_JOB_SCHED作用一样,只是将设置的时间定为了uinx时间戳GET_STATUS获取某个工作任务执行的状态信息

OPTION_REQ

设置client与job server连接的选项

client获取的响应报文:

JOB_CREATED响应包类型为SUBMIT_JOB*的请求报文,数据部分为job handle

WORK_DATA, WORK_WARNING, WORK_STATUS, WORK_COMPLETE,WORK_FAIL, WORK_EXCEPTION

对于后台运行的工作任务,任务执行信息可以通过包类型为上面的值来查看。

STATUS_RES

响应包类型为GET_STATUS的请求报文,通常用来查看一个后台工作任务是否已经完成,以及完成的百分比。

OPTION_RES

响应包类型为OPTION_REQ的请求报文

worker发送的请求报文:

CAN_DO

通知job server可以执行给定的function name的任务,此worker将会放到一个链表,当job server收到一个function name的工作任务时,worker为被唤醒。

CAN_DO_TIMEOUT

和CAN_DO类似,只是针对给定的function_name的任务设置了一个超时时间。

CANT_DO

worker通知job server已经不能执行给定的function name的任务

RESET_ABILITIES

worker通知job server不能执行任何function name的任务

PRE_SLEEP

worker通知job server它将进入sleep阶段,而之后此worker会被包类型为NOOP的响应报文唤醒。

GRAB_JOB

worker向job server抓取工作任务,job server将会响应NO_JOB或者JOB_ASSIG

NGRAB_JOB_UNIQ

和GRAB_JOB类似,但是job server在有工作任务时将会响应JOB_ASSIGN_UNIQ

WORK_DATA

worker请求报文的数据部分更新client

WORK_WARNING

worker请求报文代表一个warning,它应该被对待为一个WARNING

WORK_STATU

Sworker更新某个job handle的工作状态,job server应该储存这些信息,以便响应之后client的GET_STATUS请求

WORK_COMPLETE

通知job server及所有连接的client,数据部分为返回给client的数据

WORK_FAIL

通知job server及所有连接的client,工作任务执行失败

WORK_EXCEPTION

通知job server及所有连接的client,工作任务执行失败并给出相应的异常

SET_CLIENT_ID

设置worker ID,从而job server的控制台及报告命令可以标识各个worker,数据部分为worker实例的标识

ALL_YOURS

暂未实现

worker获取的响应报文:

NOOP

job server唤醒sleep的worker,以便可以开始抓取工作任务

NO_JOB

job server响应GRAB_JOB的请求,通知worker没有等待执行的工作任务

JOB_ASSIGN

job server响应GRAB_JOB的请求,通知worker有需要执行的工作任务

JOB_ASSIGN_UNIQ

job server响应GRAB_JOB_UNIQ的请求,和JOB_ASSIGN一样,只是为client传递了一个唯一标识

基于上述的协议描述一个完整的例子

worker注册可以执行的工作任务

Worker -> Job Server

00 52 45 51 \0REQ (Magic)

00 00 00 01 1 (Packet type: CAN_DO)

00 00 00 07 7 (Packet length)

72 65 76 65 72 73 65 reverse (Function)

worker检测或者抓取工作任务

Worker -> Job Server

00 52 45 51 \0REQ (Magic)

00 00 00 09 9 (Packet type: GRAB_JOB)

00 00 00 00 0 (Packet length)

job server响应worker的抓取工作(没有工作任务)

00 52 45 53 \0RES (Magic)

00 00 00 0a 10 (Packet type: NO_JOB)

00 00 00 00 0 (Packet length)

worker通知job server开始sleep

00 52 45 51 \0REQ (Magic)

00 00 00 04 4 (Packet type: PRE_SLEEP)

00 00 00 00 0 (Packet length)

client提交工作任务

Client -> Job Server

00 52 45 51 \0REQ (Magic)

00 00 00 07 7 (Packet type: SUBMIT_JOB)

00 00 00 0d 13 (Packet length)

72 65 76 65 72 73 65 00 reverse\0 (Function)

00 \0 (Unique ID)

74 65 73 74 test (Workload)

job server响应client的SUBMIT_JOB请求,返回job handle

00 52 45 53 \0RES (Magic)

00 00 00 08 8 (Packet type: JOB_CREATED)

00 00 00 07 7 (Packet length)

48 3a 6c 61 70 3a 31 H:lap:1 (Job handle)

job server唤醒worker

Job Server -> Worker

00 52 45 53 \0RES (Magic)

00 00 00 06 6 (Packet type: NOOP)

00 00 00 00 0 (Packet length)

worker的抓取工作任务

Worker -> Job Server

00 52 45 51 \0REQ (Magic)

00 00 00 09 9 (Packet type: GRAB_JOB)

00 00 00 00 0 (Packet length)

job server分配工作任务给worker

Job Server -> Worker

00 52 45 53 \0RES (Magic)

00 00 00 0b 11 (Packet type: JOB_ASSIGN)

00 00 00 14 20 (Packet length)

48 3a 6c 61 70 3a 31 00 H:lap:1\0 (Job handle)

72 65 76 65 72 73 65 00 reverse\0 (Function)

74 65 73 74 test (Workload)

worker完成工作任务通知job server

00 52 45 51 \0REQ (Magic)

00 00 00 0d 13 (Packet type: WORK_COMPLETE)

00 00 00 0c 12 (Packet length)

48 3a 6c 61 70 3a 31 00 H:lap:1\0 (Job handle)

74 73 65 74 tset (Response)

job server通知client完成了工作任务

Job Server -> Client

00 52 45 53 \0RES (Magic)

00 00 00 0d 13 (Packet type: WORK_COMPLETE)

00 00 00 0c 12 (Packet length)

48 3a 6c 61 70 3a 31 00 H:lap:1\0 (Job handle)

74 73 65 74 tset (Response)

每个client与job server是全双工通信,在一个socket可以完成多个工作任务的投递,但是收到任务的执行结果的顺序可能与投递的顺序不一致。

总结worker的工作流程:

1. Worker通过CAN_DO消息,注册到Job server上。

2. 随后发起GRAB_JOB,主动要求分派任务。

3. Job server如果没有job可分配,就返回NO_JOB。

4. Worker收到NO_JOB后,进入空闲状态,并给Job server返回PRE_SLEEP消息,告诉Job server:”如果有工作来的话,用NOOP请求我先。”

5. Job server收到worker的PRE_SLEEP消息后,明白了发送这条消息的worker已经进入了空闲态。

6. 这时如果有job提交上来,Job server会给worker先发一个NOOP消息。

7. Worker收到NOOP消息后,发送GRAB_JOB向Job server请求任务。

8. Job server把工作派发给worker。

9. Worker干活,完事后返回WORK_COMPLETE给Job server。

别再瞎调参数了!用MATLAB fmincon优化傅里叶级数,为你的机器人设计“完美”激励轨迹 本文详细介绍了如何利用MATLAB的fmincon优化器设计机器人激励轨迹,通过优化傅里叶级数参数,解决传统试错法的低效问题。文章涵盖了目标函数设计、约束条件转化及优化算法选择,帮助工程师实现高精度的系统辨识和动力学参数优化。 阅读详情

相关推荐

Zynq 【SDK裸机开发之PS】——DDR的内存分配使用详解

Zynq如果跑操作系统的话,内存管理的工作都会交给系统来操作,但是如果是裸机的话,则需要自己对DDR3的内存进行管理。

shizhibuyi1234的博客 7378

gearman入门简介

一、Gearman介绍 gearman,从名字上看叫做“齿轮工”,就是通过齿轮把不同的组件组合在一起。 通常,多语言多系统之间的集成是项目开发中一个比较头疼的问题。 一般会采用RPC风格或者是REST风格的WebService。但是总感觉比较麻烦。 gearman就应运而生了,作为一个任务分发架构, 它能够轻松的将前端的任务通过Job Server分发给后端的Worker处理。 G

北雨南萍 1349

OPTI Toolbox v2.28 安装与 3 个求解器补全:SCIP、SeDuMi、MOSEK 配置详解

本文详细介绍了OPTI Toolbox v2.28在MATLAB环境下的完整安装指南,包括SCIP、SeDuMi和MOSEK三个关键求解器的配置与优化技巧。通过分步指导和实战案例,帮助用户高效搭建强大的优化工具包,提升混合整数规划、二次约束二次规划等复杂问题的求解效率。

weixin_29039773的博客 350

gearman使用心得

本质上,gearman可以认为是一个分布式任务队列,client是生产者,worker则是消费者。gearman并不主动分发任务,而是由worker到它那里去取任务执行,所以它采用的是类似kafka的pull消费模式。

tlxamulet的博客 587

AI训练加速30%!用numactl玩转多显卡绑核的隐藏技巧

本文深入探讨了如何利用Linux系统的numactl工具,通过精确的NUMA绑核策略优化多GPU AI训练性能。文章详细解析了NUMA架构对性能的影响,提供了从拓扑探查、命令实战到多卡脚本化部署的完整指南,并分享了性能验证与常见陷阱,帮助开发者实现高达30%的训练加速。

web99的专栏 448

FIFO的工作原理及其设计

FIFO( First Input First Output)简单说就是指先进先出。FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个口是存储器的输入口,另一个口是存储器的输出口。对于单片FIFO来说,主要有两种结构:触发导向结构和零导向传输结构。触发导向传输结构的FIFO是由寄存器阵列构成的,零导向传输结构的FIFO是由具有读和写地址指针的双口RAM构成。FIFO与普通RAM存储器的是没有外部读写地址线(指针),使用方便,但。

Jackiezhang1993的博客 2万+

分布式框架-Gearman

特点Gearman是一个分布式应用程序框架,支持同步、异步任务处理,负载均衡以及跨语言调用。通过Gearman,在WEB应用中可以将复杂的业务逻辑交给其它更适合的机器或进程,甚至不同的语言处理。Gearman是分布式计算的神经中枢,它具有以下特性:1.开源免费。Gearman有一个很活跃的开源社区,提供了比较丰富的资源。2.多语言支持。Gearman提供了多语言接口支持,可以...

weixin_33979203的博客 162

PointNet++改进策略目录

后续我将如何使用文章中创新点加入的PointNet++中代码实现部分进行更新。

u012901740的博客 2196

Gearman介绍、原理分析、实践改进

gearman是什么? 它是分布式的程序调用框架,可完成跨语言的相互调用,适合在后台运行工作任务。最初是2005年perl版本,2008年发布C/C++版本。目前大部分源码都是(Gearmand服务job Server)C++,各个API实现有各种语言的版本。PHP的Client API与Worker API实现为C扩展,在PHP官方网站有此扩展的中英文文档。 gearman架构中的...

dianfu2892的博客 442

基于STM32L4XX、HAL库的RTL8211FSI-CG以太网收发器(PHY)驱动程序设计

一、简介:RTL8211FSI-CG是Realtek公司生产的一款高性能、低功耗的单端口10/100M以太网收发器(PHY)。它通过RMII(Reduced Media Independent Interface)或MII接口与MAC控制器连接。

zhusl6688的博客 531

Coze智能体开发:开始使用扣子

扣子全新升级!它不仅能帮你办公、做视频、写代码,更具备自主任务执行、探索进化等能力,真正从“陪你聊”走向“帮你干活”。

王国平的博客 124

Gearman-任务分发系统

简介 Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。 Gearman提供了一个通用的应用程序,可以工作在更加适合处理这项任务的其他计算机或其他处理器上。它允许并行处理,载入平衡处理,而且可以在不同语言间进行调用。它可以应用于各种各样的应用场合。 Gearman最初用于LiveJournal的图片resize功能,由于图片

zl 2710

使用 Simulink 搭建一个地震信号反射系数反演与滤波联合仿真的系统模型

《Simulink地震信号处理仿真指南》摘要:本文详细介绍了使用Simulink进行地震信号反射系数反演与滤波联合仿真的完整流程。从创建模型、生成含噪合成地震记录(包含子波卷积与随机反射系数),到设计滤波模块(带通/小波/自适应滤波)和实现反演算法(Wiener-Hopf方程/RLS方法),最后通过可视化模块分析结果。教程涵盖理论准备、7个实施步骤、优化建议及实际应用场景,为地震勘探、地质调查等领域提供标准化的信号处理仿真方案,特别适合需要掌握地震信号反演与实时滤波技术的工程人员学习。

amy_mhd的博客 114

Gearman调研/测试/原理分析

http://www.phpboy.net/2014-05/40-gearman-instruction.html 不错!

很多时候,你缺少的不是知识而是热情 1390

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Gearman分布式任务处理系统(十)后记(持续更新)

整理中。。。

很多时候,你缺少的不是知识而是热情 3411

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

gearman_在多个环境中部署Gearman

现代计算环境的最大挑战之一是计算资源的分配和有效利用。 当前的总体计算趋势是,您可以廉价,轻松地安装功能强大的计算机来执行相对简单明了的任务,但是您可能无法获得最佳的计算机整体性能或使用率。 相反,现在许多应用程序需要执行相对较小的操作,但可能需要执行数百或数千次,而无需(或无法使用)单台机器的功能。 随着计算场规模的增加,有时需要跨所有这些计算机同时或选择性地执行操作或操作以执行管理或安...

cuxiong8996的博客 351

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Gearman框架的研究(一)

以下内容来自www.geraman.org 1.Gearman介绍 Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。Gearman是一个分发任务的程序框架,可以用在各种场合,Gearman的提供了一个通用框架,它可以让你做的工作并行,负载平衡处理,并调用函数语言之间。它可用于在各种各...

prettyzhou的专栏 227

Gearman 项目使用与配置指南

Gearman 项目使用与配置指南 1. 项目目录结构及介绍 Gearman 项目是一个用于分布式任务队列的框架,其目录结构如下: benchmark/: 包含性能测试相关的代码和脚本。 bin/: 存放了一些可执行的脚本和工具。 contrib/: 一些贡献的代码,包括补丁和插件。 docs/: 项目文档,包括API文档和使用说明。 examples/: 包含了一些使用Gearman的示例代码...

gitblog_01022的博客 512

MySQL+Redis缓存+Gearman共同构建数据库缓存

利用MySQL的UDF函数配置Redis的缓存节点进行对于数据库的缓存优化方案

b_______的博客 815

PHP实战:Gearman安装配置与高并发场景应用指南

在PHP开发中,Gearman作为一个分布式任务调度系统,能够有效解决高并发场景下的性能瓶颈问题。它通过将耗时操作异步处理,显著提升Web应用的响应速度。下面我将从实际应用角度

2509_93883384的博客 312

Gearman 性能调优

文章来自:http://blog.flier.lu/2010/04/gearman-performance-tunning/ Gearman是最早由LiveJournal内部开发并使用的一个通用并行任务调度框架,允许不同语言直接通过非常简单的方式进行互操作。前台提交工作任务(Task)和参数,由后台工作进程(Worker)完成实际工作。 例如前台提交用户需要进行渲染的图片,由Gearm...

freespace 292

Gearman的安装和使用

首发于 樊浩柏科学院 Gearman 是一个分布式任务分发系统,通过程序调用(API,跨语言)分布式地把工作委派给更适合做某项工作的机器,且这些机器可以以并发的、负载均衡的形式来共同完成某项工作。当计算密集型场景时,适合在后台使用 Gearman 异步地运行工作任务。 认识Gearman Gearman 只是一个分布式程序调用框架,其...

weixin_33874713的博客 1289

gearman c语言,Gearman分布式任务处理系统(一)基本介绍

Gearman介绍Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用WebService 的方式来处理此类集成问题,但不管采用何种风格的WebService,如 RPC 风格,或者 REST 风格,其本身都有一定的复杂性。相比之下...

weixin_32371243的博客 403

gearman入门与实践

一、Gearman的概念 Gearman提供了一种通用的应用框架,能够分发任务到不同的机器或者进程当中。 它允许进行并行工作、负载均衡,以及在不同程序语言之间进行函数调用。Gearman能够应用的领域非常广泛,从高可用的网站到数据库的备份。总之,Gearman就是负责分发处理的中枢系统。它的特点包括: 1、开源。 2、多语言。 3、灵活。 4、可嵌入。 5、...

weixin_30817749的博客 182

Gearman入门学习

Gearman协议 Gearman协议工作于TCP之上,默认使用4730端口。它之前使用端口7003,但与AFS的端口范围冲突,4730端口是由IANA分配的。client和jobserver间,以及worker与jobserver间存在通信交互,这两种情况下的通信协议都是由请求包和响应包组成。所有发送到jobserver的包都认为是请求,所有由jobserver发送的包都认为是响应。

发粪涂墙的小毛驴的博客 715

Linux中Gearman安装与使用,分布式消息队列(CentOS-6.5:gearmand-1.1.12)

1 Gearman简介 1.1 概况 Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。 1.2 组成 Gearman是一个分发任务的程序架构,由三部分组成: 1)Gearman client:提供gearman client API给应用程序...

CleverCode的博客 8517
上一篇: PHP利用Gearman来处理并行多进程问题
下一篇: thinkphp模块分组后,cli模式无法使用的调整方法
大鹏的世界
博客等级 码龄19年 332粉丝 417原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值