Gearman分布式任务处理系统(六)跨多种环境部署

Gearman使用Redis 做数据持久化 2014年的时候,老大说数据持久化,当时听的一愣一愣的,不知道啥是持久化;讲了一堆Gearman使用 Redis 和MySQL的东西,表示听不懂;然后他自己在那搞;左后搞出来了,还在launchpad.net 报告了一个bug,当时确实是第一个报告那种使用情况下bug的第一人。     队列,很多流量大的网站都会使用。对于数据,是否需要考虑数据的可靠性,对于一般不重要的数据丢失也没关系;但是对于 阅读详情

现代计算环境最大的挑战之一就是工作分布和计算资源的有效利用。目前的一般趋势是,便宜且轻松地安装一台强大的机器来执行比较直观和简单的任务,但是这可能得不到最佳的总体性能和机器的最佳利用。相反,很多应用程序现在发现自己需要执行一些相当小的操作,但是可能要执行成千上万次,不需要一台强大的机器。

随着计算场(farm)的增大,有时候需要跨所有机器同时执行一个动作或操作,或者有选择地执行管理或安装任务。

有很多解决方案可用。例如,虚拟化是其中一种方式,采用此方式时,计算机会被分片,以得到最佳的性能,尽管这些方式也有其各自的问题和局限性。memcached 工具(它采用备用内存)和类似于网格的解决方案 —— IBM 云也支持计算能力的灵活分配,使计算能力可以被随处利用。

Gearman 采用与之不同的方法,它为跨一组机器分布离散的任务提供一种灵活的机制。利用此方法可以扩展及更加有效地利用系统,同时大大降低维护和支持此类系统的复杂性。这衍生了很多解决方案,包括网格环境,甚至还有 web 服务基础,但是都利用一种实用的分布方法。这使得 Gearman 在网格环境或 Web 环境中很有用 —— 在这样环境中,您想要共享和分布工作及请求。它也可用于从 web、数据库和 Amazon 环境卸载任务和处理信息,这使得它非常适合于支持 IBM WebSphere? 或 Amazon 部署。

Gearman 基础
Gearman 服务有很多要素使得它不仅仅是一种提交和共享工作的方式,但是主要的系统只由三个组件组成:gearmand 守护进程(或作业服务器);用于向 Gearman 服务提交请求的客户机;执行实际工作的工人(参见图 1)。

图 1. Gearman 服务概要

图中展示了 Gearman 作业服务器处于一堆客户机和工人节点的中心

Gearmand 服务器执行一个简单的功能,即从客户机收集工作请求并充当一个注册器(工人可以在此提交关于它们支持的工作和操作类型的信息)。在传统的网格服务中,网格节点由管理服务器指派给特定的任务和给定的工作,在 Gearman 中与此不同,是由工人请求做工作。

这一重要区别意味着,关于哪个工人做哪项工作的决定不是必需的。在分布工作时,没有配置、优先次序或者需要的其他组织。相反,系统的特点是,自运行的和自管理的,对于很多安装,这里最初要描述的基本结构都不复杂。



在动态环境中部署 Gearman

当然,具有这样一个灵活的环境对于使用它是一个理想的环境,此时具有灵活的服务器云(例如 Amazon 的 EC2)或者现有的大规模基础设施(比如 Web 服务器场,这里有未被充分利用或者能够处理小型离散任务的机器)。

在云环境中使用时,您利用 Gearman 的灵活特点来运行可用的工人。将工人添加到 Gearman 系统所需要做的就是让工人脚本在引导时间执行。

所以请考虑 图 2 中的布局。您具有一个标准的 Gearman 环境,使用标准工人组来满足客户机的需求。当环境中的负载突然增加时,您可以引导 EC2 实例,运行工人脚本来注册它们完成工作的能力,并挑选和处理信息。因此,EC2 实例是临时的,您可以根据需要注册和注销实例。

图 2. 使用标准工人组的标准 Gearman 环境


图中展示了一组通过 Gearman Job Server 访问标准工人和云节点的客户机

如果有明确表达信息时涉及到的处理和准备,这才会真正有用。在本例中,您可以启动 EC2 实例,通过 Gearman 执行工作,比较响应,并关闭 EC2 实例。当您真正需要成百上千的机器来进行处理时,这可以节省资金。



在数据环境使用 Gearman

通常有这么一些情况,您会想要对一些信息执行某些操作,但是处理在时间上不是很紧急,或者数据源和目的地之间存在一些距离(在网络上,不是地理位置上)。

