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

,星期四2010年1月7 10:50 PM

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

它的一切都很好指定您的网页在一个INIXML文件,但在某些时候,你会改变在您的网站页面,你想作为一个菜单,地图,或将包括在您的面包屑的一部分。 因此,我们需要做的是我们Zend_Navigation容器在运行时添加页面。 这个例子是在添加新闻,博客文章,或页的意见,等等。

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

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

,星期三第六届月1日2010 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 =网站地图

可以看出,通过创建一个适当的控制器(如我的Sitemap索引中的控制器,地图行动)的行动为输出的示例代码:

 < PHP
类IndexController
    扩展Zend_Controller_Action的
 {
     / **
      *呈现基于Zend_Navigation设置一个sitemap
      * /
    公共的功能sitemapAction()
     {
    	呼应 - >查看 - >导航() - >地图();
    	 $  - >视图 - >布局() - > disableLayout();
    	 $> _helper>的ViewRenderer> setNoRender(真);
     }
 }

网站地图可以快速轻松地使用Zend的石膏 Zend_Navigation ,一个伟大的快速教程(一般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('引导')){
    
    	         $ CONFIG = $引导 - > getOptions();
    
    	         (使用isset($配置[$模块] ['资源'] ['布局'] ['LayoutPath的'])){
    	            美元LayoutPath的=
    	                  $配置[模块] ['资源'] ['布局'] ['LayoutPath的'];
    	             $> getActionController()
    	                  - >中调用getHelper(“布局”)
    	                  - > setLayoutPath($ LayoutPath的);
    	         }
        	 }
         }
     } 
  3. 最后自举的动作助手:
      ...
         / **
          *每一个模块的基础上设置布局脚本
          * /
        保护功能_initLayoutHelper()
    	 {
    	     $本 - >引导(“frontController);
    	    美元布局Zend_Controller_Action_HelperBroker :: addHelper(
    	        新Pro_Controller_Action_Helper_SetLayoutPath());
    	 }
     ... 

学说:DATETIME的默认吧()

,2009年十二月三十日(星期三)下午6:30

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

架构中的YAML的文件只需做到以下几点:

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

