分类:PHP

sitemap.xml的自定义控制器/行动的请求路由

Steven ,1月6日星期三2010 12:13 AM

为了直接请求/ 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 =网站地图

通过建立在适当的控制器(如我的Sitemaps索引中的控制器,地图行动)的行动,对输出的示例代码可以看出:

 < PHP
类IndexController
    延伸Zend_Controller_Action的
 {
     / **
      *呈现基于Zend_Navigation设置的一个Sitemap
      * /
    公共函数sitemapAction()
     {
    	回声$>查看 - >导航() - >网站地图();
    	 - >视图 - >布局() - > disableLayout();
    	 - > _helper ->的ViewRenderer - > setNoRender(TRUE);
     }
 }

Sitemaps的可以快速方便地使用Zend_Navigation ,会产生一个巨大的快速教程(Zend Framework的教程一般都非常有用) 是Zend的演员-动态菜单的创建一个地图和面包屑。

Zend框架的每个模块的设置

Steven ,日(星期五)2010年1月1日下午10:40

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

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

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

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

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

学说:DATETIME的默认NOW()

(星期三)30日2009年12月下午6:30

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

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

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

另一方面如果你不想要一个'updated_at'列,你可以使用以下命令:

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

PHP设计模式-观察者模式

Steven 2009年12月29日星期二下午10:02

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

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

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

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

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

Steven ,星期五2009年12月4日下午11:59

简介

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

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

运行最新的代码

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

有几个非常容易简单的方法,我们可以做到这一点,诀窍,然而,在实现这一目标,以减少处理能力和网络流量。 让最简单的解决方案,并开始慢慢改进的迭代的情侣。

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

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

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

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

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

使用最新的数据

如果你的作业处理使用的数据源,然后在一些点,这些都将被更新。 除非你调用数据源的一个非常罕见的基础上,你将大量的交通网络,一旦你的工人开始运行陷入瘫痪带来的一切。 对于我的解决方案,我决定,我想我与我的虚拟机移动的数据源。

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

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

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

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

摘要

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

下一次

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

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

Steven ,星期五2009年12月4日下午11:37

简介

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

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

设置你的工人 - ,或跛行服务器

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

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

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

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

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

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

如何运行作业工人

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

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

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

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

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

  #!/ bin / sh的
如果PS AX | grep的- V GREP | grep的PHP>的/ dev / null的
然后
    回声“的工作目前正在处理,退出”
其他
    回声“作业不运行,从现在开始”
     PHP yourJobProcessingScript.php
科幻 

注:回声的是几乎完全没有意义的,但可能有助于在未来的人来一起尝试和编辑。

这结论成立工人虚拟机,快速,简单,容易复制到每个接收到的新硬件。 电网系统的“聪明”还真是不可视化操作系统,其所有与创建过程中作业,作业的配置,并在确保作业运行在适当的时候(即当主机处于闲置状态的代码)。

设置Windows初始化工人

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

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

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

  “C:\ PROGRAM FILES \ Sun \中的VirtualBox \ VBoxHeadless.exe”startvm GridMachine - VRDP = OFF 

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

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

预定任务

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

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

最后勾去掉,选择哪些国家,如果它已经运行X的时间停止任务,但打勾的选项,以停止任务,如果机器不再闲置。

计划

这是它为Windows主机设置!

摘要

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

下一次

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

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

Steven ,星期五2009年12月4日下午11:23

简介

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

作为一个PHP开发人员,我要使用的工具,我每天使用 Linux上,MySQL,PHP,VirtualBox和Subversion( SVN)的的。 不过,我希望这本手册将适应其他语言和技术一样好。

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

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

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

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

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

我敢肯定列表可以继续,但我认为现在。

办公室网格计算的优点

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

因此,1机* 10%的力量,在空闲时间* 2 / 3 = 0.067,即1台式机处理过程中每天 6充分就业。

如果你现在规模高达15个闲置的台式机,每天处理许多工作,作为您的主服务器进行处理。

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

请注意,贵公司有没有新的硬件投资只是增加其批量处理能力的4倍! 潜在的,你是要增加用电量,但大多数的办公室,我一直在的机器环境一般一夜之间反正左,所以你可以看到一个绿色的倡议。

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

技术

你需要什么? (或更正确的我用什么):

  • 空闲的办公室机器(一个备用的旧的Windows XP的笔记本电脑在我的情况)
  • VirtualBox的(或其他虚拟化客户端软件)
  • 一个虚拟机上运行PHP,MYSQL runningÂ削减下来操作系统,我打电话我这些LIMP服务器 :)
  • 工作运行
  • 作业服务器(也可以是另一个虚拟机某处)

典型职位

,这个系统是设计来运行的作业的类型如下:

  • 系统接收数据后,我们需要匹配并返回结果列表
  • 匹配涉及检查/搜索几个相当静态数据源
  • 从数据源的结果可能需要进一步验证,合并,其他数据源的检查结果
  • 返回匹配的记录数据,充分验证和处理
  • 工作中的每个记录是独立的休息

