Skip to content

Instantly share code, notes, and snippets.

@dong920740928
Last active August 3, 2017 11:12
Show Gist options
  • Save dong920740928/aae165ee5ae6b933cde2 to your computer and use it in GitHub Desktop.
Save dong920740928/aae165ee5ae6b933cde2 to your computer and use it in GitHub Desktop.
gearman概述

1.gearman 概述

1.1 gearman简介

Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。 它的优点包括:

  • 开源:Gearman免费并且开源而且有一个非常活跃的开源社区,因此他有广阔的发展空间 。
  • 多语言支持:Gearman支持的语言种类非常丰富。让我们能够用一种语言来编写Worker程序,但是用另外一种语言编写Client程序。
  • 灵活:不必拘泥于固定的形式。您可以采用你希望的任何形式,例如 Map/Reduce。
  • 快速:Gearman的协议非常简单,并且有一个用C语言实现的,经过优化的服务器,保证应用的负载在非常低的水平。
  • 可植入:因为Gearman非常小巧、灵活。因此您可以将他置入到现有的任何系统中。
  • 没有单点:Gearman不仅可以帮助扩展系统,同样可以避免系统的失败。
1.2 Gearman架构和工作原理

使用Gearman的应用通常有三部分组成:一个Client、一个Worker、一个任务服务器。 Client的作用是提出一个 Job 任务 交给 Job Server 任务服务器。Job Server 会去寻找一个 合适的 Worker 来完成这项任务。Worker 执行由 Client 发送过来的 Job,并且将结果通过 Job Server 返回给 Client。Gearman 提供了 Client 和 Worker 的 API,利用这些API 应用可以同 Gearman Job Server来进行通信。Gearman 内部 Client 和 Worker 之间的通信都是通过 TCP 连接来进行的。工作的流程如下图所示:

一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。 Gearman client:提供gearman client API给应用程序调用。API可以使用C,PHP,PERL,MYSQL UDF等待呢个语言,它是请求的发起者。 Gearman job server:将客户端的请求分发到各个gearman worker的调度者,相当于中央控制器,但它不处理具体业务逻辑。 Gearman worker:提供gearman worker API给应用程序调用,具体负责客户端的请求,并将处理结果返回给客户端。

因为 Client,Worker 并不限制用一样的语言,所以有利于多语言多系统之间的集成。 甚至我们通过增加更多的 Worker,可以很方便的实现应用程序的分布式负载均衡架构。

1.3 Gearman基本使用方法

Gearman首先提供了一个多语言通讯的接口,当然还有比这个更简单有效的办法。Gearman可以将工作的负载分担到不同的机器中,如下图所示:

Gearman不但可以做为任务分发,还可以做为应用方面的负载均衡。可以让worker放在不同的一堆服务器上,也可以启动放在同一个cpu的多个核上。比如,应用视频转换程序,不希望web服务器来处理视频格式转换,这时,可以在这一堆服务器上进行任务分发,在上面加载worker处理视频格式,对外的web服务器就不会被视频转换过程影响。而且扩展方便,加一台服务器到任务调度中心,注册成worker即可,这时job server会在请求到来的时候,将请求发送给空闲的worker。

Job Server 可以开启多个实例,组成HA架构,这样在其中一个发生故障的时候,client和worker会自动 Failover 到其他的机器上。

简单来讲,就是下面的流程

  • 启动 Gearman ,监听 7003
  • 启动 Worker , 注册功能到服务器上.
  • 启动 Client ,请求注册的功能,并提供输入的数据
  • Gearman 的服务发送"功能请求"到 Worker.并给 Client 输入的数据传送给 Worker.
  • Worker 接收到"功能请求"和输入的数据.并处理输入的数据内容.
  • Worker 返回处理的数据结果,服务转发这个结果给客户端.
  • Client 客户端接收到处理的结果,并显示结果给用户
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment