简介
我的工作在我们运行的批处理作业,每天处理的数据记录数百万,我最近一直在思考所有的机器,坐在周围的每个每天做几个小时没有一个公司 。 如果我们能够使用这些机器,以增强我们的系统的处理能力,岂不是好? 在这组文章中,我要去看看雇用一个办公室的潜在好处电网使用虚拟环境。
在第1部分中,我给我将使用以及讨论一些潜在的原因,你为什么会要创建一个办公室电网系统和技术的概述。
作业控制
如果你将要运行的作业,那么你会需要一些方法来管理他们。 你的作业控制系统(你的工作服务器上)需要,真正做到深思熟虑之前,甚至试图运行办公室电网。 因此,首先,什么是作业控制系统的任务:
- 从工人的要求不可收拾工作
- 告诉工人要运行什么类型的职位
- 跟踪作业
- 确保工作只运行一次
- 为工人提供就业数据,或至少告诉他们在哪里得到它
该系统还需要具有可扩展性,一个解决方案,现在在一个单一的情况下可以延长运行几种类型的就业机会,为企业看到在网格解决方案的价值。 例如,作业可能会获得优先事项,可能存在多个作业类型(即几个代码基地),最终你甚至可以运行几个不同的工作,每个作业类型优化的机器(虽然不从“一般工人“的想法)。 总是尝试思考未来,在开发系统时,短期前景可能会导致较长期的挫折和更多的发展时间。
作业服务器
我们要去某个地方需要控制我们的工作,这应该只在您的网格系统,有一个固定的资源定位器,是一个IP地址,主机名,URL(使用内部DNS)等,这是因为工人需要知道在哪里找工作,工人需要找到作业控制系统(没有作业控制系统找到工人)。
作业服务器本身并没有真正有一个复杂的任务(中的一项基本制度,无论如何),它需要存储作业列表,手出的工作,收到成效,并随后存储日后检索。 如何定义这些部件(如“失控就业”)可以是很基本的的。 后来,我们可以扩展系统,包括添加,编辑,删除,暂停作业,但是这超出了这个运动是一个管理界面。
没有任何理由任何,那么,你的作业服务器不能虚拟机运行在您的主服务器进行处理,只要它不消耗太多资源。 作业服务器,则需要高可用性,如果它出现故障在一个星期五的晚上,你将失去整个周末的处理,可能会让您值得一两个星期的处理时间(时相比,您的主服务器进行处理,单独) 。 您可能要考虑你的工作服务器高可用性负载平衡的环境。
基本设置
为我们的工作服务器的基本设置,包括我打电话我LIMP服务器( 即李马钱,米ySql,P HP) 。 THEA工人上运行的代码将实际工作,什么工作,它可以运行作业控制系统数据库交互。 后来,我们可以创建Web服务,而不是让工人自己的辛勤工作了就业机会,实际上手,但现在我们将继续使用KISS原则 (保持简单,愚蠢!)。
所以,让我们创建三个的 MySQL表来处理工作。 这将是'工作','jobRecords`和`jobResults`。
在这里,我使用SQL好友一个伟大的小替代phpMyAdmin的 ,只是因为它更容易安装在CentOS(别人看:10到phpMyAdmin的替代品)
此表由5个简单的领域,
- ID:唯一标识工作
- 名称:可能是一个客户参考,或任何其它标识符
- 状态:你需要知道在哪里的工作,例如:
- started_by:谁开始做这项工作吗? 这不完全是必需的,但是是一个不错的。 我建议他们的网络上的IP地址跟踪工人
- started_at:工人什么时候开始工作? 通过跟踪,并没有在X的时间,我们知道我们需要拿起工作再次开始另一名工人加工完成的工作。 工人可以停止处理/任意数量的原因,停电,死机,网络损失等离线
这是很容易,本表可与一些额外的领域扩展,从而使统计跟踪,结束时间列,工作了多久,一个计数器,看看有多少工人拿起作业(显然,这需要趋向1),作业的优先级列表可以一直开下去。 在更复杂的工作场景,将有可能指定工人需要多少内存访问(因此,只有使用合适的工人),甚至是什么类型的工人需要。
让我们来添加几个例子作业:
下表是很容易理解,这些都是我们的工作记录。 它们与主要工作表的列jobs_id`。 本表数据,您需要提供您的工作人员非常依赖,让一个很简单的例子,我们有四个列:
- ID:记录ID
- 名称:人的名字
- 地址:人的地址
- jobs_id:这条记录是与作业ID
第三个也是最后一个结果表表,它有很多相同的使我们的记录表,除了一些列可以记录表的一部分:
- job_record_id:结果链接的工作表
- 结果:结果数据
... ...,这一切您需要作业控制! (尽管在一个非常基本的的水平)在我的例子中,我指出另一种情况我处理的数据所在的表,但这很可能只是一个文件,运行模拟程序的参数,你的名字。
选择工作
如前所述,工人将现在为我们做我们的工作管理,都需要我们要真正做到的是找到一份工作,需要处理和获取信息。 我们将如何做到这一点? 好了接我们的工作的选择标准和寻找工作,在SQL中,我做了以下:
- 采取任何未标记完成,但我们的工人和复位(以一个标识符__ME__,最简单的IP地址)的工作:
UPDATE`的工作`设置`地位`= 0`地位`= 1和`started_by`= __ME__;
- 使用我们的工作选择标准,选择工作,并告诉工人,这与它打交道的控制系统:
UPDATE`的工作`SET`地位`= 1,`started_by`= __ME__,`started_at`= NOW()这里“状态”= 0或
(`地位`= 1和`started_at`> DATE_SUB(NOW(),间隔X小时))ORDER BY`ID`ASC;
通过抓取没有返回结果的工作在X的时间,我们必须确保所有的工作都运行在一个崩溃或擅离职守工人的事件。
- 下一步抢的工作记录本身的细节:
SELECT *`工作``started_by`= __ME__ LIMIT 1;
SELECT * FROM`job_records`WHERE`ID`= __JOBID__;
我们插入我们的结果记录,并标记为完成的工作的工作完成后。 记住作为作业可以暂停/恢复在任何时候允许一些在你的脚本的健壮性。 这可能是通过更新作业控制系统挂起任务的一半,使检查工作中的记录数量和结果保存到作业控制系统的数量将是一个明智之举。
此外,虽然这表明如何选择工作可以从一个SQL查询帧,你确实应该管理的抽象作业控制,因此,如果您决定切换到使用一个Web服务, 文件系统 ,XML,或任何其他多项制度,它不会影响到它上面的代码。
作业配置
接下来的方面要考虑的是作业的大小和配置。 通过作业的配置玩,我们可以取得出色的速度,复制过程中,和可靠性之间的平衡。 以一对夫妇OFA方案:
- 乔布斯采取每1天运行:这意味着你的员工需要15天来处理每一个工作(记住10%的电力时间2/3rds) 。 这显然不是一个明智的配置,你的工作是太大了! 初始工人擅离职守(时间拿起它没有返回结果加后处理时间),这将需要至少增加一倍的时间去处理工作。 在一个理想的,你有至少有一个完整的工作很容易被清除每个长的闲置期结束,你保持这样的工作,在最坏的情况下工作计时两天的过程,要先去失踪。
- 乔布斯1分钟运行 ,这意味着,你的工人约15分钟,运行每个作业。 虽然这最初看起来可能理想,您将获得额外的工作处理在午餐时间,茶点,会议等这种情况下使系统的其他领域的压力,并介绍自己的问题。 例如,首先你的设置/处理时间比要去下来,因此失去了系统的效率。 您的网络将是不断流作业的信息,以各种令人沮丧的工人的工作人员都是洞,他们的日常工作。 你也打算把作业处理服务器上,因为它有更多的应变抛出很多很多小块的工作定期。 最后,在这种情况下,如果你的工作服务器宕机,你要去创造一个更大的工作未完成的,而工作的巨大回日志可以继续处理暗藏不知道,作业服务器遇到困难。
现实中有没有一个理想的配置为您的网格设置,在很大程度上取决于可用的资源,作业,作业的周转时间的要求,网络的能力,等等类型。 但一些指导原则将是:
- 大小的工作,使每个工人可以通过至少3-4在15小时内的工作(可能闲置时间最长的一段时间)
- 作业大小的播放,使安装时间变得相当的处理时间(铭记上述点)相比,微不足道。
- 如果作业不完成一倍的时间量(或许更少),你期望它来完成,它承担了擅离职守,并开始与另一名工人来处理它。 这意味着您可能需要等待完成(如果后续工作失败可能更长)为它工作的正常长度的三倍。 您可能要缩短这个时间,但要小心,不要减少太多,因为你可能会开始定期重复处理任务。
- 乔布斯应该尽可能多的外部要求独立。 作业服务器,例如,只应在每一项工作的开始和结束联络。
- 不要您的网络饱和,这将有两个负面影响,你白天的工作人员会发现,使用网络的挫折和问题都可以通过连接超时问题只会变得更糟,因为您扩展您的网格的经验。
- 确保作业可以运行在您的工作人员。 如果作业太多内存密集型或磁盘空间密集的工作将开始中止,你会发现的唯一一个没有真正的原因与处理的作业数下降。
提交工作结果
提交工作结果时,重要的是要检查的结果没有被提交由另一名工人,特别是如果目前的工人已经蛰伏一段时间。
结果提交时确保结果的数量范围内的工作相匹配的记录数。
如前所述,并不能过分强调,建设成为工作的检索结果提交容错。 工人可以(和最有可能将的)进入挂起模式在最不方便的时候,这需要得到照顾。 也再次抽象离开你的结果提交,将有助于满足您的作业控制系统更容易处理未来的变化。
摘要
在此sectionÂ,我们看着作业控制服务器需要做什么和如何得到一个非常基本的的系统设置。 我们讨论了如何检索从控制系统的工作,以及如何最好的配置工作,以获得最我们您的办公网格系统。 要完成,提出了一个段落,或提交结果返回到作业控制服务器。
- 作业控制服务器管理工作和确保完成所有的工作单位
- 通过提炼你的工作选择/结果提交我们可以改变,没有什么问题的技术控制服务器
- 配置您的工作,以确保它们没有您的网络基础设施上投入太多的压力,快速,高效地运行,并没有重复处理定期的任务。
- 确保您构建容错和你的程序错误checkingÂ,工人可以暂停和恢复和最不方便的时间。 记住要检查,如果结果已经由另一名工人提交。
下一次
在第3部分 ,我们将创建我们的虚拟加工机,并成立了我们的Windows操作系统的计算机成为空闲时间工人。