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



















































合丫! 好的概念,但可能真的做这项工作吗?