到目前为止,已经了解在想要或需要即时响应的时候使用 Gearman 的方式。Gearman 也能够初始化background 进程。当前景客户机要求做工作而不担心何时返回响应时,就会发生这种情况。

考虑这样一个 web 应用程序,它在注册过程中会发送一个注册 e-mail。当用户点击 web 窗体上的 Submit 按钮时实时发送这样的 e-mail,会有很多潜在的问题。问题到达邮件服务器或者只是在忙时提交 e-mail,都会延迟 web 应用程序。有了 Gearman,您可以将任务提交到队列,让您的一个工人完成 e-mail 的实际处理和格式化并发送,这可以让 web 接口做出即时响应。下面是一个很好的例子,演示了在前端不需要等待响应时分派一个 background 进程。

同样的原理也可适用于其他时间不敏感的要素。例如,如果您在提供或使用 Twitter 集成,那么可以使用 Gearman 来处理到 Twitter 帐户的发布。在本例中,不需要内容是即时的,因而不会出现因执行内容发布而让应用程序的其余方面变慢的问题。Gearman 服务允许您返回一个失败状态,确保任务将被重新排队和重试。

您也可以使用 Gearman 来处理数据库和其他更新(更新的即时特点不是很重要,所以信息不必即时地写入数据库)。在这种情况下,可以充分利用现代 web 应用程序工具组中其他组件(比如 memcached)的优势。

有一个应用程序是很好的例子,它处理诸如此类的内容,比如说文档归档器,您想要从内容构建索引和其他信息。尽管已经有用于此类操作的传统队列可用,但是 Gearman 让在一组机器中扩散和分布信息变得更容易,提高了索引过程的性能。

有助于这些情况的一个要素是,与 memcached 组合使用 Gearman 的处理,以允许您提交数据,解析和处理数据,然后自动更新该信息的高速缓存版本。

在博客或其他内容管理系统中,可以使用该方式来允许更新和信息的即时发布,方法是更新内容的 memcached 版本并在后台更新数据库,或者更新数据库并在写操作完成后马上更新 memcached 客户端版本以用于显示。通过减少同步写操作的次数,两种方案都有助于减少向数据库写入内容,同时提高前端应用程序的响应性。

在 清单 8 和 清单 9 中客户机和工人脚本的修改版本中,可以看到一个使用 memcached 的例子。客户机把要被计数的字符串写入 memcached,工人使用客户机提供的 ID 读取字符串,统计单词数量,然后将信息写回 memcached。本例中使用了一个硬编码的 ID,但是您也可以使用来自数据库的 ID 或 UUID。


清单 8. 基于 memcached 的客户机

use Gearman::Client;
use Cache::Memcached;

# Set up memcached

my $cache = new Cache::Memcached {
    'servers' => [
                   '192.168.0.2:11211',
                   ],
};

# Set up Gearman

my $client = Gearman::Client->new;
$client->job_servers('192.168.0.2:4730');

#
# Obtain the information you want to process
# and generate a unique key

my $id = 9334;

# Write some metadata

$cache->set(sprintf('doc-%d-srctxt',$id),
            'The quick brown fox jumps over the lazy dog');

my $result = $client->dispatch_background('wordcount',$id);

清单 9. 基于 memcached 的工人

use Cache::Memcached;
use Gearman::Worker;

my $cache = new Cache::Memcached {
    'servers' => [
                   '192.168.0.2:11211',
                   ],
    };

my $worker = Gearman::Worker->new;
$worker->job_servers('192.168.0.2:4730');
$worker->register_function('wordcount' => \&wordcount);
$worker->work while 1;


sub wordcount
{
    my ($arg) = @_;

    my $id = $arg->arg;

    print STDERR "Providing word count for ",$id,"\n";

    my $string = $cache->get(sprintf('doc-%d-srctxt',$id));

    if (!defined($string))
    {
        $cache->set(sprintf('doc-%d-status',$id),
                    'Error: Source text not found');
        return;
    }

    my @words = split /\s+/,$string;
    $cache->set(sprintf('doc-%d-status',$id),
                'Complete');
    $cache->set(sprintf('doc-%d-result',$id),
                scalar @words);
}

注意,在工人中,脚本使用 status 和 tagged memcached 项来保留信息;失败可以被写入 status。这允许客户机在发生暂时的失败时重新提交工作请求。
由于客户机不期待收到响应,所以需要一个单独的脚本在 memached 就绪时从它取得信息。清单 10 展示了一个用于此目的的简单客户机脚本,它识别是否出错(并报告错误)或报告结果。

清单 10. 从 memcached 取得结果

use Cache::Memcached;

