Gearman
![本页使用了标题或全文手工转换](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
此条目需要补充更多来源。 (2022年1月9日) |
![]() |
![]() | |
原作者 | 布莱德·菲兹派翠克 |
---|---|
开发者 | Brian Aker, Eric Day |
首次发布 | 2009年1月8日 |
编程语言 | C, Shell, Perl, PHP, Python, Java, MySQL, JMS, C#, .NET, Go |
操作系统 | Linux, Windows (no server) |
语言 | 英语 |
许可协议 | BSD授权条款 |
网站 | gearman.org |
Gearman [1] 是一套用来把程序需求委派给机器,提供通用的程序框架来将任务分发在机器上进行运算的系统。它同时具备并发工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。
Gearman 特点
- Open Source: 属于开放源代码,同时,建立社群提供问题的协助平台。
- Multi-language: 多国语言接口。
- Flexible: 灵活,不需要设计其他模式,可以快速将应用程序分布运作。
- Fast: 它有简单的协议,减少执行没有相关的时间。
- Embeddable: 嵌入式,快速与轻量,处理各种应用程序。
- No single point of failure: 不仅可以将系统模块化,也能容错方式进行。
- No limits on message size: 支持单一消息 4 gig 大小。
- Worried about scaling: 各平台行皆有使用经验,e.g. Tumblr, Yelp, Etsy, etc.
Gearman 运作原理
Gearman 主要分成三个部分,需求的处理过程涉及三个角色:Client -> Job -> Worker。
Client
- Client: 负责建立一个工作,发送需求 (application) 给 Job Server,而 Job Server 会去找适合的 Worker 去转发工作。
Job Server
- Job Server: 了解 Client 端的需求,并查看哪个机器可以处理这项要求,在系统里它通常会是个 Daemon。
Work
- Worker: Worker 通过 Job Server 的分派,开始执行 Client 端的工作。
Message Queue
- 执行 Message Queue [2]服务的 Job Server 可以是多台服务器组成,也就是分布式架构,在 Job Server 上执行 Worker 程序。
- 这些 Worker 程序会一直循环地等候,直到 Job Server 调用它执行工作。
- Client 端发送出需求之后,会将需要的资料及动作记录在 Job Server 上,这时 Job Server 会查看是否有空闲并符合需求的 Worker。
- 在 Worker 结束工作后,会发送通知给 Job Server ,这时 Job Server 就会视状况把结果回传给 Client。
- Client 端不需等候需求的执行结果,可以直接继续执行其他动作。
Job Server 负载方式
- 当 Client 可能同时发出多个需求给 Job Server,由 Message Queue 接手进行队列。
- 而 Job Server 开始处理多个需求,若其中一个发生问题,可以 Failover 到其他的机器。
- 同时,Worker 会将多个需求一起进行运算,再看是同步或异步模式,回传结果给 Client。
同步 (Synchronous)
- 同步(Synchronous) 是指 Client 将需求 (Application) 丢给 Gearmand。
- 由 Gearmand 分派 Job 给各 Worker 去处理。
- 并同步 Response 回传给 Gearmand 告诉 Client 现在进度。
异步 (Asynchronous)
- 异步 (Asynchronous) 是指 Client 将需求 (Application) 丢给 Gearmand。
- 由 Gearmand 分派 Job 给各 Worker 去处理。
- Worker 处理完毕后,才会将结果回传给 Gearmand 告诉 Client 现在进度。
参考资料
- ^ What is Gearman. [2014-01-20]. (原始内容存档于2020-12-07).
- ^ Message Queue. [2014-01-20]. (原始内容存档于2014-01-31).