从08年开始,所谓的云计算开始流行起来,什么分布式计算模型、分布式消息队列、分布式存储系统各种新鲜事物。
gearman,从名字上看叫做“齿轮工”,就是通过齿轮把不同的组件组合在一起。通常,多语言多系统之间的集成是项目开发中一个比较头疼的问题。一般会采用RPC风格或者是REST风格的WebService。但是总感觉比较麻烦。gearman就应运而生了,作为一个任务分发架构,它能够轻松的将前端的任务通过Job Server分发给后端的Worker处理。
Gearman请求的处理过程涉及三个角色:Client -> Job Server -> Worker。
Job Server:请求的调度者,用来负责协调把Client发出的请求转发给合适的Worker。
Worker:请求的处理者,可以是C,PHP,Perl等等。
工作原理图:
工作流:
因为Client,Worker并不限制用一样的语言,所以有利于多语言多系统之间的集成。
集群架构:
关于gearman的分布式任务处理:
2. 前端Client(通常是web服务器)的负载降低了,但是转移到了后端Worker上。
计算不可能凭空消失,只不过从一台机器转移到了另外一台机器。
现在有N个任务(Client),M个Worker,每个任务执行时间为t。如果不是用gearman的话,需要的时间为N*t,平均等待时间为N*t/2。
如果使用了gearman的话,并且N<=M,需要的时间为t,平均等待时间为t;如果N>M的话,需要的时间为(N/M)*t or (N/M+1)*t。
test.sh
#!/bin/sh
sleep 10
echo "TEST"
开启2个Worker
./gearman -w -f test /home/wangyao/test.sh
开启3个Client:
date;./gearman -f test;date
三个结果分别为:
--------------------------------------------
Wed Mar 17 14:41:31 CST 2010
TEST
Wed Mar 17 14:41:41 CST 2010
--------------------------------------------
Wed Mar 17 14:41:32 CST 2010
TEST
Wed Mar 17 14:41:42 CST 2010
--------------------------------------------
Wed Mar 17 14:41:34 CST 2010
TEST
Wed Mar 17 14:41:51 CST 2010
--------------------------------------------
可以看出前两个Client的任务都用了10s,但是第3个任务却花了17s。主要在于当第3个任务执行的时候,没有空闲的Worker执行任务,必须等到一个Worker空闲下来,最先空闲的Worker要在14:41:41,在这个时刻执行第3个任务,现在已经过去了7s,再需要10s完成任务,因此第3个任务最终用了17s。
4. 异步方式的话,任务交给后端Worker后,前端Client就返回了,这样用户体验比较好。但是,存在任务执行失败或者是任务结果反馈的问题。
一个应用实例:
Client将log发送到专门的log服务器:
tail -f access_log | gearman -h host -f logger
gearman -w -h host -f logger > log_file
进行分布式grep,需要在每台log服务器设置一个function:
gearman -w host -f logger1 ./dgrep.sh
#!/bin/sh
read pattern
grep $pattern log_file
相应的在其他log服务器上创建logger2,logger3等。
gearman -h host -f logger1 -f logger2 -f logger3 KEYWORD
这就可以可以在所有的机器上grep KEYWORD了。
对Client而言是task,对于Worker而言是job。
后记:
参考:
http://hqlong.com/2010/01/1222.html#more-1222
http://timyang.net/linux/gearman-monitor/
http://blog.s135.com/dips/
http://oddments.org/notes/GearmanOSCONTutorial2009.pdf
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。