gearman分布式任务调度系统
方少森 @百度
一、总体介绍
gearman是一个分布式任务分发调度框架,支持多语言、并发的任务执行,支持负载均衡。gearman具有如下特点:
1、开源
2、支持多语言接口:php、perl、python、C 等;
3、灵活:不必拘泥与特定的模式,可以灵活使用分布式框架,如map/reduce;
教师节祝福语6字4、速度快,开销小
5、可嵌入,很轻
6、无单点。
在线翻译英文翻译汉字
二、gearman运行机制简介
gearman包含3个基本组件:client、worker和job rver。
client - 创建要运行的任务,并提交给job rver。
job-rver - 寻找最合适的worker,并提交任务给worker。
worker - 接收job rver的任务,执行并返回结果,结果通过job rver返回给client。
从图中可以看出,client和worker均为gearman提供的api。
三、一个简单的实例
一个基于PHP的实例,功能是用于反转字符串,
client代码:
job rver收到任务请求后,会寻找一个能够运行“rever”的worker执行该任务。
worker上的代码如下:
教导主任竞聘演讲稿
上述事例的运行时序图如下:
四、三角色的工作流程
搭档的英语 一次正常的Gearman任务执行流程如上图所示:
1. worker向Gearman Server注册自身可以执行的功能
2. worker尝试获取一个任务
3. rver通告worker暂无任务
4. worker通告rver:“我先睡会,有活干时再叫醒我”
5. client向rver发起任务请求
6. rver唤醒可以完成这项工作的worker(可能会唤醒多个woker)
7. worker向rver发起“饥饿”请求,尝试获得一个任务
8. rver选定一个worker,将该任务分配下去
9. 通告client:“我安排别人处理你的请求了,耐心等待吧”
10. worker辛苦工作一段时间后,向rver通告“干完了”
11. rver将结果反馈给用户
说明:
1. 任务分类:
∙ 按优先级分:普通(SUBMIT_JOB),高(SUBMIT_JOB_HIGH),低(SUBMIT_JOB_LOW)
∙ 按执行方式分:普通(_JOB_HIGH,_JOB_LOW),后台(_JOB_HIGH_BG,_JOB_LOW_BG)——最大区别在于,client可以跟踪前台任务的工作状态,而不能跟踪BG任务
2. 任务工作状态的通告(worker-->rver-->client):
∙ WORK_DATA:
∙ WORK_WARNING
∙ WORK_STATUS
对于长任务,worker应该每隔一段时间通告任务状态
∙ WORK_COMPLETE
∙ WORK_FAIL
∙ WORK_EXCEPTION
3. Server监控
Gearman有“Administrative Protocol”专门用于对Gearman Server的监控,主要涉及以下几方面:
status:所注册职能分类,worker总数目,处于工作状态的worker数目,可用worker数目等
worker的详细信息:所注册功能、IP
rver的缓存任务最大队列长度:可以被查询也可以被设定
五、通信协议
英孚网络课程1、二进制packet格式
所有请求和返回均为二进制数据包,包含header和可选的数据。header包含如下字段:
4 byte magic code - This is either "\0REQ" for requests or "\0RES" for respons.
4 byte type - A big-endian (network-order) integer containing
an enumerated packet type. Possible values are:
# Name Magic Type
1 CAN_DO REQ Worker
2 CANT_DO REQ Worker
3 RESET_ABILITIES REQ Worker
4 PRE_SLEEP REQ Worker
5 (unud) - -
6 NOOP RES Worker
7 SUBMIT_JOB REQ Client
8 JOB_CREATED RES Client
9 GRAB_JOB REQ Worker
10 NO_JOB RES Worker
83届奥斯卡颁奖典礼 11 JOB_ASSIGN RES Worker
12 WORK_STATUS REQ Worker
睫毛膏怎么卸
RES Client
13 WORK_COMPLETE REQ Worker
蓬蒿菜 RES Client
14 WORK_FAIL REQ Worker
RES Client
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
RES Client
26 OPTION_REQ REQ Client/Worker
27 OPTION_RES RES Client/Worker
28 WORK_DATA REQ Workersm的意思
RES Client
29 WORK_WARNING REQ Worker
RES Client
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
4 byte size - A big-endian (network-order) integer containing