my $cache = new Cache::Memcached {
    'servers' => [
                   '192.168.0.2:11211',
                   ],
};

my $id = 9334;

if ((my $result = $cache->get(sprintf('doc-%d-status',$id))) =~ m/Complete/)
{
    print "Count is ",$cache->get(sprintf('doc-%d-result',$id),),"\n";
}
else
{
    print "Result not ready: $result\n";
}

要使用该脚本,可运行工人脚本:$ perl workermemc.pl。然后运行客户机脚本,将请求提交到队列中:$ perl clientmemc.pl
可以通过使用检索脚本,了解请求是否已完成。

清单 11. 检索脚本
$ perl getresult.pl
Result not ready:

一旦结果最终可用,您就可以看到。

清单 12. 最终结果
$ perl client.pl
Words 9

您可以对所有类型的数据和环境重复该脚本,并在该过程中包括数据库写入和恢复。


结束语

Gearman 是一种简单的思想,它容易使用,却能提供丰富的功能,从容易地分布和共享工作负载,到允许在不同的语言和部署环境之间进行互操作。排队系统允许您利用该功能,并通过排队或降低通常在前端导致性能问题的并发性,使用它来提高应用程序性能及减少数据库和其他服务器组件上的负载。

Gearman分布式工作模式实战指南 本文还有配套的精品资源,点击获取 简介:Gearman是一个开源的分布式任务队列系统,它通过分发工作到多台机器上来提高计算资源的利用率,并支持负载均衡与高可用性。在Java中,利用Gearman库可构建分布式工作流程,实现异步处理和并行执行任务。文章介绍了Gearman的基本概念、工作流程以及如何在Java中通过Gearman客户端和工作者库实现分布式任务处理。 ... 阅读详情

相关推荐

构建Linux环境下的Gearman任务队列系统

除了基础配置外,还支持许多高级配置项,这些配置可以让我们更精细地控制Gearman服务器的行为:[debug]# 是否启用调试输出# 设置任务调度器类型,可以是 'round-robin' 或 'fair'[resource]# 定义每个任务的内存限制debug节可用来打开或关闭调试输出,对开发和问题排查非常有帮助。节定义了任务调度器的类型,其中是循环调度,fair则是按任务大小进行调度。resource。

weixin_42575505的博客 1108

今年调研的开源软件(1)

1、什么是gearman Gearman是一套可以一个work传递其他机器,或者调用其他机器功能的应用程序框架。它允许并行工作,负载平衡处理,并调度不同语言之间的职能。它可用于各种应用,从高可用性的网站数据库复制事件的运输。简单来说,Gearman是一个分布式的任务调度框架,它包括 a client,a worker ,a job server这三部分组成。 Gearman的执行过程:客户

xiaofeng119的专栏 788

Java调用SMTP命令发邮件,实现抄送,附件--无需邮件搭建邮件服务器直接发送

Java调用SMTP命令发邮件,实现抄送,附件--无需邮件搭建邮件服务器直接发送 该功能采用了Gearmand进行任务转发

memcached mysql 队列_gearman+mysql实现持久化队列

gearman+mysql实现持久化队列 持久化队列是在0.6版本中新添的一项功能,允许将队列存放在drizzle或mysql中。0.7版本允许将队列存放在memcached。0.9版本可以将队列存放在sqlite3或postgresql。 在gearman job服务器内部,所有的job队列都是存放在内存中的,这就意味着一旦服务器重启或崩溃,未执行的job将会丢失而不会被worker服务器执行。...

weixin_39600823的博客 125

TASK02【datawhale组队学习】视觉感知与手眼协调,计算机视觉在机器人中应用,手眼标定算法实现,深度估计与3D重建

参考教程AI硬件与机器人技术教程:https://github.com/datawhalechina/ai-hardware-robotics视觉感知与手眼协调,计算机视觉在机器人中应用,手眼标定算法实现,深度估计与3D重建单目深度估计 (Monocular Depth Estimation)DPT 的全称是 Dense Prediction Transformer。

m0_52024881的博客 1191

基于STM32F407与AD9910/AD9959的高频可调DDS信号源设计与实战

本文详细介绍了基于STM32F407微控制器与AD9910/AD9959高性能DDS芯片的高频可调信号源设计与实现。文章从DDS原理入手,阐述了双芯片方案的优势,并重点分享了高频电路设计中的电源、PCB布局布线等关键硬件设计技巧与避坑指南。同时,提供了通过SPI配置DDS芯片及利用Matlab生成任意波形的软件驱动方法,旨在帮助开发者打造一个覆盖10Hz至4200MHz的实用信号发生器。