另一方面如果你不想`的updated_at'列,你可以使用下列内容:

消息:
   ACTAS:
     timestampable:
      创建:
        名称:created_at
        类型:TIMESTAMP
        格式:YMD H:我:S
      更新时间:
        残疾人:真
  列:
    编号:
      类型:整数
      主:真
      自动增量:真
    字符串名称:(255)
    电子邮件:字符串(300)
    消息:字符串(2000)

PHP设计模式-观察者模式

年12月29日星期二2009 10:02 PM

我一直在阅读的Head First设计模式 最近已决定写一些PHP的例子为自己的利益的模式。 第一个,我已经决定代码是Observer模式 Observer模式的正式定义是:

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

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

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

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

,二零零九年十二月四日(星期五)下午11:59

介绍

我在一家公司上班,我们许多批处理作业处理数据每天数以百万计的记录,我一直在想最近所有的机器,周围坐的每一天做几个小时没有运行。 如果我们可以使用这些机器,以增强我们的系统的处理能力,岂不是好? 在这组文章中,我要去看看用人办公室电网使用虚拟环境的潜在好处。

第三部分中,我们创建我们的虚拟加工机,并成立窗机成为空闲时间工人。

运行最新的代码

不可避免创建您的工作人员的业务逻辑,将改变后,错误会被发现,更快,更高效的代码将产生,从而使处理数据使用你的工人,周围坐着老臭代码 那么我们如何确保我们总是使用最新和最伟大的版本我们处理脚本?

有几个很容易简单的方法,我们可以做到这一点的伎俩,然而,在实现这一目标,以减少处理能力和网络流量。 让我们用最简单的解决方案,并开始慢慢提高了几个迭代。

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

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

  #!/ bin / sh的
如果PS斧| grep的-V的grep | grep的PHP >的/ dev / null的
然后
    回声“工作目前正在处理,退出”
其他
    呼应“作业未运行,从现在开始”
     CD /路径/ / /复印工作
     svn update的
     PHP yourJobProcessingScript.php
科幻 

现在我们可以肯定的,每次运行时,我们肯定运行最新的代码。 我们要确保我们的代码库更新每一个时间,我们执行的运行,减少网络流量,只在我们的网络传输文件的区别。

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

使用最新的数据

如果您的作业处理,在某些时候使用的数据源,那么这些将要更新过。 除非你叫您的数据源上非常罕见的基础上,你会涌入与交通网络尽快为你的工人开始运行停顿带来的一切。 对于我的解决办法,我决定,我想我与我的虚拟机的数据源,周围移动。

握住你的马有!如果我的数据源是巨大的? 嗯,这真的是我们谈论了多少数据的情况下? 它可能是更具成本有效的安装到每一台机器的一个额外的更大的硬盘驱动器,比购买一个额外的服务器进行处理。 这是一个问题的预算和业务决定。 它也许您的数据源是如此之大,它只是不可行保持在您的工作机的数据量。 在这种情况下,你会做什么? 那么我们可以看看在调用本地数据服务器,但是这可能会导致网络问题。 在这种情况下,如该网格系统可能成为不切实际的,包括在您的办公环境。 这也可能是替代性的运行策略,例如,你可以看看,晚上八时至上午六时调用您的工作人员每天晚上和/或限制的数据源请求。

上让移动100GB的数据说,我们的数据源量。 是的,是一个相当位数据,在网络上更新移动。 我们如何确保我们在这种情况下,最新的数据副本吗? Rsync是一种可能性,但我个人认为作业处理服务器上运行您最新的数据源,并设置作为主复制(用一个漂亮的长滨日志)这可能是要走的路:

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

这是如何设置我的演示服务器。 设置复制,我也跟着上设置复制 MySQL网站(指南),并在20分钟内,我有我的头文字工作者,复制作业控制服务器的数据集。 复制设置和过程,对于每一个额外的工人工作,每次当VM被复制。

总结

在本节的文章中,我们看起来简单,无痛的,它是迄今usingÂrsync或subverion(SVN)的的,做的工作和减少在同一time.Â的网络流量,让您的处理代码,我们还讨论了如何允许它滴入每个工人,以保持您的数据源的信息最新。 因此,我们面积,确保我们保持在我们的办公室电网系统的业务逻辑和信息。 显然是有无数的替代品,来执行这些任务,但这里是两个简单的例子来证明的解决方案是多么容易来。

下一次

在这个系列中,恰当地命名为第5部分的最后一部分,我们将讨论部署这一系统。 我会总结所学和我设法创造。

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

,四日(星期五)十二月2009 11:37下午

介绍

我在一家公司上班,我们许多批处理作业处理数据每天数以百万计的记录,我一直在想最近所有的机器,周围坐的每一天做几个小时没有运行。 如果我们可以使用这些机器,以增强我们的系统的处理能力,岂不是好? 在这组文章中,我要去看看用人办公室电网使用虚拟环境的潜在好处。

第2部分 ,我们看着一台服务器将运行的工作,工作应该如何进行配置,以达到处理量最大,同时确保每个作业无故障处理。

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

在这个过程中的下一步是建立虚拟的工人。 为了这个,我要去使用CentOS的安装使用VirtualBox的。 我要安装MySQLPHP服务器,又称跛行马钱,M ySQL,P惠普)SERVERA(我可能这个名字)。

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

我这有可能是1000“有伟大的教程(OK,这里有一个:小号下VirtualBox的创建和ManagingÂCentOS的虚拟机 )没有意义。 我想重要的一点要注意的是,我叫我的虚拟机GridMachine的

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

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

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

如何运行工人的工作

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

  • 永远运行脚本:脚本,它是一个shell脚本,或一个PHP脚本执行一次对工人和运行一个无限循环的一部分。 我贴现作为一个脚本的崩溃这种方法,可能你的工人将停止运行,而不某种干预。
  • cron守护进程cron的脚本执行:每隔X分钟揭开序幕,以你的脚本的呼吁得到的东西去。 如果没有一些检查,这可能会导致很多工人脚本运行的副本。

我的决定是用cron去揭开序幕的shell脚本每10minutes.Â的我的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文件\ Sun \中的VirtualBox \ VBoxManage.exe”startvm GridMachine 

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

  “C:\程序文件\ Sun \中的VirtualBox \ VBoxHeadless.exe”startvm GridMachine - VRDP =关闭 

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

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

计划任务

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

运行文本框的末尾添加“startvm GridMachine'字符串,并确保运行,只有当记录在左取清选取3.1。 访问日程任务和改变时间表下拉选项“空闲”时,选择的时间,你想在机器闲置,然后再移动到下一个标签。

最后的选项勾去掉其中规定停止任务,如果它已经运行的X时间,但不打勾的选项,以停止任务,如果机器不再是闲置。

时间表

这是Windows主机设置!

总结

在这一部分中,我们已成立了一个虚拟机作为一个工人,以及调用和执行我们的工作处理脚本的方式,我们(给自己一个PHP脚本)。 从这里,我们来看看如何建立我们的Windows副本在headless模式启动虚拟机的计算机变为空闲时,保存其状态,当用户恢复使用机器。 希望在这一点上,你将看到它是多么简单,设立这样一个系统,并渴望得到一些实验自己!

下一次

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

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

,四日(星期五)十二月2009 23:23

介绍

我在一家公司上班,我们许多批处理作业处理数据每天数以百万计的记录,我一直在想最近所有的机器,周围坐的每一天做几个小时没有运行。 如果我们可以使用这些机器,以增强我们的系统的处理能力,岂不是好? 在这组文章中,我要去看看用人办公室电网使用虚拟环境的潜在好处。

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

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

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

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

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

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

我敢肯定,这个名单可以继续,但我认为这是足够现在。

一个办公室计算网格的优点

好吧,让我们做一些数学(在真实的物理风格让一些笼统的假设)。 试想一下,你有大的的仡处理服务器上运行100每一天的工作。 在你的办公室有50台机器,每天16小时处于闲置状态,这些机器是只要你仡处理SEVER强大的10%。 (四舍五入到这里所有的结果都低估的性能提升)。

因此,1台* 10%的电力* 2/3的时间= 0.067 1,即在桌面空闲时间处理, 每天可处理6的全面工作

如果你现在扩展这件事,它需要15闲置的台式机,每天处理尽可能多的就业机会,作为你的主服务器进行处理。

因此,在我们假装办公室50台机器,我们可以增加1服务器我们4个全处理服务器的处理能力,或者我们可以处理400每一天的工作,而不是100。

通知,贵公司已没有新的硬件投资只是增加其批量处理能力的4倍 潜在的,你要你的用电量增加,但大多数办公环境,我去过机一般都留下过夜了,所以你可以看到作为一个绿色倡议。

也意味着,在新的投资(或更新)处理服务器可以被延迟,如果你的办公室机器充足,为您提高您的办公设备的电源,你的办公室网格变得更加强大,自动等优势。

技术

你需要什么? (或更正确,我没有什么用):

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

典型的工作

,该系统被设计为运行工作的类型如下:

  • 系统接收到的数据,这就需要我们以匹配并返回结果列表
  • 符合条件的涉及检查/寻找数(相当静态)的数据源
  • 从数据源的结果,可能需要进一步验证,合并,其他数据源的检查结果
  • 数据返回匹配的记录,充分验证和处理
  • 内工作的每个记录是独立的休息

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

电网解决方案是处理这种类型的工作,不仅有利。 基本上可以并行运行,任何分裂过程可分为独立单位。 为例子和详细信息,请参见本维基百科: 网格计算 ,但几个著名的例子是SETI @ HOMEBIONC 有运行计算网格框架,这些都值得探讨。

我们会实现吗?

通过这些文章的最后,我希望部署办公网格,不需要非常昂贵或费时。 我要讨论:

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

我会大楼(我建的,然后写这)一个示例应用程序来测试使用Windows XP和我GridMachine“虚拟机上的本地机的概念。 我的作业控制服务器将成为我主要的机器上运行Fedora 11中

这绝不是为了展示一个完全工作的强大的系统,它意味着更多的示范和讨论显示,这些东西可以在相当短的时间空间,在较小的代价实现。 请随时给我任何意见,更正,或改善,我会尽我最大努力保持更新以匹配本文。

下一次

第2部分 ,我会开始在寻找工作控制系统,并考虑工作应该如何进行配置,以达到处理量最大,同时确保每个作业无故障处理。

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

,四日(星期五)十二月2009 23:23

介绍

我在一家公司上班,我们许多批处理作业处理数据每天数以百万计的记录,我一直在想最近所有的机器,周围坐的每一天做几个小时没有运行。 如果我们可以使用这些机器,以增强我们的系统的处理能力,岂不是好? 在这组文章中,我要去看看用人办公室电网使用虚拟环境的潜在好处。

第1部分中,我给了我将使用以及讨论一些潜在的原因,为什么你想创建一个办公室电网系统和技术的概述。

作业控制

如果你将要运行的作业,然后你会需要一些方法来管理他们。 你的作业控制系统(作业服务器)需要真正深思熟虑之前,甚至试图运行办公室电网。 所以,首先,什么是作业控制系统的任务:

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

该系统还需要扩展,一个解决方案,适用于在一个单一的情况下,现在可以延长运行几种类型的业务工作,看到在网格解决方案的价值。 例如,作业可能会获得优先事项,可能存在一个以上的作业类型(即几个代码基地),最终你甚至可以运行多个不同的工作,优化为每个作业类型(虽然不从“一般工人的机器'的想法)。 总是尝试开发系统时,思考未来,短期视力可导致较长期的挫折和增加开发时间。

作业服务器

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

作业服务器本身并没有真正有一个复杂的任务(无论如何)的一项基本制度,它需要储存工作清单,手出来工作,收到成效,并随后它们存储供以后检索。 如何定义这些部件(如“工作”失控),可以是很基本的。 后来,我们可以延长系统包括一个管理界面,添加,编辑,删除,暂停工作,但这是超出这个练习。

有没有任何理由,那么你的工作服务器不能是一个虚拟机,主要加工提供的服务器内运行,它不会消耗太多资源。 然而,作业服务器需要高可用性,如果上周五晚上,你将失去整个周末的处理,可能耗费您值得一两个星期的处理时间(时相比,你的主要处理服务器单独) 。 你可能要考虑把你的工作服务器高可用性负载平衡的环境。

基本设置

为我们的工作服务器的基本设置,包括我打电话我LIMP服务器 (这是马钱ySql,磷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:ID记录
  • 产品名称:人的名字
  • 地址:人的地址
  • jobs_id:这条记录链接到作业ID

第三个和最后一个结果表中的表组成,它有很多相同的使我们的记录表,并与另外一些列可能的记录表中​​的一部分:

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

......,这一切你需要的作业控制! (尽管是在一个非常基本的水平),在我的情况,我指出,我的数据处理另一个位于表,但是这可以很容易地文件,参数运行仿真代码,你的名字。

选择工作

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

  1. 采取任何不标记为完整,但我们的工人的工作和重置(替换同一个标识符__ ME__,最简单的将是IP地址):
    更新`工作`设置'状态'= 0'状态'= 1,`started_by`= _ ME__; 
  2. 使用我们的工作选择标准,选择工作,并告诉工人,这与它打交道的控制系统:
     更新`工作`设置'状态'= 1,`started_by`= _ ME__,started_at`=现在()'状态'= 0或
     (`地位`1`started_at`> DATE_SUB(现在(),间隔x小时))ORDER`ID`升序; 

    通过抓工作,但没有返回结果在X时间,我们确保所有的工作都是在运行崩溃或擅离职守工人的事件数量。

  3. 下一步抢详情记录本身的工作:
     选择*从`工作`WHERE`started_by`= __ ME__极限;
    选择*`job_records“``ID`= _ JOBID__; 

