用Gearman进行分布式任务处理

gearman-ruby:官方! 用于Gearman分布式作业系统的Ruby库 Gearman-ruby 这是什么? 这是用于分布式作业系统的纯Ruby库。 需要做什么? 更多测试,一些代码清除。 这到底是什么 目前,该库对Ruby应用程序具有客户端和工作程序支持。 入门 客户 一个非常简单的客户端,它提交“睡眠”作业并等待100秒以获取结果: require 'rubygems' require 'gearman' servers = [ 'localhost:4730' , 'localhost:4731' ] client = Gearman :: Client . new ( servers ) taskset = Gearman :: TaskSet . new ( client ) task = Gearman :: Task . new ( 'sleep' , 20 ) task . on_complete { | d | puts d } tas 立即下载

Gearman是一款开源的通用的分布式任务分发框架,自己本身不做任何实际的工作。它可以将一个个的任务分发给其他的物理机器或者进程,以达到工作的并行运行和LB。 有人说Gearman是分布式 计算框架其实是不太准确的,因为相较于Hadoop而言,Gearman更偏重于任务的分发而不是执行。Gearman扮演的角色更像是一系列分布式进程 的神经系统。

Gearman概述

看到Gearman的名字,最容易想到的是gear-man(齿轮男),但实际上它是Manager这个单词的一个anagram。官方 的解释是它就像manger一样光派发任务自己却不干活:)这也说明了它是一个任务派发框架,而不是一个计算框架。

It is called Gearman because it is an anagram for Manager. Gearman, like a manager, distributes the worker to be done but does not actually do any itself.

Gearman出生于2005年,当时被LiveJournal.com用来做图片resize,纯perl实现。后来Brain Aker在2008年用C重写,接下来同时各种各样语言版本的client和worker也都逐一被贡献。目前的使用也很广泛:

  • Digg: 45+servers, 400k jobs/day
  • Yahoo: 60+ servers, 6M jobs/day
  • Xing.com
  • 金山逍遥网:http://blog.s135.com/dips/
  • 我们VideoSharing的WorkerPool :)
  • 同时它也是MogileFS的核心组件。

详细的项目信息可参见其主页:http://launchpad.net/gearman

Gearman中的角色

Gearman框架中一共有三个角色:

  1. Client: 提交任务的人。创建需要被执行的job然后发送给Job Server。
  2. Worker: 真正干活的人。向Job Server注册然后从Job Server处拿活干。
  3. Job Server:传说中的manager。接收client提交的Job,分发给相应的worker。并能在worker出现异常时重新派发job。

Gearman的工作原理如下图所示(来自Gearman主页),看上去是不是很简单?

作为Job Server的gearmand是用C实现的,其最新版本可在https://launchpad.net/gearmand 找到。该项目比较健康,从2009-01-08的0.1版本发展到了目前(2010-04-19)最新的2010-04-05的0.13版本,邮件列表也保持着平均每天3-4个post的规模。伴随着gearmand一起的是相应的client和worker的lib库,同样也是C版本的。

worker和client有着各种各样的版本实现,不同的项目可以根据自身应用程序选择对应的API。这给项目的扩展带来了非常大的灵活性。

Gearman的消息

Gearman中的消息是基于TCP的变长二进制消息:

  • 请求和响应分别由Message Flag区分。这是一个4字节的结构。
  • Message Type目前共有36个,详细的定义可见http://gearman.org/index.php?id=protocol。它是一个4字节的big-endian的整形。
  • Data length定义了消息体的长度。它也是一个4字节的big-endian的整形。
  • 消息体可由0-N个argument构成,argument间以’\0’分隔。长度是Data Length。

请求的消息结构:

响应的消息结构:

Message Type中定义的消息类型,在接下来Gearman Job的介绍中,大家会有具体的认识。

Gearman中的Job

在了解Gearman的特性之前,我们有必要先搞清楚Gearman框架中的两种job。

  1. Background job

顾名思义,后台执行的Job。具体的细节我们通过一张时序图可以有清晰的认识:

由图可知,client提交完job,job server成功接收后返回JOB_CREATED响应之后,client就断开与job server之间的链接了。后续无论发生什么事情,client都是不关心的。同样,job的执行结果client端也没办法通过Gearman消息框架获得。

如果我们想不通过额外的方法,仅使用Gearman就得到job的执行结果,就要考虑non-background job了。

  1. Non-background job

