动态页面添加到Zend_Navigation在运行时容器

史蒂芬劳埃德沃特金斯 ,星期四2010年1月7日下午10:50

在我的左右Zend_Navigation,最后发表的文章继续为sitemap.xml定制控制器/行动路线的要求 ,这个职位是在运行时增加约dymnamically /脚本执行页面到Zend_Navigation容器。

它的一切都很好在指定INI或网页的xml文件,但在某些时候你将不得不改变你的网站页面,你想,作为一个菜单的一部分,地图,或者在你的路径记录中。 因此,我们需要做的就是添加网页到我们在运行时Zend_Navigation容器。 这个例子将在加入新闻,博客,或网页的意见,等等。

继续阅读“在运行时动态添加页面Zend_Navigation容器”»

为sitemap.xml定制控制器/行动路线的要求

史蒂芬劳埃德沃特金斯 ,星期三2010年1月6日上午12时13分

为了给/直接请求sitemap.xml到自定义控制器和你的行动Zend Framework的应用程序只需加入您的application.ini或替代配置文件如下(如我用navigation.ini):

 resources.router.routes.sitemap.route =“sitemap.xml”
 resources.router.routes.sitemap.defaults.controller =指数
 resources.router.routes.sitemap.defaults.action =地图

示例输出代码可以看出创建一个在适当的控制器(如我的网站地图索引中的控制器,地图行动谎言)动作:

 < PHP
类IndexController
     Zend_Controller_Action的延伸
 {
     / **
      *上呈现Zend_Navigation设置为基础的地图
      * /
    公共职能sitemapAction()
     {
    	回声$这个 - >视图 - >导航() - >网站地图();
    	 $这个 - >视图 - >布局() - > disableLayout();
    	 $这个 - > _helper - >视图解析器 - > setNoRender(真);
     }
 }

网站地图可以快速,方便地生成使用Zend_Navigation ,一个伟大的快速教程(通常为Zend框架教程非常有用)是Zend的注塑 - 动态创建菜单,地图和面包屑

Zend框架的每个模块的设置

史蒂芬劳埃德沃特金斯 ,星期五2010年1月1日10:40 PM

我已经创建了这个职位的需要较少的配置随访,请参阅模块基于布局- Zend框架

当使用Zend框架的模块,其明显的,如果你正在运行同一应用程序的各种断(分)网站上,您不一定要相同布局脚本的每个部分。 我决定去以下网站结构:

  /应用
     /控制器
         ... ...
     /型号
     /模块
         /默认
             /控制器
             /布局
                 /脚本
             /意见
                 /脚本
         / anotherModule
             ... ...
     /脚本

问题是建立在每个模块的基础上布局脚本。 答案来了,通过使用一个动作助手。 设置在每个模块的基础上的布局包括三个步骤:

  1. 的application.ini(或类似的配置设置):
     admin.resources.layout.layoutPath = APPLICATION_PATH“/模块/管理/布局/脚本”default.resources.layout.layoutPath = APPLICATION_PATH“/模块/默认/布局/脚本”member.resources.layout.layoutPath = APPLICATION_PATH“/模块/成员/布局/脚本“affiliate.resources.layout.layoutPath = APPLICATION_PATH”/模块/加入/布局/脚本“ 
  2. 创建你的动作助手:
      <?PHP
     / **
      *设置在每个模块的基础上布局路径
      *
      * @作者劳埃德沃特金斯<lloyd@evilprofessor.co.uk>
      * @自2010-01-01
      * /
    类Pro_Controller_Action_Helper_SetLayoutPath
        延伸Zend_Controller_Action_Helper_Abstract
     {
         / **
          *设置布局路径基于模块
          * /
        公共职能preDispatch()在
         {
        	这个模块= $ $ -> getRequest() - > getModuleName();
    
    	    如果($引导= $这个 - > getActionController()
    	                        - > getInvokeArg('引导')){
    
    	         = $ $配置引导 - > getOptions();
    
    	        如果(isset($ CONFIG [$模块] ['资源'] ['布局'] ['layoutPath'])){
    	             $ layoutPath =
    	                  $ CONFIG [$模块] ['资源'] ['布局'] ['layoutPath'];
    	             $这个 - > getActionController()
    	                  - > getHelper(“布局”)
    	                  - > setLayoutPath($ layoutPath);
    	         }
        	 }
         }
     } 
  3. 而最后自举的动作助手:
      ... ...
         / **
          *设置上每个模块为基础的布局脚本
          * /
        保护功能_initLayoutHelper()
    	 {
    	     $这个 - >引导(“frontController');
    	     $布局= Zend_Controller_Action_HelperBroker:addHelper(
    	        新Pro_Controller_Action_Helper_SetLayoutPath());
    	 }
     ... ... 

学说:DATETIME默认NOW()

史蒂芬劳埃德沃特金斯 ,周三二○○九年十二月三十〇号下午6时30分

我一直在挣扎设立一个新的数据库架构Zend框架项目。 使用 尝试使用学说为我的数据库模型ORM。 我需要设置模式,以便它让我为一个'日期时间'列的默认的日期和时间,例如,当添加新的消息我得到的当前时间戳。 经过一番搜索和试验我找到了解决办法,所以我分享它。

在您的模式YAML文件只需做到以下几点:

消息:
   actAs:
     Timestampable:
      创建:
        名称:created_at
        类型:时间戳
        格式:YMD H:我:S
      更新:
        名称:last_updated
        类型:时间戳
        格式:YMD H:我:S
  列:
     ID:
      类型:整数
      主:真
      自动增量:真
    名称:字符串(255)
    电子邮件:字符串(300)
    消息:字符串(2000)

如果在另一方面,你不想要一个'updated_at'列您可以使用下列内容:

消息:
   actAs:
     Timestampable:
      创建:
        名称:created_at
        类型:时间戳
        格式:YMD H:我:S
      更新:
        禁用:真
  列:
     ID:
      类型:整数
      主:真
      自动增量:真
    名称:字符串(255)
    电子邮件:字符串(300)
    消息:字符串(2000)

PHP设计模式-观察者模式

史蒂芬劳埃德沃特金斯 ,星期二2009年12月29号下午10点02

我一直在阅读深入浅出设计模式 最近已决定写我自己的利益作为PHP的一些模式的例子。 第一个,我已经决定了代码是观察者模式 该观察模式的正式定义是:

观察者模式 (一个异步的一个子集发布/订阅模式 )是一种软件 设计模式,在其中一个对象 ,称为主体,维护其家属名单,所谓观察员,并通知他们自动的任何状态变化通常是通过调用,他们的一个方法 它主要用于实现分布式事件处理系统。

随着系统变得更加松耦合确保事件发生时,所有的这些系统需要更新知识的了解。 例如,一个博客文章,在保存后,我们可能需要更新的搜索引擎(如:Lucene的),更新我们的地图,标签,电子邮件订阅用户等观察员模式允许开发人员添加未经编辑的观察对象的其他听众。 通过注入一个主题(即博客文章编辑系统)观察员(即搜索引擎更新观察员,一个网站地图生成器等),我们可以允许它执行没有任何改变的必要的更新。

继续阅读“PHP设计模式-观察者模式”»

办公室网格计算使用虚拟环境-第4部分

史蒂芬劳埃德沃特金斯 ,周五晚上11:59二○○九年十二月四日

简介

我在一家公司工作,我们运行多个批处理作业处理数据数百万条记录的每一天,我一直在思考所有的机器,围坐每一天做什么最近几个小时。 那岂不是一件好事,如果我们可以利用这些机器,以增强我们的系统处理能力? 在这组文章,我要看看用人办公室的潜在好处使用虚拟化环境。

第三部分我们创建了虚拟加工机,并设置窗口的机器成为空闲时间的工人。

运行最新的代码

在创建你的员工难免业务逻辑会改变,错误会被发现,更快,更高效的代码会产生这样离开你的工人坐在周围的数据处理采用旧的臭代码 那么我们如何确保我们总是用我们的处理脚本的最新和最伟大的版本?

有几个非常容易简单的方法,我们可以做到这一点,关键,然而,是减少实现这一处理能力和网络通信。 让我们先从最简单的解决方案和改进对夫妇的迭代它缓慢。

第一种方法是将我们的工作简单地连接到控制服务器(通过Samba,FTP,或类似)和拉下来的代码的最新版本。 效率不是很高,但它会做的工作。 让我们有所改善的,怎么样创造一个rsync脚本和使用,每一次呢? 或者怎么样放进颠覆检查出代码最初我们最新的处理脚本,然后就在每个更新运行(我们的代码SVN更新 )?

最后,我们可能会与一个bash脚本(由cron每10分钟叫),它看起来像这样简单:

  #!/ bin / sh的
如果PS斧| grep的- V GREP | grep的PHP > / dev / null的
那么
    回声“工作正在处理,退出”
其他
    回声“作业没有运行,从现在做起”
     CD /路径/到/工作/复制
     SVN更新
     PHP yourJobProcessingScript.php
科幻 

现在,我们可以肯定,随着我们一定每次运行运行最新的代码。 我们保证通过更新我们的代码库每一次我们执行运行和减少只在我们的网络传输的网络流量这个文件的区别。

在我的示范安装,我没有完全按照以上。 Subversion是安装在我的工作处理服务器,我只是拉从一个'工人'使用'svn更新“分支最新的代码。 我还添加了一个版本号标记,这是我的处理脚本返回作为结果返回到数据库中的一部分。 这样我可以看到我的代码被更新,每次我复制到我的工作分支,即躯干,我肯定是运行最新的处理脚本。

采用最新的数据

如果你的作业处理使得数据源,然后在某个时候使用这些将要被更新过。 除非你调用一个非常罕见的基础上你将防洪与交通网络,尽快把你的员工开始运行一切停顿您的数据源。 对于我的解决办法,我决定,我想提出我的虚拟机我的数据源左右。

握住你的马有!如果我的数据源是巨大的? 嗯,这确实是一个多大的数据是我们在谈论呢? 这可能更符合成本效益的安装到每一台机器一个额外的更大的硬盘,而不是购买更多的服务器进行处理。 这是一个预算的问题,要由企业来决定。 这也许是您的数据源是如此之大,它只是行不通保持在您的工作机器的数据量。 在这种情况下你会怎么办? 那么我们可以看看调用服务器上的本地数据,但这可能导致的网络问题。 在这种情况下,如该网格系统可能会变得不切实际包括在您的办公环境。 它也可能是因为你可以看看其他运行策略,例如只要求早上6点至晚上8点和每天晚上和/或限制的数据源要求你的员工。

移动上可以说我们的数据源的数据量100GB。 嗯是的这是相当多的数据位左右移动的网络上的更新。 我们如何确保我们在这种情况下,数据的最新副本? Rsync是一个可能性,但我个人觉得你的工作处理上运行服务器上最新的数据源,并设置作为复制主(有一个很好的长滨日志)这件事可能是要走的路:

复制 通过设置作为从你的工人每到作业控制服务器更新您的数据源将涓滴没有很好地在网络活动大幅增加,到工人(即除非你执行一个庞大的数据更新和所有的工人踢在一次)。 这比rsync的优势,因为你不会得到一个前每个作业长暂停;作为数据库的更新, MySQL的守护进程将在您的工作人员不断更新其数据,同时继续处理。

这是如何设置我的演示服务器。 设置复制我跟着MySQL网站上的指南( 设置复制 ),并在20分钟内我有我的头文字工作者复制作业控制服务器的数据集。 每增加工人的复制设置和处理工作,每次当虚拟机被复制。

摘要

在这一段文章,我们如何轻松,无痛的是保持你的处理代码由using rsync或subverion(SVN)迄今做的工作和减少在同一time.Â网络流量看,我们还讨论了如何继续允许它滴入到你的员工每个数据源的信息最多,最新的。 因此,我们区确保我们保持与业务逻辑和我们的办公室电网系统的信息了。 显然是有执行这些任务的无数选择,但这里有两个简单的例子来说明如何简单的解决方案,是来之不易。

接下来的时间

在适当命名的这个系列的最后部分第5部分 ,我们将讨论部署这一系统。 我总结了什么教训和我设法创造。

办公室网格计算使用虚拟环境-第3部分

史蒂芬劳埃德沃特金斯 ,周五二○○九年十二月四日下午11点37分

简介

我在一家公司工作,我们运行多个批处理作业处理数据数百万条记录的每一天,我一直在思考所有的机器,围坐每一天做什么最近几个小时。 那岂不是一件好事,如果我们可以利用这些机器,以增强我们的系统处理能力? 在这组文章,我要看看用人办公室的潜在好处使用虚拟化环境。

第二部分的工作,我们看着一台服务器将运行,以及如何工作应配置,以达到同时确保每个作业是没有失败处理量最大的加工。

设置您的工作 - 服务器或跛行

该过程的下一步是设置虚拟工人。 为此,我将使用一个使用VirtualBox的CentOS安装。 我要安装MySQL的PHP上也称为跛行马钱,M ySQL,P HP)SERVERA( 也许是我做这个名字了)已知的服务器。

  • 你的Windows机器上安装的VirtualBox(以下链接)
  • 下载并安装在创建的虚拟机的CentOS(当前版本5.3)