作业完成后,我们插入了我们的结果记录和标记为已完成的工作。 请记住,作为作业可以暂停/恢复随时让一些在你的脚本的健壮性。 这可能是任务中途暂停通过更新作业控制系统,使检查工作的结果保存到作业控制系统中的记录数量,将是一个明智之举。

此外,虽然这表明如何工作可以选择从一个SQL查询帧确实应该管理的控制,使抽象的工作,如果你决定切换到使用一个Web服务,文件系统, XML ,或任何其他多项制度,它不会影响到它上面的代码。

工作配置

接下来要考虑的方面是工作的大小和配置。 玩作业配置,我们可以取得良好的平衡之间的速度,复制过程和可靠性。 以一对夫妇OFA方案:

  1. 工作1天,每运行,这意味着,你的工人需要15天时间来处理每个作业(记得当时2/3rds的10%的电力)。 这显然​​不是一个明智的配置,你的工作规模是太大了! 这将需要至少增加一倍的时间去处理工作,最初的工人应该去擅离职守(拿起时,它已经不返回结果加后处理时间)。 在一个理想的,你必须至少有一个完整的工作很容易清除长期闲置期间的每个年底,这样你的工作,在最坏的情况下保持计时工作将采取两天的过程,应该先去失踪。
  2. 工作需要1分钟运行,这意味着你的工人,约需15分钟,运行每个作业。 虽然这可能最初似乎理想,你在吃午饭的时候获得额外的工作处理,茶点,会议等,这种情况使应变系统的其他领域,并介绍了自身的问题。 例如,首先将您的设置/处理时间比去,因此失去了系统的效率。 您的网络将是不断流的工作信息,以各种工人的令人沮丧的工作人员,谁是毛泽东他们的日常工作​​。 你还打算把更多的应变作业处理服务器,因为它有很多很多小块工作定期抛出。 最后,在这种情况下,如果你的工作服务器宕机,你要创建一个未完成的工作的巨大回日志,而更大的工作可以继续幸福地意识到加工作业服务器遇到困难。