这是一种相对于background job的job,它的时序图如下所示:

由图可知,client端在job执行的整个过程中,与job server端的链接都是保持着的,这也给job完成后job server返回执行结果给client提供了通路。同时,在job执行过程当中,client端还可以发起job status的查询。当然,这需要worker端的支持的。

另外,从上面的时序图中,也能够清晰的看到,job 的assign都是在worker的GRAB_JOB之后才发生的,这也印证了我们之前所说的:Job server本身并不主动下发job,job是由worker来“领取”的。

同时,我们也注意到,无论是否是哪种类型的 job,worker的工作流程都是一样的:

  1. Worker通过CAN_DO消息,注册到Job server上。
  2. 随后发起GRAB_JOB,主动要求分派任务。
  3. Job server如果没有job可分配,就返回NO_JOB。
  4. Worker收到NO_JOB后,进入空闲状态,并给Job server返回PRE_SLEEP消息,告诉Job server:”如果有工作来的话,用NOOP请求我先。”
  5. Job server收到worker的PRE_SLEEP消息后,明白了发送这条消息的worker已经进入了空闲态。
  6. 这时如果有job提交上来,Job server会给worker先发一个NOOP消息。
  7. Worker收到NOOP消息后,发送GRAB_JOB向Job server请求任务。
  8. Job server把工作派发给worker。
  9. Worker干活,完事后返回WORK_COMPLETE给Job server。

值得注意的是,第6步中,Job server会给每个发送过PRE_SLEEP消息的worker都发送NOOP 消息,哪个worker先进入到第7步,即哪个worker发送的GRAB_JOB最先被Job server收到,那么这个job就被派发到哪个worker。这一点可以在worker端实现时利用起来,以控制任务的派发策略。也就是说,我们可以通过自定义worker端的请求策略的方式来达到自定义job分派策略的目的。

了解了消息流程,我们可以详细地探讨Gearman的特性了。

Gearman的特性

通过Gearman分布式任务分发框架自然而然地便可以搭建一个分布式计算集群,从这点来说把Gearman称作是分布式计算框架也未尝不可,whatever,只要我们理解了原理,叫什么都无所谓啦。

Geraman宣称的几大卖点有:开源、多语言支持、富有弹性、高效、易于嵌入和无单点失败。开源和多语言支持毋须多言,其他几个特性需要分别说明一下。

弹性
  • 松耦合的接口和无状态的job让Gearman的扩展非常容易,只需要启动一个worker,注册到Job server集群即可。新加入的worker不会对现有系统有任何的影响。
  • 同样,你可以在任何时候解雇任何数量的worker,即使那个worker正在干活。虽然这样有点不人道。Gearman不会让正在被执行的job丢失的,这一点我们前面已经做过了说明。
高效

作为Gearman的核心,Job server的是用C实现的,由于只是做简单的任务派发,因此系统的瓶颈不会出在Job server上。Gearman的手册上也有提到

a 16 core Intel machine is able to process upwards of 50k jobs per second.

无单点失败

下图展示了Gearman cluster的组网方式:

  • 作为使用Gearman的用户来说,Gearman的可用性就是Job Server和worker的可用性。由于worker在工作时与Job server是长连接,所以一旦worker发生异常,Job server能够迅速感知并重新派发这个异常worker刚才正在执行的工作。这保证了正在执行的job不会由于worker的失败而丢失。
  • 对 于background job来说,Gearman支持持久化队列技术。即对于client提交的background job,Job server除了将其放在内存队列中进行派发之外,还会将其持久化到外部的持久化队列中。一旦Job server发生问题重启,外部持久化队列中的background job将会被恢复到内存中,参与Job server新的派发当中。这保证了已提交未执行的background job不会由于Job server发生异常而丢失。
  • 而non- background job的实时状态client都是知道的,所以对于non-background job来说,提交之后的异常都是可知的,client端可以灵活地对job的异常进行处理。
  • 我们从上图可以看到,两个Job server之间是没有连接的。也就是Job server间是不共享background job的。敏锐的你可能会提出说,通过让两个Job server指向同一个持久化队列,可以让两个Job serer互相备份。但实际上,这样是行不通的。因为Job server只有在启动时才会play back持久化队列中的background job。也就是说,Job server1如果宕机且永远不启动,Job server2一直正常运行,那么Job server1宕机前被提交到Job server1的未被执行的background job将永远都呆在持久化队列中,得不到执行。这可能是目前Gearman框架在可用性方面的一个缺陷。