weixin_36184718的博客 120

自托管订阅管理器SubMan:用Go+SQLite构建你的信息枢纽

在信息过载时代,高效管理多源订阅成为技术实践中的常见需求。订阅管理的核心原理在于通过标准化接口聚合、验证和同步分散的信息源,其技术价值在于打破数据孤岛,实现信息的集中管控与自动化流转。在应用场景上,无论是个人知识管理、自动化工作流集成,还是跨设备信息同步,一个设计良好的订阅管理器都能显著提升信息处理效率。本文聚焦的SubMan项目,正是基于Go语言的高并发特性和SQLite的轻量级数据存储,构建了一个可自托管的微服务架构订阅管理器。它通过RESTful API提供统一的数据接口,并支持OPML导入导出等标准

weixin_33739541的博客 764

Fast DDS源代码走读

DDS, PDP, EPD, DataWriter, DataReader

weixin_43082062的博客 712

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

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

大鹏 3212

基于人脸识别的驾驶员疲劳检测方法研究

摘 要交通安全问题愈发严重,疲劳驾驶已是造成交通事故的主要因素之一。为减少因疲劳驾驶造成的交通事故,本文设计了一种基于图像处理技术的疲劳驾驶监测系统,该系统结合了肤色模型、灰度积分投影技术以及PERCLOS方法,旨在通过实时视频图像分析准确检测驾驶员的疲劳状态。首先,系统通过肤色模型从图像中有效提取人脸区域,并在此基础上利用Haar级联分类器进行人脸检测,确保在人脸角度变化或部分遮挡的情况下依然能够实现高效识别。接着,灰度积分投影技术被应用于眼部定位,通过分析眼睛区域的灰度变化,精确确定眼睛的上下边界,从

carrott0617的博客 1005

AUTOSAR开发实战:NvM模块如何解决汽车电子中的EEPROM与Flash存储难题?

本文深入探讨了AUTOSAR中的NvM模块如何有效解决汽车电子系统中EEPROM与Flash存储的难题。通过分层架构设计,NvM模块实现了硬件抽象与统一管理,支持数据一致性检查、错误恢复等高级功能,显著提升了存储可靠性和耐久性。文章结合实战案例,详细解析了NvM的核心机制及工程优化方案,为汽车电子开发者提供宝贵参考。

e3f4g5的博客 563

gearman_在多个环境中部署Gearman

现代计算环境的最大挑战之一是计算资源的分配和有效利用。 当前的总体计算趋势是,您可以廉价,轻松地安装功能强大的计算机来执行相对简单明了的任务,但是您可能无法获得最佳的计算机整体性能或使用率。 相反,现在许多应用程序需要执行相对较小的操作,但可能需要执行数百或数千次,而无需(或无法使用)单台机器的功能。 随着计算场规模的增加,有时需要跨所有这些计算机同时或选择性地执行操作或操作以执行管理或安...

cuxiong8996的博客 351

【推荐100个unity插件】帮助你快速开发一款FPS游戏—— FPS Framework

FPS Framework 快速入门指南 FPS Framework 是一个 Unity 开发框架,可加速 FPS 游戏开发。主要功能包括: 第一人称控制器:基于 Character Controller 实现,提供移动、跳跃、下蹲等功能,支持自定义参数调整 渲染管线转换:内置 RP 转换器,支持 URP/HDRP 等渲染管线一键切换 库存系统: 采用双列表管理:物品列表(Items)和可收集物列表(Collectables) 支持自定义库存物品和可收集物类型 提供拾取/丢弃功能实现 快速开始: 通过预制件

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2567

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

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

weixin_30675619的博客 413

点云处理实操(四) -PCL中的点云三角化

点云处理实操(四) -PCL中的点云三角化

cangqiongxiaoye的博客 939

Python 爬虫实战:去哪儿网机票价格爬取与出行比价分析

本文介绍了一个基于Python的机票价格监控系统,通过爬取去哪儿网数据实现多航线查询与智能比价。系统采用requests+BeautifulSoup+selenium技术栈,具备以下功能: 实时查询指定航线价格 历史价格追踪与分析 最低价推荐与价格预警 数据可视化展示 文章详细解析了去哪儿网的页面结构和反爬机制,提供了Selenium浏览器的完整配置方案,并实现了一个可稳定运行的机票采集爬虫。该系统能帮助用户掌握价格波动规律,选择最优购票时机,每年可节省可观的出行成本。

u014481728的博客 665

gearman分布式负载均衡