在现实中会有您的网格设置没有一个理想的配置,更取决于可用的资源,作业类型,作业的周转时间的要求,网络能力,等等​​。 然而,一些准则是:

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

提交工作结果

当提交工作结果,它是重要的检查结果还没有被提交由另一名工人,特别是如果目前的工人已经蛰伏一段时间。

结果提交时确保结果的数量内的工作相匹配的记录数。

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

总结

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

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

下一次

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

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

(星期五)二零零九年十二月四日下午11:03

介绍

我在一家公司上班,我们许多批处理作业处理数据每天数以百万计的记录,我一直在想最近所有的机器,周围坐的每一天做几个小时没有运行。 如果我们可以使用这些机器,以增强我们的系统的处理能力,岂不是好? 在这组文章中,我要去看看用人办公室电网使用虚拟环境的潜在好处。

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

预部署

前,如果有一件事你做一件事单独部署的网格系统,它是当前系统的基准 无论你告诉同事多少额外的工作,您的系统正在做的,除非你有编号,以备份您的担保这是什么。 因此,

  • 你可以处理多少条记录当前? 每日? 每小时?
  • 多久通常需要扭转工作?
  • 你有更多的容量多少?

还有其他问题:

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

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

部署

我的建议是到办公室的一个周末弹出执行所有的安装和设置。 之前刚刚做了两个星期的假期,这和其他贫困离开章处理的后果......也许不是......