有没有一点我要这个有可能是千的在那里的伟大教程(OK,这里有一个: 创建和Managing CentOS的虚拟机下VirtualBox的 )。 最重要的一点需要注意的是,我想我叫我的虚拟机GridMachine。

至于客户端的虚拟化和操作系统我选择去那里是没有什么大的每一个选择令人信服的理由。 VirtualBox是什么我用我的家用机器,是由三大操作系统的支持。 我选择了一个很好的稳定作为其操作系统CentOS和我用我自己的Web服务器上。 我是在为招聘合适的工具,极大信徒(虽然我申请“用你最快和最简单”的心态在这里),所以如果你的作业系统X上运行的代码更快,更有效地使用,而不是 :)

重要的是确保你的虚拟机使用DHCP,为每一个新的虚拟机,否则将需要单独配置,这是我们不want.By使用DHCP我们并不需要配置网络设置单独的机器工人,DHCP将手为你出的IP。 因此,您可以复制不用担心设置每一个向上(这样可以提高可扩展性和降低工人管理)担心你的虚拟机有关的办公室。

的过程中,你应力求实现将获得一个新的物理机,安装的VirtualBox,然后几乎没有太多的其他部署的虚拟形象。 它可能是明智的设置在不同的子网中所有的工人,使你至少可以看到有多少机器正在运行。 您还需要建立一个长期租赁或租赁DHCP无限你的机器。

如何运行工作的工人

这是一个有趣的领域,并有处理工作的工人数的有效方法。 在这里,我将只讨论两个最明显的:

  • 永远运行脚本:脚本,无论是shell脚本,或PHP脚本执行一次的工作,并作为一个无限循环的一部分运行。 我折扣为一体的脚本崩溃这个方法和你的员工可能会停止运行,而不一些干预。
  • 克龙的脚本执行:每X分钟cron守护进程揭开序幕,以你的脚本调用得到的东西去。 如果没有一些检查,这可能导致您的脚本运行许多工人多份。

我的决定是去用cron这揭开序幕shell脚本每10 minutes.Â我的shell脚本执行以下任务:

  1. 获取进程列表和grep为“PHP”这一点。 如果没有找到,那么继续。
  2. 打电话给你的工作代码,在我的情况下这将是基于PHP的东西
  3. 工人脚本完成其运行
  4. 准备去下一个适当的再打电话

我的bash脚本看起来像下面这样:

  #!/ bin / sh的
如果PS斧| grep的- V GREP | grep的PHP> / dev / null的
那么
    回声“工作正在处理,退出”
