介绍
我在一家公司上班,我们许多批处理作业处理数据每天数以百万计的记录,我一直在想最近所有的机器,周围坐的每一天做几个小时没有运行。 如果我们可以使用这些机器,以增强我们的系统的处理能力,岂不是好? 在这组文章中,我要去看看用人办公室电网使用虚拟环境的潜在好处。
在第1部分中,我给了我将使用以及讨论一些潜在的原因,为什么你想创建一个办公室电网系统和技术的概述。
作业控制
如果你将要运行的作业,然后你会需要一些方法来管理他们。 你的作业控制系统(作业服务器)需要真正深思熟虑之前,甚至试图运行办公室电网。 所以,首先,什么是作业控制系统的任务:
- 移交后,要求工人工作
- 告诉工人什么类型的工作运行
- 跟踪作业
- 确保工作只运行一次
- 向工人提供了就业数据,或至少告诉他们在哪里得到它
该系统还需要扩展,一个解决方案,适用于在一个单一的情况下,现在可以延长运行几种类型的业务工作,看到在网格解决方案的价值。 例如,作业可能会获得优先事项,可能存在一个以上的作业类型(即几个代码基地),最终你甚至可以运行多个不同的工作,优化为每个作业类型(虽然不从“一般工人的机器'的想法)。 总是尝试开发系统时,思考未来,短期视力可导致较长期的挫折和增加开发时间。
作业服务器
我们要去的地方需要控制我们的工作,这应该只在您的网格系统,有一个固定的资源定位器,是一个IP地址,主机名,URL(使用内部DNS)等,这是因为工人需要知道在哪里找工作,工作人员需要找到作业控制系统(作业控制系统发现工人)。
作业服务器本身并没有真正有一个复杂的任务(无论如何)的一项基本制度,它需要储存工作清单,手出来工作,收到成效,并随后它们存储供以后检索。 如何定义这些部件(如“工作”失控),可以是很基本的。 后来,我们可以延长系统包括一个管理界面,添加,编辑,删除,暂停工作,但这是超出这个练习。
有没有任何理由,那么你的工作服务器不能是一个虚拟机,主要加工提供的服务器内运行,它不会消耗太多资源。 然而,作业服务器需要高可用性,如果上周五晚上,你将失去整个周末的处理,可能耗费您值得一两个星期的处理时间(时相比,你的主要处理服务器单独) 。 你可能要考虑把你的工作服务器高可用性负载平衡的环境。
基本设置
为我们的工作服务器的基本设置,包括我打电话我LIMP服务器 (这是李马钱,米ySql,磷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地址):
更新`工作`设置'状态'= 0'状态'= 1,`started_by`= _ ME__;
- 使用我们的工作选择标准,选择工作,并告诉工人,这与它打交道的控制系统:
更新`工作`设置'状态'= 1,`started_by`= _ ME__,started_at`=现在()'状态'= 0或
(`地位`1`started_at`> DATE_SUB(现在(),间隔x小时))ORDER`ID`升序;
通过抓工作,但没有返回结果在X时间,我们确保所有的工作都是在运行崩溃或擅离职守工人的事件数量。
- 下一步抢详情记录本身的工作:
选择*从`工作`WHERE`started_by`= __ ME__极限;
选择*`job_records“``ID`= _ JOBID__;
作业完成后,我们插入了我们的结果记录和标记为已完成的工作。 请记住,作为作业可以暂停/恢复随时让一些在你的脚本的健壮性。 这可能是任务中途暂停通过更新作业控制系统,使检查工作的结果保存到作业控制系统中的记录数量,将是一个明智之举。
此外,虽然这表明如何工作可以选择从一个SQL查询帧确实应该管理的控制,使抽象的工作,如果你决定切换到使用一个Web服务,文件系统, XML ,或任何其他多项制度,它不会影响到它上面的代码。
工作配置
接下来要考虑的方面是工作的大小和配置。 玩作业配置,我们可以取得良好的平衡之间的速度,复制过程和可靠性。 以一对夫妇OFA方案:
- 工作1天,每运行,这意味着,你的工人需要15天时间来处理每个作业(记得当时2/3rds的10%的电力)。 这显然不是一个明智的配置,你的工作规模是太大了! 这将需要至少增加一倍的时间去处理工作,最初的工人应该去擅离职守(拿起时,它已经不返回结果加后处理时间)。 在一个理想的,你必须至少有一个完整的工作很容易被清除长期闲置期间的每个年底,这样你的工作,在最坏的情况下保持计时工作将采取两天的过程,应该先去失踪。
- 工作需要1分钟运行,这意味着你的工人,约需15分钟,运行每个作业。 虽然这可能最初似乎理想,你在吃午饭的时候获得额外的工作处理,茶点,会议等,这种情况使应变系统的其他领域,并介绍了自身的问题。 例如,首先将您的设置/处理时间比去,因此失去了系统的效率。 您的网络将是不断流的工作信息,以各种工人的令人沮丧的工作人员,谁是毛泽东他们的日常工作。 你还打算把更多的应变作业处理服务器,因为它有很多很多小块工作定期抛出。 最后,在这种情况下,如果你的工作服务器宕机,你要创建一个未完成的工作的巨大回日志,而更大的工作可以继续幸福地意识到加工作业服务器遇到困难。
在现实中会有您的网格设置没有一个理想的配置,更取决于可用的资源,作业类型,作业的周转时间的要求,网络能力,等等。 然而,一些准则是:
- 大小工作,使每个工人可以通过在15小时内(最长可能的空闲时间至少3-4个工作)
- 发挥作业的大小,使安装变得相当的处理时间(轴承在考虑到上述点)相比,微不足道。
- 如果工作不完整的双倍金额的时间(也许更少),你期望它来完成,它承担了擅离职守,并开始处理它与另一名工人。 这意味着你可能要等待它来完成(如果后续作业失败可能更长)工作的正常长度的三倍。 你可能要缩短这个时间,但要小心没有减少太多,因为你可能会开始定期重复处理任务 。
- 工作应该尽可能多的外部要求独立。 服务器的工作,例如,只应在每一项工作的开始和结束联络。
- 不饱和您的网络,这将有两个负面影响,你白天的工作人员会发现,使用网络的沮丧和问题,可连接超时的问题只会变得更糟,因为你扩展你的网格经历。
- 确保工作可以运行在你的工人。 如果工作变得过于内存密集型或磁盘空间密集的工作将启动中止的唯一的事情,你会发现是在没有真正的原因与处理的工作数量下降。
提交工作结果
当提交工作结果,它是重要的检查结果还没有被提交由另一名工人,特别是如果目前的工人已经蛰伏一段时间。
结果提交时确保结果的数量内的工作相匹配的记录数。
如前所述,不能过分强调,建设成为工作的检索结果提交容错。 工人可以(和最有可能)进入挂起模式在最不方便的时候,这需要照顾。 也再次抽象出来的结果提交将有助于满足您的作业控制系统更容易处理的未来变化。
总结
在这sectionÂ,我们看着需要做什么作业控制服务器,以及如何得到一个非常基本的系统设置。 我们讨论了如何检索从控制系统的工作,以及如何最好地配置工作得到大多数我们您的办公网格系统。 要完成,提出了一个段落或提交结果返回到作业控制服务器。
- 作业控制服务器管理工作,确保完成所有的工作单位
- 通过提炼你的工作选择/结果提交,没有太多的问题,我们可以改变控制服务器技术
- 配置您的工作,以确保它们运行您的网络基础设施上投入太多的压力,快速,高效地,并没有定期重复处理任务。
- 确保您建立容错和错误checkingÂ到你的程序,工人可以暂停,恢复和最不方便的时间。 记住要检查,如果结果已提交另一名工人。
下一次
在第三部分中,我们将创建我们的虚拟加工机,并成立了我们的windows机器成为空闲时间的工人。