所以基本上我们期待在运行需要的数据库查询和一些数字运算,在企业环境中的一个相当典型的场景混合的作业。

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

我们会怎样实现?

这些文章的最后,我希望表明,部署Office电网不需要非常昂贵或费时。 我要讨论:

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

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

这绝不意味着,表现出强大的系统完全正常的,它意味着更多的示范和讨论表明,这些东西可以在一个相当短的时间空间,并以较小的代价取得。 请随时给我发送任何意见,更正,或改善,我会尽我所能,保持更新,以匹配这篇文章。

下一次

在第2部分 ,我会开始寻找作业控制系统,研究工作应该如何进行配置,以达到最大的处理量,同时确保每个作业是没有失败处理的。

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

Steven ,星期五2009年12月4日下午11:23

简介

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

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

作业控制

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

  • 从工人的要求不可收拾工作
  • 告诉工人要运行什么类型的职位
  • 跟踪作业
  • 确保工作只运行一次
  • 为工人提供就业数据,或至少告诉他们在哪里得到它

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

作业服务器

我们要去某个地方需要控制我们的工作,这应该只在您的网格系统,有一个固定的资源定位器,是一个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:记录ID
  • 名称:人的名字
  • 地址:人的地址
  • jobs_id:这条记录是与作业ID

第三个也是最后一个结果表表,它有很多相同的使我们的记录表,除了一些列可以记录表的一部分:

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

... ...,这一切您需要作业控制! (尽管在一个非常基本的的水平)在我的例子中,我指出另一种情况我处理的数据所在的表,但这很可能只是一个文件,运行模拟程序的参数,你的名字。

选择工作

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

  1. 采取任何未标记完成,但我们的工人和复位(以一个标识符__ME__,最简单的IP地址)的工作:
      UPDATE`的工作`设置`地位`= 0`地位`= 1`started_by`= __ME__; 
  2. 使用我们的工作选择标准,选择工作,并告诉工人,这与它打交道的控制系统:
      UPDATE`的工作`SET`地位`= 1,`started_by`= __ME__,`started_at`= NOW()这里“状态”= 0或
     (`地位`= 1`started_at`> DATE_SUB(NOW(),间隔X小时))ORDER BY`ID`ASC; 

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

  3. 下一步抢的工作记录本身的细节:
      SELECT *`工作``started_by`= __ME__ LIMIT 1;
     SELECT * FROM`job_records`WHERE`ID`= __JOBID__; 

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

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

作业配置

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

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

在现实中有没有一个理想的配置为您的网格设置,很大程度上取决于可用的资源,作业,作业的周转时间的要求,网络的能力,等等​​类型。 但一些指导原则将是:

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

提交工作结果

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

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

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

摘要

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

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

下一次

第3部分 ,我们将创建我们的虚拟加工机,并成立了我们的Windows操作系统的计算机成为空闲时间工人。

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

Steven ,星期五2009年12月4日下午11:03

简介

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

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

部署前

部署您的电网系统,如果有一件事情之前,你做一件事单独的基准你当前的系统! 无论你告诉您的系统是多少额外的工作要做的同事,除非你有备份您保证数字的是什么。 因此,

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

还有其他问题:

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

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

部署

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

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

一旦系统有几台机器(可以说10%的所有办公室机器,即5)监控网络流量和主机performance.Â再下一步基准结算,你现在可以处理33%以上的就业机会比你的第一个基准。 检查是这样的话,或者说,你至少在这个球场。 如果不是这样,在移动之前的调查是怎么回事。 重复这个循环,直到你有愉快的所有办公室机器上运行,而不必杀死个别机器性能或磨您的网络处于停顿状态。

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

住手!

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

演示系统

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

我的演示系统确实是很不起眼的的。 我用我的作业控制服务器设置为普通的桌面。 在此,我已经安装了MySQL服务器安装设置作为主在复制 PHP,A和SVN 通过 Apache(通过工人VM访问)联系在一起。

然后,我在VirtualBox上创建一个CentOS worker机器上的一个6岁的Windows XP的笔记本电脑。 我安装后复制到本机的虚拟机指定的预定任务,并让他走。

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

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

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

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

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

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

结论/评估

下一个明显的步骤将是一个现实世界的例子,并开始部署如本系统内的办公环境,并看看会发生什么。 问一个企业没有一个线索炽烈公司提交证明的技术和效益可能会有点困难。 网格/分布式计算是非常受欢迎的某些圈子里,有一些大型应用程序(BIONC,SETI @ HOME,折叠@家等)。 ,但是,我没有发现在我的办公环境内可推出的搜索规模较小,像这样简单的系统。

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

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

我希望您喜欢阅读这一系列文章,给你办公网格系统上运行一个想到的食物。 这里提出的解决方案不一定在所有情况下,但应适应允许您使用自己的解决方案,得到您的数据处理。

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

Zend框架:基础-回顾

Steven ,星期六2009年11月28日下午10:42

最近,我的雇主支付一组我们开发Zend框架:基础课程,在这里我将我的想法和意见,对他人的过程中总结。 对于那些希望节省时间,这里是我的总结:

对于开发商还没有来得及看这门课程(Zend框架:基础)提供了一个很好的框架,向您介绍的重点领域,并给予足够的信息,以便继续大局Zend框架 对于那些花费的时间框架,并按照一个或两个教程,这当然不提供远远超出。

背景

我一直在5-6年左右一个PHP开发,并已开始工作在过去6个月的Zend Framework组件的基础上。 我已经开发和/或已对情侣的小Zend框架开发MVC的 sites.Â坦率地说,我有没有接触其他的框架,从一个角度编码点的巨额,但已经花了数小时研究项目的网站,和评估them.Â的框架和社区周边的Zend Framework,这是非常令人兴奋,似乎有巨大的可能性,在其去。

关于课程

当然是提供了超过两个小时的WebEx会话(在中间休息10分钟)。 通过了一套由Zend提供了讨论的幻灯片,在任何时候,花费的时间。 您可以使用麦克风的导师交谈,但说实话,我没有看到任何人使用任何聊天窗口多。 另外一个VMWare Ubuntu机提供的示例代码和项目设置的Zend Studio试用版。 课程负责人向与会者讲解,通过一个集成的VoIP解决方案,,或您可以拨打使用的许多全球数字拨号。

在课程中的材料包括样品留言应用程序的标题之前,简要介绍MVC模式的框架。 讨论表明,引导,Zend_Application,数据库表,数据库访问,形式,过滤,ACL,验证等,等,基本上涵盖了所有的主题,你需要获得一个基本的网站建立一个运行的所有的时间给你的工具去获得更多的先进框架中(虽然这金额“看到网站的大部分时间)。

时间是考虑到代码的一些例子,并制定的“留言”和简单的“维基”应用。 我个人认为,提供的代码或每个应用程序,然后要求我们的发展基本上是一个副本,旁边并没有真正提供一个良好的学习经验。 我宁愿开发一个应用程序类似,但又不完全相同。 示例应用程序的指导指的好处。 或者从头开始与示威者的应用将LED的可能为什么和怎样的问题,从而更好地了解一个框架,毕竟你可以看一下课程结束后的细节。

上一讲维基在导师的指导与帮助/从应用程序的工作。 课程结束后的反馈,它强调了几次通过该课程,Zend的需要反馈非常重视,其实显然,我们的版本当然是相当新的。 一些在该公司的其他开发人员将采取过程很快,所以这将是有趣的,看看如果出现这种情况。

当然风格是非正式的,允许与会者和教师之间的反馈和协作。 课程负责人很友好,平易近人(电子邮件地址共享问题),并同时从他的演讲幻灯片有点不稳,似乎完全在框架的主管。 他清楚的人使用的人教教的课程,而不是定期的框架,我很喜欢“现实世界”在这方面的经验。

总体感觉

在某些方面,我发现当然是浪费时间,在其他国家,这是非常方便的。 希望我会得到跨越清楚我的理由,并可能会提供一些​​思想或有用的反馈食品(知道我这是不可能的!)。

至于我自己,本课程的目的是过低的水平。 在通过了快速入门指南,请阅读罗布艾伦的行动Zend框架,并与一点点我没有真正得到什么太多的框架工作。 我会喜欢的当然拿起快速入门月底和培养更多的技能。

说,课程名称并明确规定“Zend框架: 基础知识 ”,并在这方面当然实现这台做出来的。 没有花时间寻找到框架的开发团队的其他成员以饱满的热情完成每届会议提出的问题真的很高兴看到。

一切都不会丢失,这是很好的花时间确认该框架的基本细节,并问了几个问题,我不是100%的地区。 也有人的时间,我坐下来的每一天,想想编码使用的框架和未来的项目,我不能够做到,否则(贵公司同意,你能想象:))的东西。 最后但并非最不重要的,你也得到一个来自Zend尼斯说,你参加课程(尽管通过电子邮件)的证书。

Zend Framework的认证

这是一个问题,在课程中不断涌现脑海,它准备为我的认证? 快速,容易的是一个响亮没有。 课程导师是很清楚,认证,你应该真正在日常使用的框架和感觉很舒服,它的用法和方法有信心与其他意见。

摘要

鉴于我上面写的一切,我将在两个简单的要点概括一切:

  • Zend框架:这当然不正是你所期望的的,它给你一个很好的介绍框架上的基础知识,从中可以建立良好的接地。 当然似乎产生浓厚的兴趣和热情的开发商之间的框架。
  • 使用Zend框架:虽然这是很好的托一些非常基本的,我觉得时间,精力和资金,采取当然可以更好地用在别处。 创建一个新的更高层次的课程,采取开发一个新的水平-这将是不错的SEEA Zend的,至少在认证和超越标准,为此,我将立即注册。












全景主题 Themocracy

10访客在线
8名客人,2个机器人,0会员
今天最多访问:14日12:00 AM UTC
本月19日上午在19-08-2011 06:09
今年:130于28-03-2011 10:40 PM UTC
所有时间:130于28-03-2011 10:40 PM UTC