小结

这次只是简单介绍了Gearman的基本原理,以后有机会会介绍一下Gearman的具体应用以及在应用时需要注意到的问题。可能的话我还想深入研究一下Gearman的高级应用,比如如何通过Gearman实现map-reduce;如何监控Gearman;如何让Gearman根据机器负载选择合适的worker;如何让background job能够返回结果等等。另外,扩展Gearman以增强其可用性也是比较大的一个话题,感兴趣的同学可以一起加入:)


TI Sitara PRU可编程实时单元:工业自动化中的硬实时协处理器解析 在嵌入式系统与工业自动化领域,实时性和确定性是核心需求。实时性指系统对外部事件做出响应的可预测时间,确定性则要求响应时间严格一致,不受其他任务干扰。其技术原理通常通过专用硬件或实时操作系统实现,例如采用独立于主CPU的协处理器来处理高精度时序任务。这种设计的技术价值在于,它能将主CPU从高实时性要求的任务中解放出来,专注于复杂业务逻辑,同时确保关键IO操作达到纳秒级延迟和极低抖动。应用场景广泛覆盖伺服电机控制、工业通信协议加速和多接口扩展等。本文聚焦的TI Sitara系列PRU(可编程实时单元),正是此类 阅读详情

相关推荐

RK3588S开发板实战:手把手教你调试IMX415摄像头(附常见问题排查)

本文提供了基于RK3588S开发板调试IMX415摄像头的完整实战指南。从硬件连接到软件配置,详细解析了设备树(DTS)设置、驱动加载验证及V4L2工具链使用,并附带了常见问题排查方法,帮助开发者快速解决摄像头调试中的典型问题,实现图像采集与性能调优。

assembly8low的博客 598

gearman入门简介

一、Gearman介绍 gearman,从名字上看叫做“齿轮工”,就是通过齿轮把不同的组件组合在一起。 通常,多语言多系统之间的集成是项目开发中一个比较头疼的问题。 一般会采用RPC风格或者是REST风格的WebService。但是总感觉比较麻烦。 gearman就应运而生了,作为一个任务分发架构, 它能够轻松的将前端的任务通过Job Server分发给后端的Worker处理。 G

北雨南萍 1349

STM32 HAL库状态机实现按键多事件检测(无阻塞高效处理)

本文详细介绍基于STM32 HAL库的状态机实现按键多事件检测方法,包括单击、双击等高效无阻塞处理。通过定时器中断和GPIO中断优化,结合状态机设计,显著提升系统响应效率和实时性,适用于嵌入式系统开发。

tech5的博客 1016

gearman使用心得

本质上,gearman可以认为是一个分布式任务队列,client是生产者,worker则是消费者。gearman并不主动分发任务,而是由worker到它那里去取任务执行,所以它采用的是类似kafka的pull消费模式。

tlxamulet的博客 587

电力电子新手必看:COT控制模式的工作原理与典型应用场景解析

本文深入解析了COT控制模式的工作原理及其在电力电子领域的典型应用。COT控制(恒定导通时间控制)通过固定导通时间机制,解决了传统滞环控制的问题,特别适用于需要快速瞬态响应和高效率的应用场景,如CPU/GPU供电和便携设备电源管理。文章详细介绍了COT控制的核心流程、技术特点及设计实践中的关键考量,帮助电力电子新手快速掌握这一技术。

weixin_30745553的博客 522

高效与灵活相结合:Verilog编写的跨时钟域循环缓冲控制器解析

循环缓冲区,也被称作循环队列、环形缓冲区,是一种数据结构,其主要特性是使用一个固定大小的缓冲区作为数据的存储空间,这个缓冲区在逻辑上被视作是首尾相接的。虽然Verilog是一种常用的硬件描述语言,被广泛应用在FPGA和ASIC设计中,但是在描述循环缓冲区时,它并没有提供一种直接且灵活的方式来指定循环缓冲区的参数,如字长、缓冲区深度、缓冲区数量等。这给硬件设计带来了一定的不便。同时,该控制器的设计也充分考虑了硬件资源的利用率,通过优化的算法和数据结构,使得在实现高性能的同时,也能够有效地节省硬件资源。

qq_38334677的博客 1221

