Gearman是 Brad Fitzpatrick 的一个作品,用perl写的任务调度程序,提供一个服务器端和多种语言的客户端接口,包括C/Perl/Python/Ruby等。
Gearman系统用来把工作委派给其他机器,分布式的调用更适合某项工作的机器,并发的做某项工作,在多个调度间做负载均衡,或用来调用其它语言的函数。
工作原理图:
从上述的实现原理而言,Gearman的的作用类似于一个RPC中间件,调用方需要传递的数据是被调用的函数名和参数,Gearman负责网络的中间传输过程并调用Work Application中的方法。与传统RPC方式不同的是,Gearman对Client Application封装了网络寻址和错误处理的过程。
Gearman可以用在各个方面,最简单的就是可以在不同语言之间架起一座桥梁。如果希望用php程序调用一个c函数,使用Gearman就可以实现了。不过用php程序调用c函数通常是使用php扩展的方式实现的。如果要php调用java、perl, gearman就很方便了。
Gearman还可以用来做负载均衡。可以讲work放在不同的服务器上,比如图形图像处理的worker。如果把图形图像处理的worker和web前端机放在一起,会对web服务器的cpu资源构成比较大的压力。通过Gearman,把图形图像处理的压力转发到专门的机器上执行,可以最大限度的保证web前端机的及时响应。