1、简介 gearman是一个分布式开发框架,适合处理一些必须处理但是不影响主流程的操作,比如保存日志、发送邮件、缩略图片等。最早是基于perl语言的,2008年发布的时候改为C++语言开发,其开发接口支持多种语言,如PHP、Java、Python、Ruby等等语言。其优点是部署轻便,并且有负载均衡和持久化的功能,除了一些大型场景需要消息队列来处理,一般的问题可以通过gearman...

869

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

gearman使用心得

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

tlxamulet的博客 587

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Gearman的使用

@import url(http://www.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 对于分布式网络环境或者有大量任务的应用,我们需要将任务在不同的服务器之间进行分布,这个时候正好是Gearman发挥实力的时候。虽然我们也可以使用MQ...

aifeier1982的博客 230

开源项目:Mod-Gearman 指南

开源项目:Mod-Gearman 指南 1. 项目介绍 Mod-Gearman 是一个为 Naemon(前身为 Nagios)设计的扩展插件,它极大地增强了 Naemon 监控平台的能力,使之能够执行分布式且可扩展的监控设置。通过利用 Gearman 任务队列系统,它可以分散服务检查和事件处理器的负载,并支持在中央配置管理下轻松创建分布式的监控环境。特性包括降低中央Naemon主机的负载、实现每秒...

gitblog_01049的博客 1085

高CPU业务场景下的任务分发方案Gearman搭建一览

Gearman是当年LiveJournal用来做图片resize的,大家也明白图片resize是一个高CPU的操作,如果让web网站去做这个高CPU的功能,有可能会拖垮你的 web应用,那本篇我们来看看gearman是如何解决这个问题的,它的架构图类似下面这样: 从上面这张图,你应该会看到,Gearman是由三个部分组成: 1. Job Server     这个就是Gearman的J

aa3214567的博客 1620

java gearman client_高CPU业务场景下的任务分发方案Gearman搭建一览

Gearman是当年LiveJournal用来做图片resize的,大家也明白图片resize是一个高CPU的操作,如果让web网站去做这个高CPU的功能,有可能会拖垮你的web应用,那本篇我们来看看gearman是如何解决这个问题的,它的架构图类似下面这样:从上面这张图,你应该会看到,Gearman是由三个部分组成:1. Job Server这个就是Gearman的Job Server,通过它对...

weixin_35561837的博客 251

gearmand高可用部署:保障任务处理系统稳定运行的关键策略

gearmand作为一款强大的分布式任务处理系统,能够帮助开发者实现任务的并行处理、负载均衡和跨语言函数调用,广泛应用于高可用网站架构和数据库复制事件传输等场景。本文将详细介绍gearmand高可用部署的关键策略,帮助新手用户构建稳定可靠的任务处理系统。 ## 1. 持久化队列:防止任务丢失的核心配置 在gearmand中,默认情况下所有任务队列都存储在内存中,这意味着一旦服务器重启或崩溃,未

gitblog_00590的博客 995

[Link]Gearman分布式任务处理系统

http://blog.youkuaiyun.com/jiao_fuyou/article/category/1745977 http://www.cnblogs.com/cocowool/archive/2011/08/18/2145144.html 参考资料: 1、用 Gearman 分发 PHP 应用程序的工作负载 2、Gearman 3、error while loading shared ...

weixin_33913332的博客 99

gearman mysql 扩展_利用gearman实现redis缓存mysql

环境:centos6.5mysql5.6gearman简介:Gearman是一个支持分布式的任务分发框架。设计简洁,获得了非常广泛的..环境:centos6.5mysql5.6)在mysql中的数据发生改变时触动触发器将数据传入Gearman中,这时的mysql相当于Gearman的clinet。然后运行自己编写的php程序作为worker,将Gearman中的数据传到Redis中去,这时的Red...

weixin_33814002的博客 89

gearman mysql 扩展_Gearman的安装和使用

Gearman 是一个分布式任务分发系统,通过程序调用(API,跨语言)分布式地把工作委派给更适合做某项工作的机器,且这些机器可以以并发的、负载均衡的形式来共同完成某项工作。当计算密集型场景时,适合在后台使用 Gearman 异步地运行工作任务。认识GearmanGearman 只是一个分布式程序调用框架,其主要由三部分组成,并通过暴露给使用方的 API 来完成任务委派和执行。组成角色Gearma...

weixin_34502439的博客 268
上一篇: Gearman分布式任务处理系统(五)版本介绍、安装方法和使用说明
下一篇: Gearman分布式任务处理系统(七)问题研究与性能优化
笑天居士
博客等级 码龄24年 292粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值