其他
    回声“作业没有运行,从现在做起”
     PHP yourJobProcessingScript.php
科幻 

注:回声的几乎是完全没有意义的,但可以帮助旁边的人谁出现时,试图对其进行编辑。

以上是对工人的虚拟机,快速,简单,容易复制到每个新硬件已接收成立。 而“聪明”的电网系统真的没有在可视化的操作系统,它的所有与创建的处理作业,作业配置,在确保作业运行在适当的时候(即当主机空闲的代码)。

设置Windows的初始化工作人员

第一个任务是制订需要从Windows命令行中的虚拟机的命令。 如果你已经安装在默认位置VirtualBox和你命名你的工人GridMachine然后命令需要加载你的工作是:

  “C:\ Program Files文件\日\ VirtualBox的\ VBoxManage.exe”startvm GridMachine 

不过运行在一个“无头”状态,我们需要使用脚本:

  “C:\ Program Files文件\日\ VirtualBox的\ VBoxHeadless.exe” - startvm GridMachine - VRDP =关 

这将启动不带GUI的虚拟机,并​​允许它保存状态正常。 第二个参数关闭RDP,因此不会与Windows RDP冲突,或给你一个关于在端口3389侦听消息。 虚拟机的名称是区分大小写的!

接下来,我们需要设置窗口到我们的工作揭开序幕VM一旦机器被闲置。 要做到这一点(在Windows XP),你需要去开始 - >所有程序 - >附件 - >系统工具 - 如下>计划任务:

计划任务

下一步点击“添加任务计划”所浏览到后面添加一个自定义程序。 导航到您的VBoxManage脚本,然后单击确定。 时间表的任何选项的任务(我们将在一分钟内改变这个)并继续。 后跳过下一个屏幕窗口会问你谁你要执行这个任务,我建议无论是“管理员”或创建一个新的特权用户。 请记住我们不想与机器上的标准人员占干涉任何一点。 点击下一步,检查显示此任务的高级选项。

要在运行文本框末尾加上我们的'startvm GridMachine'字符串,并确保只运行在登录时留下unticked。 访问日程任务安排下,改变下拉的选项“空闲时”,选择的时间你想在机器前必须移动到下一个标签处于闲置状态。

最后的选项勾去掉其中规定停止工作,如果它已经运行X的时间,但打勾的选项停止工作,如果本机已不再处于闲置状态。

计划

就这样,然后对Windows主机设置!

摘要

在这一部分,我们设立了一个虚拟机作为一个工人,以及以何种方式我们称之为我们的工作处理和执行脚本(我是一个PHP脚本)。 从这里我们看一下如何设置窗口的副本,在headless模式启动虚拟机时,电脑空闲,并保存其状态恢复时,用户对机器的使用。 希望在这一点上你看到的是多么简单建立这样一个系统,并渴望得到一些实验将自己!

接下来的时间

第4部分 ,我们将着眼于使用工具,以确保您正在运行的代码和数据源的最新版本,这样得到的结果总是与最新的商业信息和逻辑最新的更新。

办公室网格计算使用虚拟环境-第1部分

史蒂芬劳埃德沃特金斯 ,周五二○○九年十二月四日下午11点23分

简介

我在一家公司工作,我们运行多个批处理作业处理数据数百万条记录的每一天,我一直在思考所有的机器,围坐每一天做什么最近几个小时。 那岂不是一件好事,如果我们可以利用这些机器,以增强我们的系统处理能力? 在这组文章,我要看看用人办公室的潜在好处使用虚拟化环境。

作为一个PHP开发人员,我要使用的工具,我每天使用,即Linux上, MySQL的 ,PHP,VirtualBox和颠覆(SVN)。 但我希望本指南将适应其他语言和技术一样好。

我提供的解决方案将非常松散的基础上,处理我们就需要实现但是在整个文章,这可能不是真的,因为我会改变简单的事情,或产生更有趣的使用场景类型。

这些虚拟化环境将运行在Windows机器上,因为这正是大多数办事处运行。 其中,加工,办公室机器做不应该干涉与使用这些机器的工作人员,应该不需要在机器维修,并很容易地部署到新的机器,因为它们变得可用。 此外,新的虚拟机应该不需要任何额外的配置,因为这大大降低了可扩展性和易用性在该网格系统可以延长。

为什么要部署Office网格计算?

首先,你可能会想,为什么不使用诸如云计算资源亚马逊的EC2平台 那么原因可能有几个,例如:

  • 你不会委托某些数据到云计算环境
  • 你不能把一个云计算环境的法律上的原因(如数据离开国家)可能出于法律原因,如NHS记录,某些数据。
  • 你要保持你的加工单位的密切,并已超过了硬件的完全控制太
  • 您没有该项目资金运行云实例
  • 你的办公室没有一个到互联网的连接,因此它不可能使用云资源
  • 你不喜欢下雨,雨云层建议,因此您保持远离

我敢肯定列表可以继续,但我认为这是现在足够了。

优势的Office计算网格

那么,让我们做一些数学(和真正的物理风格让做一些清扫假设)。 想象一下,你有大仡处理服务器上运行100天的就业机会。 在你的办公室有50台机器是闲置的每天16小时,其中每台机器的10%作为您的仡处理断绝强大。 (这里是所有的结果四舍五入到低估的性能提升)。

因此,1台* 10%的功率在空闲时间* 2 / 3时间= 0.067即1台式机处理可以处理每天6充分的就业机会