部署这样的系统需要是缓慢的。 尽管它是相对简单设立这个系统,会影响整个办公室的基础设施(数字)。 首先,推出几个机器的时间,监视网络流量,工人主机如何一天到一天的基础上执行。 您可能需要改变你的发现,你的工作配置。

一旦系统与几台机器(可以说,所有的办公设备,10%即5)保持监控网络流量和主机performance.Â下一步基准再次落户,你现在应该可以处理更多的就业机会比你的第一个基准的33%。 检查是这样,你至少在这个球场。 如果不是,探讨在移动之前是怎么回事。 重复这个循环,直到你快乐都没有造成个别机器的性能或磨你的网络瘫痪办公室机器运行。

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

住手!

如果你想在运行一段时间,以阻止工人吗? 他们都在那里运行,再生,并尽力处理饥饿的昆虫一样的数据。 答案似乎是显而易见的,但它的价值,以防万一加入其忽略。 简单的编辑处理脚本退出(0)或死亡()或其他一些语句来杀你的处理工作。 为什么我们总是尝试更新到最新的处理脚本之前运行的一个重要原因!

演示系统

为了写这篇简短的文章,我创建了一个非常小的网格,展示的技术和方法的集合。 我看了很多文章,教程,并使用各种工具来设置和监控发生了什么事情。 我绝不出去饱和的交通,也不整个办公室,我曾访问一个普通的工作人员PC到主机性能的影响如何。