分布式框架-Gearman

特点Gearman是一个分布式应用程序框架,支持同步、异步任务处理,负载均衡以及跨语言调用。通过Gearman,在WEB应用中可以将复杂的业务逻辑交给其它更适合的机器或进程,甚至不同的语言处理。Gearman是分布式计算的神经中枢,它具有以下特性:1.开源免费。Gearman有一个很活跃的开源社区,提供了比较丰富的资源。2.多语言支持。Gearman提供了多语言接口支持,可以...

weixin_33979203的博客 162

一文搞定 ST22 短转储 MEMORY_NO_MORE_PAGING:看懂 SAP Paging 机制,参数 rdisp/PG_SHM 与 rdisp/PG_MAXFS 怎么设才稳

SAP系统MEMORY_NO_MORE_PAGING错误通常源于Paging资源耗尽而非物理内存不足。关键排查点包括:通过ST22确认错误类型,ST02监控Paging使用情况,检查工作进程trace中的"no more free blocks"提示。解决方案建议将rdisp/PG_SHM和rdisp/PG_MAXFS设为相同值(如250000块≈2GB),使Paging完全在内存中运行。同时需优化易耗Paging的代码逻辑,如避免滥用EXTRACT命令和超大内存对象传输。典型案例如月末

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 335

Gearman介绍、调研、测试与原理分析

gearman是什么? 它是分布式的程序调用框架,可完成跨语言的相互调用,适合在后台运行工作任务。最初是2005年perl版本,2008年发布C/C++版本。目前大部分源码都是(Gearmand服务job Server)C++,各个API实现有各种语言的版本。PHP的Client API与Worker API实现为C扩展,在PHP官方网站有此扩展的中英文文档。 gearman架构中的三

大鹏 3212

AI Agent开发第82课-手把手教你把paddleocr-vl做成mcp使其在DIFY里运行

本文详解如何将国产顶尖多模态 OCR 模型 PaddleOCR-VL 封装为标准 MCP(Model Calling Protocol)服务,并通过自研的 HTTP-based MCP Client 接入 Dify 1.10,实现 AI Agent 在对话中自动识别并调用 OCR 能力。该方案已在某头部保险公司真实业务流程中落地,使用了当前最先进的“Agentic AI 原生”设计思想。

打造全国最全的AI Agent开发知识领域的博客 1626

CLASSB类移植(满足IEC 60730-1和60355-1标准)

针对软件认证需要满足IEC 60730-1和60335-1标准,ST公司专门提供的软件扩展包X-CUBE-CLASSB,它包含自测库和文档,支持多种STM32系列芯片,通过预集成测试库和标准化流程,帮助开发者快速满足国际安全标准,适用于家电、工业控制等高可靠性场景。ClassB软件包程序检测内容分为两个主要部分:启动时的自检和运行时的周期自检,MCU在上电的时候会进行复位启动,在启动完成以后会进行运行自检。

m0_61973119的博客 1402

Gearman-任务分发系统

简介 Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。 Gearman提供了一个通用的应用程序,可以工作在更加适合处理这项任务的其他计算机或其他处理器上。它允许并行处理,载入平衡处理,而且可以在不同语言间进行调用。它可以应用于各种各样的应用场合。 Gearman最初用于LiveJournal的图片resize功能,由于图片

zl 2710

4.Simulink基础建模操作——加减乘除运算

加减乘除运算

FPGA/MATLAB学习教程/源码/项目合作开发 9550

gearman c语言,Gearman分布式任务处理系统(一)基本介绍

Gearman介绍Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用WebService 的方式来处理此类集成问题,但不管采用何种风格的WebService,如 RPC 风格,或者 REST 风格,其本身都有一定的复杂性。相比之下...

weixin_32371243的博客 403

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

gearman mysql 扩展_Gearman分布式任务处理系统(二)扩展应用

对于绝大多数发展中等的web 2.0网站来说,LAMP结构已经不能满足现在的需要了,新的架构组合是GLAMMP,G=Gearman(分布式远程过程处理),M=Memcached(高性能的分布式的内存对象缓存系统)。Gearman的高级特性在一个 Web 应用程序内可能有许多地方都会用到 Gearman。可以导入大量数据、发送许多电子邮件、编码视频文件、挖据数据并构建一个中央日志设施 — 所有这些均...

weixin_29958569的博客 309

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Gearman分布式任务处理系统(二)扩展应用