如果现在这个规模达15闲置桌面需要每天处理的职位作为主处理服务器一样。

因此,在我们的50台机器假装办事处,我们可以增加一台服务器的处理能力,以我们的4个全处理服务器 ,或者我们可以处理100 400个职位 ,而不是一天

请注意,因为没有在新的硬件投资你的公司刚刚增加了批量处理能力4倍 潜在的你要增加你的电源使用,但大多数办公室我去过的机器环境是一般通宵反正左,所以你可以看到一个绿色的倡议的。

其他优点还意味着,在新的投资(或更新)处理服务器可以被延迟,如果你的办公室机器已经足够,当你提高你的办公设备电源您的办公变得更加强大的电网自动。

技术

你需要什么? (或更正确地我怎么使用):

  • 空闲办公室机器(在我的情况下,旧的Windows XP的笔记本电脑备用)
  • VirtualBox的(或其他虚拟化客户端软件)
  • 一个用PHP,MySQL的runningÂ虚拟机上运行OS切下来,我打电话我LIMP这些服务器 :)
  • 乔布斯运行
  • 作业服务器(可以是另一个虚拟机的地方)

典型工作

该系统的设计运行工种如下:

  • 系统接收到的数据后,我们需要匹配,并返回结果列表
  • 匹配包括检查/搜索数(相当静态)数据源
  • 从数据源的结果可能需要进一步验证,合并,以响应结果来源的补充数据检查
  • 数据一起返回匹配的记录,充分验证和处理
  • 内的每个工作纪录,是其他独立

所以基本上我们正在寻找工作,需要运行的数据库查询和一些数字运算,在一个商业环境相当典型案例的混合物。

电网解决方案不仅为处理这种类型的工作有利。 基本上,任何可以被分割为独立的单元过程可以并行运行。 见的例子和更多信息此维基百科: 网格计算 ,而是一个著名的两个例子是SETI @ HOMEBIONC 有运行计算网格框架,这些都是值得研究的。

我们会怎样实现?

通过这些文章结束时,我希望表明,部署办公室电网不必花大钱或费时。 我将讨论:

  • 建立作业控制制度,岗位配置
  • 创建一个适当的处理虚拟机
  • 如何设置在Windows机器上的系统
  • 确保您使用的是最新的代码和数据
  • 部署和基准
  • 展望未来

我会建设(OK我建,然后写了这个)一个示例应用程序来测试在本地使用Windows XP和我的'GridMachine“虚拟机机的概念。 我的工作控制服务器将是我的主要机器,运行Fedora 11中

这丝毫不意味着表现出强大的系统是完全工作,其目的更多的是示范和讨论表明,这些东西可以在相当短的时间空间和较小的代价实现的。 请随时给我任何意见,更正,或改进,我会尽我所能,保持更新以匹配这篇文章。

接下来的时间

第二部分首先,我会在作业控制系统来看,以及研究如何工作应配置,以达到同时确保每个作业是没有失败处理量最大的加工。

办公室网格计算使用虚拟环境-第2部分

史蒂芬劳埃德沃特金斯 ,周五二○○九年十二月四日下午11点23分

简介

我在一家公司工作,我们运行多个批处理作业处理数据数百万条记录的每一天,我一直在思考所有的机器,围坐每一天做什么最近几个小时。 那岂不是一件好事,如果我们可以利用这些机器,以增强我们的系统处理能力? 在这组文章,我要看看用人办公室的潜在好处使用虚拟化环境。

第一部分我介绍了系统和技术,我将使用以及讨论了可能的原因,你为什么会想要建立一个办公室电网的一些概述。

作业控制

如果你要运行的工作,然后你会需要一些方法来管理它们。 你的任务控制系统(根据您的作业服务器)的需求,真正做到深思熟虑之前,甚至试图运行一个办公室电网出来。 那么首先,什么是控制系统的工作任务:

  • 在从手出工作人员的要求
  • 告诉工人什么类型的工作运行
  • 跟踪工作
  • 确保工作只运行一次
  • 工人提供就业数据,或者至少告诉他们在哪里得到它

该系统还需要进行扩展,一个解决方案,现在工作在一个单一的情况下可以延长至运行作业几种类型的企业认为在网格解决方案的价值。 例如,可能会获得优先就业机会,超过一个作业类型可能存在(即几个代码库),最终你甚至可以运行多个不同的工作是为每个作业类型优化机器(虽然,它摆脱了“普通工人走“想法)。 总是试图对未来系统开发时认为,短期目标可导致长期挫折和更多的发展时间。

作业服务器

我们将需要控制的地方,从我们的工作,这应该是只在您的网格系统,有一个固定资源定位器,是一个IP地址,主机名称,URL(使用内部DNS)等,这是因为工人需要知道在哪里找工作,工人们需要找到作业控制系统(不是作业控制系统找到工人)。

作业服务器本身并没有真正有一个复杂的任务(在基本制度无论如何),它需要存储大量的工作清单,不可收拾的工作,得到的结果,随后他们存储日后检索。 如何将这些部件(如“不可收拾工作”)被定义可以是很基本的。 后来,我们可以扩展系统,包括一个管理界面,添加,编辑,删除,暂停工作,但这种超越这项工作的。