我的演示系统确实是很不起眼的。 我用我的作业控制服务器设置为常规桌面。 在这一点上,我已经安装了MySQL服务器的安装设置为复制过程中的高手, PHP ,A和SVN通过链接的Apache (通过工人VM访问)。

然后,我在VirtualBox创建一个6岁的Windows XP的笔记本电脑一台CentOS工作机。 我设置复制到本机的虚拟机后,指定的计划任务和放手。

虚拟机成立,颠覆与PHP,MySQL的。 我检查出一个分支命名为“工人”从我的作业控制服务器库,并确保它可以使用“svn update的”更新。 下一步,我的设置作为一个奴隶的MySQL,并检查数据从MySQL复制作业控制服务器工人VM。 这一切后,我设置的bash脚本和cron作业。

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

  • 在名称字段读取
  • 在VM上举行的数据源表的计算类似名称的数量
  • 算作数以上,但由空格分割的名称(即用的名字,中间,姓)的名称
  • 重复这个过程中1000倍

每个作业历时约20分钟运行。 在一个点上,我打开的Windows笔记本电脑上了几个工​​人VM副本,并观看的工作进行检查每个工人的IP地址。 在这一点上我也证实,复制自动重新启动。

离开闲置导致工人在开始作业控制服务器来处理工作的笔记本电脑。 恢复笔记本电脑的使用时有30-60秒左右的延迟,这是要意识到,他们的机器可能会暂停一会儿,返回机器时,需要相当的时间和人员。 新机器可能不会有这个长暂停。 这些机器空闲期间进行加工的好处多,超过工作人员不必等待在短期内(例如1分钟),在他们的机器上的一个早晨抵达(我经常等待较长,这为Windows Defender的更新发生),他们意识到了这一点(有用的时间抢早上喝咖啡!)。

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

结论/评估

下一个明显的步骤将是真正得到现实世界的例子,并开始部署如本系统内的办公环境,并看看会发生什么。 问一个业务,这个承诺没有一条小道炽烈公司证明的技术和效果可能会有点困难。 网格/分布式计算是非常受欢迎的是一些圆圈,并有一些大型应用程序(BIONC的SETI @ home,Folding @ home项目等)。 但是,我没有发现在我的办公环境内可以推出的搜索规模较小,像这样简单的系统。

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

一旦系统运行有几乎是没有结束的定制和改进,可以使金额。 例如统计/基准可以很容易地显示了这样一个系统的价值每天补充。 可以添加新的机器迅速和容易地到达时,他们与升级现有的硬件支撑你的处理能力。

我希望您喜欢阅读这一系列文章,它给你的食物有关运行办公室电网系统的思想。 这里介绍的解决方案不一定在所有情况下工作,但应该是适应性强,让你得到你的数据处理用自己的解决方案。

请随时给我任何意见,更正,或改善,我会尽我最大努力保持更新以匹配本文。













全景主题 themocracy

11访客在线
6位,5个机器人,0会员
最大的游客今天:20在4时29分上午UTC
本月:26在2012年4月4日下午10:27 UTC
今年:27-02-2012九时56分,69时UTC
所有时间:130 28-03-2011 10:40 PM UTC