对于绝大多数发展中等的web 2.0网站来说,LAMP结构已经不能满足现在的需要了,新的架构组合是GLAMMP,G=Gearman(分布式远程过程处理),M=Memcached(高性能的分布式的内存对象缓存系统)。 Gearman的高级特性 在一个 Web 应用程序内可能有许多地方都会用到 Gearman。可以导入大量数据、发送许多电子邮件、编码视频文件、挖据数据并构建一个中央日志设施 — 所

很多时候,你缺少的不是知识而是热情 7233

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Gearman分布式任务处理系统

1,http://blog.youkuaiyun.com/jiao_fuyou/article/details/16330195 Gearman介绍 Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。 通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用 WebService ...

weixin_30861459的博客 161

分布式处理系统服务器配置,Gearman分布式任务处理系统(三)分布式负载均衡架构...

PS:对于分布式网络环境或者有大量任务的应用,Gearman(Client -> Job Server -> Worker)的通信方式,为开发者搭建分布式负载均衡架构,实现高效稳定的负载均衡处理能力提供了有利的保障。。简单部署结构-单一Job Server模式Gearman不但可以做为任务分发,还可以为应用提供负载均衡。开发者既可以在一台多核心单cpu服务器上启动与核心数量相同的wor...

weixin_30675619的博客 413

Gearman分布式任务处理系统(十)后记(持续更新)

整理中。。。

很多时候,你缺少的不是知识而是热情 3411

分布式任务分发处理框架-Gearman

云计算平台管理的三大利器Nagios、Ganglia和Splunk: http://www.programmer.com.cn/11477/ 利用Gearman来实现远程监控与管理: http://timyang.net/linux/gearman-monitor/ http://gearman.org/index.php http://www.oschina.net/p/gearman/

blade2001的专栏 1575

Gearman分布式任务处理系统(一)基本介绍

Gearman介绍 Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。 通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用 WebService 的方式来处理此类集成问题,但不管采用何种风格的WebService,如 RPC 风格,或者 REST 风格,其本身都有一定的复

很多时候,你缺少的不是知识而是热情 1万+

php分布式任务处理框架,分布式任务分发框架Gearman教程和PHP实现实例

1、Gearman介绍和使用场景Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相 比,Gearman更偏向于任务分发功能。它的任务分布非常简单,简单得可以只需要用脚本即可完成。Gearman最初用于LiveJournal的图片 resize功能,由于图片resize需要消耗大量计算资源,因此需要调度到后端多台服务器执行,完成任务之后返回前端再呈现到界面。通常,多语言多系统...

weixin_42380646的博客 459

Gearman分布式任务处理系统(四)Gearman协议

Gearman协议工作于TCP之上,默认使用4730端口。它之前使用端口7003,但与AFS的端口范围冲突,4730端口是由IANA分配的。client和jobserver间,以及worker与jobserver间存在通信交互,这两种情况下的通信协议都是由请求包和响应包组成。所有发送到jobserver的包都认为是请求,所有由jobserver发送的包都认为是响应。一种简单的配置例子是这样的:

很多时候,你缺少的不是知识而是热情 4315

Gearman 安装使用

1.介绍:      分布式任务处理 , 什么事gearman : http://gearman.org/   2.工作原理: Gearman的工作原理 使用Gearman的应用通常有三部分组成:一个Client、一个Worker、一个 任务服务器。 Client的作用是提出一个 Job 任务 交给 Job Server 任务服务器。Job Server 会去寻找一个 合适的 Wor

$_摸不着头脑_ 1073

php 7 gearman,centos(php7)下gearman实现异步处理队列任务

安装gearman需要的环境wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gztar zxvf libevent-2.1.8-stable.tar.gzcd libevent-2.1.8-stable./configure --pr...

weixin_34002071的博客 273

分布式任务系统gearman及python实例

Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。Gearman是一个分发任务的程序框架,可以用在各种场合,开源、多语言支持、灵活、快速、可嵌入、可扩展、无消息大小限制、可容错,与Hadoop相比,Gearman更偏向于任务分发功能。它的任务分布非常简单,简单得可以只需要用脚本即可完成。Gea

Y2701310012的专栏 7071
上一篇: 深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法
下一篇: 用 Gearman 分发 PHP 应用程序的工作负载
大鹏的世界
博客等级 码龄19年 332粉丝 417原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值