Gearman分布式框架

206 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

Gearman 是一套用来把程序需求委派给机器,提供通用的程序框架来将任务分发在机器上进行运算。它同时具备并发工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。 简单调研

优点: 开源、多语言支持、易扩展、可植入

缺点: 可能会导致占用过多的cpu资源的内存资源

系统架构:

Client -> Job -> Worker

Client: 请求的发起者,可以是 C,PHP,Perl,MySQL UDF 等等。

Job:请求的调度者,用来负责协调把 Client 发出的请求转发给合适的 Worker(工作节点)。

Worker:请求的处理者,就是我们上说的工作节点,也称之为工人,可以是 C,PHP,Perl 等等

Client和Worker 并不会限制使用的编程语言,这就大大增加了系统的兼容性,可以在多语言多系统之间进行集成,同样的也更有利于分布式的拓展。

同时Gearman也提供了可以和job server(也叫gearmand)交互的woker和client的API, 这将会大大减少框架的负责度,让我们花费更多的经历在业务上,而不是各个模块之间的交互。

下面这样图就来自于官网的一场图系统结构图。

工作流程:

  1. 首先worker会先注册到Job server上。随后发起GRAB_JOB消息给job server,主动要求分派任务
  2. job server收到消息后,等待任务到来
  3. 任务到来将任务派发给worker
  4. Worker干活,把任务结束的消息发给job server并等待下一次任务。

一些缺点:

• 传递的参数必须序列化,增加处理代码

• 每启动一个Work,Job服务器会自动创建一个Pid文件,会占用文件打开的句柄数

• 多个work处理log记录时,会出现log乱序的情况