没有任何理由再你的作业服务器无法在虚拟机内的主处理服务器上运行的前提是它不流失,从它的资源太多。 但是这项工作确实需要服务器的高可用性,如果出现故障在星期五晚上你会失去了处理整个周末,你可能花费了几个星期的处理时间价值(相对于主服务器进行处理单) 。 您可能要考虑将在负载平衡环境中高可用性的作业服务器。

基本设置

对于我们的工作服务器的基本设置将包括什么我打电话,我LIMP一台服务器 (也就是马钱, 米ySql,P HP)。 该代码将运行在THEA工人实际工作了哪些工作可以通过交互运行与控制系统数据库的工作。 后来,我们能够创造,而不是让工人自己的辛勤工作了一个Web服务工作,实际上手,但现在我们将继续使用KISS原则 (保持简单,愚蠢!)

因此,让创建三个MySQL的表来处理工作。 这将是'工作','jobRecords`和`jobResults`。

工作表 在这里我使用SQL好友向伟大的小替代phpMyAdmin的只是因为它更容易在CentOS安装(对于其他人看到: 10到phpMyAdmin大的替代品

此表由5个简单的领域,

  • ID:唯一标识工作
  • 名称:客户可参考,或任何其他标识号
  • 状态:你需要知道在哪里工作,例如是
    • 0:未开始
    • 1:拿起
    • 2:已完成
  • started_by:谁开始做的工作? 这是必须的,但不完全是一个不错的。 我建议他们网络上的IP地址跟踪工人
  • started_at:什么时候工人开始工作呢? 通过跟踪,但没有在X的时间,我们知道我们需要拿起工作再次开始由另一名工人加工完成的作业。 工人可以停止处理/去任意数量的原因,停电,死机,网络损失等离线

这是很容易如何表可与一些其他领域扩展,以便统计跟踪,结束时间列,看看工作了多长时间,一个计数器,看看有多少工人拿起作业(显然这需要趋向1),工作重点,名单可以一直开下去。 在更复杂的工作方案将有可能指定多少内存工人将需要访问(因此只使用合适的工人),甚至是什么类型的工人将是必需的。

让我们添加一些示例工作:

例如工作

下表又是很容易理解,这些都是我们的工作记录。 他们都与表主要工作由一列`jobs_id`。 而利用这个表了十分的数据,您需要提供给你的工人依赖,让做一个很简单的例子,我们有四个列:

  • ID:记录编号
  • 名称:人的名字
  • 地址:人的地址
  • jobs_id:作业ID,这个记录是与

第三个也是最后一个表结果表组成,它有许多相同作出了我们的记录表,并与另外的一些列可能是记录表的一部分:

  • job_record_id:链接结果的工作表
  • 结果:结果数据

...那就是你的作业控制所需要的! (albeit at a very basic level) In my case I'm pointed to another table where my data to process was located, but this could just as easily been a file, parameters to run simulation code, you name it.

Selecting a job

如前所述,工人会为我们做现在我们的工作管理,所以我们需要真正做的是找到一份工作,需要处理和获取信息。 我们怎么做呢? 挑好了我们的工作选择标准和找工作,在SQL我做了以下几点:

  1. 采取任何未标记为完成,但我们的工人和重置(代替一个标识符__ME__,最简单的将是IP地址)工作:
      UPDATE``SET`工作状态'= 0 WHERE`地位`和`started_by = 1'= __ME__; 
  2. 使用我们的工作选择标准,选择一份工作,告诉控制系统,这是工人处理它:
      UPDATE``SET`工作状态'= 1,`started_by`= __ME__,`started_at`= NOW()WHERE`地位`= 0或
     (`地位`和`started_at = 1`> DATE_SUB(NOW(),间隔X小时))由`ID`ASC令; 

    通过抓尚未返回X的时间,我们确保所有的工作都在一个崩溃或去AWOL运行结果作业工人的事件。

  3. 下一步的工作抢了自己的记录随后的详细信息:
      SELECT * FROM``WHERE`started_by工作`= __ME__ LIMIT 1;
     SELECT * FROM`WHERE`job_records`ID`= __JOBID__; 

当我们插入我们的工作结果的记录和标记为完成任务的完成。 记得作业可以暂停/恢复允许在任何时候为一些脚本的鲁棒性。 它可能是通过更新任务挂起作业控制系统的一半,所以检查记录工作的数量和保存回作业控制系统结果的数量将是一个明智之举。

此外,虽然这演示了如何选择和作业可以从一个SQL查询帧你确实应该管理abstracting作业控制,因此,如果您决定转而使用Web服务,基于文件系统, XML ,或任何其他多项制度,也不会影响它上面代码。

人才配置

接下来的方面要考虑的是作业的大小和配置。 通过与作业的配置可以玩我们之间,求取一个速度,处理复制和可靠性出色的平衡。 以一对夫妇奥法的情况:

  1. 乔布斯以1日当天跑:这意味着你的员工需要15天时间来处理每一个工作(记得10的时间2/3rds%的电力)。 这显然​​不是一个明智的配置,你的工作的大小是太大了! 这将需要至少两倍的时间来处理工作应在初始工人去AWOL(时间拿起它没有返回结果加后处理时间)。 在一个理想的你至少有一个完整的职位容易被各个长期闲置期末清除 ,这样你保持工作结束,在最坏的情况下,工作ticking将采取两天的过程应该是第一个失踪。
  2. 乔布斯需要1分钟跑:这意味着你的员工需要大约15分钟,运行每个作业。 虽然这可能最初似乎理想,您将获得更多的工作在午餐时间处理,茶点,会议等在这种情况下使得系统中的其他方面的压力,并介绍自己的问题。 例如,首先你的设置/处理时间比是要去对倒,因此失去系统的效率。 您的网络将是不断流作业信息的各种工人洞令人沮丧的工作人员谁是他们的日常工作​​。 你还打算把你的作业处理服务器更紧张,因为它炮制出很多很多的工作小块定期地段。 最后,在这种情况下,如果你的工作服务器出现故障你要创建一个更大的工作尚未完成,而庞大的工作日志可以回来继续处理暗藏不知道该服务器的工作遇到困难。

在现实中有没有人会为你的网格设置理想的配置,在很大程度上取决于可用的资源,作业,作业周转时间的要求,网络功能等类型。 然而,一些准则是:

  • 大小工作,使每个工人可以通过至少3-4在15小时内的工作(最长可能空闲时间)
  • 与职务大小播放,使安装时间变得相当微不足道的处理时间(以铭记上述点)。
  • 如果作业没有在双量的时间(也许更少),你期望它来完成它承担完成了其擅离职守,并开始处理它与另一名工人。 这意味着你可能要等上三倍的长度为它工作正常完成(可能更长,如果后续作业失败)。 您可能要缩短这个时间,但要注意不要减少太多,否则可能会开始复制定期处理任务
  • 乔布斯应该尽可能独立外部需求。 作业服务器,例如,只应接触的开始和结束的每一项工作。
  • 不饱和您的网络,这将有两个负面影响,你会发现白天的工作人员使用网络沮丧和问题都可以通过连接超时的问题只会变得更糟为您扩展您的格子经验。
  • 确保作业可以运行在您的工人。 如果工作过于密集的内存或磁盘空间密集的工作将开始中止,唯一你会发现是在没有真正原因处理的工作数量下降。

作业的提交结果

当提交一个作业的结果,重要的是检查结果没有被提交的另一名工人,特别是如果目前的工作已经有一段时间处于休眠状态。

当结果提交确保比赛结果的数量范围内作业的记录数。

如前所述,并不能过分强调,建设成为工作结果提交检索和容错性。 工人们可以(而且很可能会)进入挂起模式在最不方便的时候,这需要被照顾。 也再次抽象离开你的结果提交将有助于满足您的作业控制系统更容易应付未来的变化。

摘要

在此sectionÂ我们看到什么是作业控制服务器需要做,如何得到一个非常基本的系统设置。 我们讨论了如何检索从控制系统的工作以及如何最好地配置工作,以获得最大的网格系统的办公室。 要完成,一个段落或提交结果返回到作业控制服务器2已提交。

  • 作业控制服务器管理工​​作,所有工作单位,确保完成
  • 通过提炼你的工作选择/结果提交我们可以改变,没有什么问题的控制服务器技术
  • 配置您的工作,以确保它们运行没有把你的网络基础设施的压力太大了快速,高效,无重复处理定期任务。
  • 确保你建立容错和到您的程序错误checkingÂ,工人可以暂停,恢复和最不方便的时候。 记住要检查结果已经由另一名工人提交。

接下来的时间

第三部分 ,我们将创建我们的虚拟加工机,并设置了我们的Windows机器成为空闲时间的工人。

办公室网格计算使用虚拟环境-第5部分

史蒂芬劳埃德沃特金斯 ,二○○九年十二月四日(星期五)11:03 PM

简介

我在一家公司工作,我们运行多个批处理作业处理数据数百万条记录的每一天,我一直在思考所有的机器,围坐每一天做什么最近几个小时。 那岂不是一件好事,如果我们可以利用这些机器,以增强我们的系统处理能力? 在这组文章,我要看看用人办公室的潜在好处使用虚拟化环境。

第4部分 ,我们看着使用工具,以确保我们正在运行的代码和数据源的最新版本,这样得到的结果总是与最新的商业信息和逻辑最新的更新。

Pre-Deployment

Before deploying your grid system if there's one thing you do and one thing alone it's benchmark your current system ! No matter what you tell colleagues about how much extra work your system is going to do unless you have numbers to back this up your guarantees are nothing. 所以,

  • 有多少纪录可以在处理目前? 每一天? 每小时?
  • How long does it typically take to turn around a job?
  • 多少容量更大,你呢?

There's also additional questions:

  • 如果您的服务器进行处理(或你的处理一台服务器)出现故障这将如何影响你的能力,你会被削弱?
  • 你希望有什么优势/希望得到来自电网系统?
  • 你们的办公室机器运行的工作能力吗?
  • 是您的(或你的工作被转换)工作在这种运行方式?

最后一个主要的一点是要采取任何像这样重大的改变你的时间。 更新您的处理代码以使用新的方法,基准试。 可能设置了处理服务器运行虚拟机后,服务器将所有的处理只是另一名工人(只是一个非常强大的一个相对)。 允许新的进程来解决。

部署

我的建议是一个周末走进办公室弹出执行所有的安装和设置。 Do this just before a fortnight's holiday and leave so other poor chap to deal with the consequences… maybe not…

对于这样的系统部署的需求是缓慢的。 尽管它是相对简单的设置这个系统将影响整个办公室的基础设施(以及数字之一)。 首先,推出了一次夫妇的机器,监控网络流量,如何在主机上执行工人每天的日常基础。 您可能需要改变你的发现在回应你的工作配置。

一旦系统有(比方说10%的办公设备,即5)随时监控网络流量和主机performance.Â下再次基准几台机器解决,您现在应该处理比你的第一个基准33%以上的就业机会。 检查是这样的话,或者说,你至少是在这个球场。 如果不是,调查是怎么回事之前就移动。 Repeat this cycle until you happily have all office machines running without killing individual machine performance or grinding your network to a standstill.

在任何时候保持基准,即使在所有部署进行的。 如何检查新代码更新会影响你的系统速度,检查所有工人都在报告和处理工作。 慢慢(很慢)增加你的工作配置,以获得你的员工和网络是最好的。

住手!

如果你想阻止在运行一段时间后你的员工? 他们都在那里运行,再生,并尽力处理像饥饿的昆虫数据。 答案似乎是显而易见的,但它的价值增加,以防万一其忽视。 简单的编辑与出口(0)您的处理脚本或死亡()或其他一些语句来杀死你的处理工作。 An important reason why we always try to update to the latest processing script before any run!

演示系统

为了写这篇文章的短集我创建了一个很小的以展示的技术和方法。 I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. 并不意味着我有没有出去和饱和的交通整个办公室和我也没有接触到普通工作人员的电脑,看看主机性能受到影响。

我的演示系统确实很谦虚。 我用我的桌面设置为作业控制服务器上。 在此我已经安装MySQL的服务器上安装一套作为主在复制, PHP ,A和SVN连接通过阿帕奇 (通过工人的VM访问)。

然后我创建在VirtualBox上一个6岁的Windows XP的笔记本电脑一台CentOS工人的机器。 我设置为后复制到本机的虚拟机指定的计划任务,让它去。

虚拟机成立,PHP,颠覆和MySQL。 我检查了我的工作从命名控制服务器库“工人”的一个分支,并确保它可以更新使用“SVN更新”。 接下来,我安装MySQL作为一个奴隶,并检查这些数据被复制的作业控制服务器从MySQL下至工人VM。 毕竟这是我设置的bash脚本和cron作业。

我去处理脚本基本上沿着此线(很简单的东西):

  • 阅读在名称字段
  • 算表中的类似名称从虚拟机中的数据源数量
  • 算作以上,但分裂名称空间(即用的名字,中,姓)的名称数量
  • 重复这个过程1000次

每个作业大约需要20分钟运行。 有一次,我打开窗户上的笔记本电脑的工人VM若干份,并观看了工作检查由工人IP地址,每个关闭。 在这一点上我也证实了自动重新启动的复制。

离开笔记本电脑闲置在开始处理来自服务器作业工人作业控制的结果。 当恢复笔记本电脑的使用有一个约30-60秒的延迟,这是一个时间和相当数量的工作人员将需要作出意识到,他们的机器可能会很短,而暂停时,返回到本机。 较新的机器可能没有这个长时间的停顿。 而对这些设备进行处理空闲期间将更多的受益金额超过工作人员的成员不必等待一个上午就在他们的机器到达一个短时期(比如1分钟)(我经常等待更长的时间,这为Windows Defender的更新发生)提供的,他们意识到这一点了(有用的时间抢了一上午的咖啡!)

总的来说,我觉得有信心,我已经展示了可用于创建这样一个系统的技术。 我已经表明,这种制度不上一个(非常)小规模,多一些尝试可以扩大利用办公室的机器上的资源的工作。 如果我不拿地做这点我非常有兴趣知道/时看到别人做。

Conclusions / Evaluation

下一个明显的步骤将是真正得到一个真实的例子,并开始部署在办公室环境中像这样的系统,看看会发生什么。 要求企业实施无踪迹炽烈的公司,这证明了技术和效益可能会有点困难。 网格/分布式计算是非常流行的是一些圈子,并有一些(BIONC,SETI @ HOME,折叠@家等),大型应用程序。 I did not, however, find a smaller scale and simple system like this in my searches that could be rolled out within an office environment.

我创建了一个基本上是免费的系统使用几乎任何职位大多是开放源码软件和工具。 这些技术基本上表现,并显示执行和正常工作。 希望我表明,没有太多的工作,一个非常简单的设置你可以部署一个办公室网格计算系统,该系统功能强大,价格便宜,A和所有在同一时间可扩展性。

Once a system is up and running there is almost no end to the amount of customisation and improvements you can make. 例如统计/基准可以很容易地添加显示了这种制度值得每一天。 新机器可以快速,容易地加入,当他们与现有的硬件处理能力的升级作为支撑你的到来。

我希望您喜欢阅读这一系列文章和给你上运行的办公网系统深思。 这里提出的解决方案并不一定适用于所有情况,但应该适应,让您让您的数据处理通过使用自己的解决方案。

请随时给我任何意见,更正,或改进,我会尽我所能,保持更新以匹配这篇文章。













由全景主题 Themocracy

11访客在线
6 guests, 5 bots, 0 members
今天最多访问:27日上午10点53 UTC
本月:52在18-06-2011 03:11上午UTC
今年:于28-03-2011 10:40 PM UTC 130
所有的时间:在28-03-2011下午十点40 UTC 130