카테고리 : PHP

사용자 정의 컨트롤러 / 행동 sitemap.xml에 대한 경로 요청

으로 2010 12시 13분 오전 수요일 1월 6일

/에 대한 직접적인 요청하기 위해서는 sitemap.xml의 사용자에서 사용자 지정 컨트롤러와 액션에 젠드 프레임 워크 응용 프로그램을 간단하게 (예 : 나는 navigation.ini 사용)하여 application.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 설정에 따라 사이트맵 찔려서
      * /
     공용 함수 sitemapAction ()
     {
    	 에코 $이 ->보기 -> 탐색 () -> 사이트맵 ();
    	 $이 ->보기 -> 레이아웃 () -> disableLayout ();
    	 $이 -> _helper -> viewRenderer -> setNoRender (TRUE);
     }
 }

사이트맵 쉽고 빠르게 사용하여 생성할 수 있습니다 Zend_Navigation을 , 좋은 빠른 튜토리얼 (그리고 젠드 프레임 워크 튜토리얼 일반적으로 매우 유용)입니다 젠드이 캐스트 - 동적 Sitemap 및 빵부스러기를 메뉴를 만들기 .

젠드 프레임 워크는 당 모듈 기반 설정

으로 , 금요일 2010년 1월 1일 오후 10시 40분

제가 적은 구성이 필요합니다이 게시물에 대한 follow-up을 만들었습니다, 참조하시기 바랍니다 젠드 프레임 워크 - 모듈 기반 레이아웃 .

사용할 때 젠드 프레임 워크를 같은 응용 프로그램에서 다양한 (하위) 사이트를 운영중인 경우는 반드시 같은 원하지 않는 모듈은 명백한와 레이아웃 스크립트 의 각 부분을. 필자의 경우는 다음 사이트 구조로 결정 :

  / 신청
     / 컨트롤러
         ...
     / 모델
     / 모듈
         / 기본
             / 컨트롤러
             / 레이아웃
                 / 스크립트
             / 전망
                 / 스크립트
         / 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
     / **
      * 당 모듈 기준으로 레이아웃 경로를 설정합니다
      *
      * @ 작성자 로이드 Watkin <lloyd@evilprofessor.co.uk>
      * @ 2010년 1월 1일 이후
      * /
     수업 Pro_Controller_Action_Helper_SetLayoutPath
         Zend_Controller_Action_Helper_Abstract 확장
     {
         / **
          * 모듈을 기반으로 레이아웃 경로를 설정합니다
          * /
         공용 함수 preDispatch ()
         {
        	 $ 모듈 = $이 -> getRequest () -> getModuleName ();
    
    	     경우 ($ 스트랩 = $이 -> getActionController ()
    	                        -> getInvokeArg ( '부트 스트랩')) {
    
    	         $ 설정 = $ 스트랩 -> getOptions ();
    
    	         경우 (isset ($ 설정 [$ 모듈] [ '자원'] [ '레이아웃'] [ 'layoutPath'])) {
    	             $ layoutPath =
    	                  설정 $ [$ 모듈] [ '자원'] [ '레이아웃'] [ 'layoutPath'];
    	             $이 -> getActionController ()
    	                  -> getHelper ( '레이아웃')
    	                  -> setLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. 그리고 마지막으로 작업 도우미를 boostrap :
      ...
         / **
          * 당 모듈을 기반으로 레이아웃 스크립트를 설정합니다
          * /
         보호 기능 _initLayoutHelper ()
    	 {
    	     $이 -> 부트 스트랩 ( 'frontController');
    	     $ 레이아웃 = Zend_Controller_Action_HelperBroker : : addHelper (
    	         새로운 Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

교리 : 지금 날짜 _ 시간 기본 ()

으로 , 수요일 2009년 12월 30일 오후 6시 반

나는 새위한 데이터베이스 스키마를 설정 어려움을 겪고 있었 젠드 프레임 워크 프로젝트를 만듭니다. 사용 사용하려는 교리의 내 데이터베이스 모델 ORM합니다. 내가 현재 타임 스탬프를 새 메시지를 추가할 때 그것이 나를 예를 들어``열 날짜 _ 시간에 대한 기본 날짜와 시간을 설정할 수 있도록 그 스키마를 설정해야합니다. 나는 그것을 공유하고있어 많은 검색 및 실험 후 솔루션을 발견했습니다.

사용자 스키마에서 YAML의 파일을 간단하게 다음을 수행 :

 메시지 :
   actAs :
     Timestampable :
       만든 날짜 :
         이름 : created_at
         유형 : 타임 스탬프
         형식 : Ymd H : I : S
       업데이트 :
         이름 : last_updated
         유형 : 타임 스탬프
         형식 : Ymd H : I : S
   열 :
     ID :
       종류 : 정수
       주 : 사실
       autoincrement : 진실
     이름 : 문자열 (255)
     이메일 : 문자열 (300)
     메시지 : 문자열 (2000)

반면에 당신이`updated_at`컬럼을하지 않으려면 다음을 사용할 수 있습니다 :

 메시지 :
   actAs :
     Timestampable :
       만든 날짜 :
         이름 : created_at
         유형 : 타임 스탬프
         형식 : Ymd H : I : S
       업데이트 :
         사용 불가 : 진실
   열 :
     ID :
       종류 : 정수
       주 : 사실
       autoincrement : 진실
     이름 : 문자열 (255)
     이메일 : 문자열 (300)
     메시지 : 문자열 (2000)

PHP 디자인 패턴 - 옵저버 패턴

으로 , 화요일 2009년 12월 29일 오후 10시 2분

내가 읽고 있었어요 헤드 퍼스트 디자인 패턴 최근 것은 내 자신의 이익을 위해 PHP 예제로 패턴의 일부를 작성하기로 결정했습니다. 일어 나 코드를 결정 하셨다니 첫번째는 옵저버 패턴 . 옵저버 패턴의 공식적인 정의는 다음과 같습니다

관찰자 패턴 (비동기의 하위 집합이 패턴을 게시 / 구독 )는 소프트웨어 디자인 패턴 되는 객체 , 제목 불리는가 관찰자라는 그 부양 가족의 목록을 유지하고, 일반적으로 호출하여, 모든 상태 변화를 자동으로 알려줍니다 그들 중 한 방법 . 그것은 주로 분산 이벤트 처리 시스템을 구현하는 데 사용됩니다.

시스템이 증가함에 따라 더 느슨하게해야 이벤트가 이러한 업데이 트에 대한 지식이 통지되고 필요한 모든 시스템을 발생 때 만드는 결합. 예를 들어, 블로그 게시물은 게시물을 저장한 후 우리는 (예 : Lucene) 검색 엔진을 업데이 트해야 할 수도 있습니다, 관찰자​​ 패턴은 개발자들이 관찰 개체를 편집하지 않고 추가 리스너를 추가할 수 있습니다 우리 사이트맵, 태그, 이메일 가입 사용자 등 업데이트 . 제목 (예 : 블로그 게시물 편집 시스템)으로 관측 (예 : 검색 엔진 업데이트 관측기, 사이트맵 생성기 등) 주입함으로써 우리는 어떤 변화도없이 필요한 모든 업데이 트를 수행할 수 있습니다.

읽기 'PHP 디자인 패턴 - 옵저버 패턴'을 계속»

가상 환경을 사용하여 Office의 그리드 컴퓨팅 - 4 부

으로 (금) 2009년 12월 4일 오후 11시 59분

소개

나는 우리가 매일의 데이터 기록의 수백만을 처리하는 여러 일괄 작업을 실행하고 각 앉아서 매일 몇 시간 동안 아무것도하지 않고 모든 시스템에 대해 최근에 생각해 봤는데 회사에서 작동합니다. 우리 시스템의 처리 능력을 강화하기 위해 그 기계를 사용할 수있다면 좋지 않겠어요? 기사의 집합에 나는 사무실 고용의 잠재적인 이익 보는거야 그리드 virtualised 환경을 사용합니다.

에서 제 3 우리는 가상 가공 시스템을 만들어 유휴 시간 근로자가 윈도우 시스템을 설정합니다.

최신 코드를 실행

불가피하게 직원의 비즈니스 로직을 작성 후 변경되며, 버그가 발견되고, 빠르고보다 효율적인 코드는 따라서 귀하의 근로자를 사용하여 데이터 처리 주위 토 출발 생산됩니다 오래된 냄새나는 코드를 . 우리는 항상 처리 스크립트의 최신 최고의 버전을 사용하고 그럼 어떻게 보장합니까?

우리가 이것을 할 수있는 몇 가지 아주 쉬운 간단한 방법이있다, 마술은, 그러나, 이것을 달성 처리 능력과 네트워크 트래픽을 줄이는 것입니다. 솔루션의 간단한 시작과 반복 정도에 걸쳐 천천히 그것을 개선하자.

첫 번째 방법은 단순히 우리의 작업 제어 서버 (삼바, FTP, 또는 비슷한 통해)에 연결하고 코드의 최신 버전을 풀다운하는 것입니다. 아주 효율적으로하지만, 그것은 일을하지 않습니다. 그 약간, 어떻게 rsync 스크립트를 생성하고 대신 각각의 시간을 사용하는 방법에 대한?를 개선하자 또는 어떤 Subversion을 처음 코드를 체크 아웃에 최신 처리 스크립트에 관해서 그리고 나서 각각의 실행 (에 우리의 코드를 업데이 트에 대한 svn 업데이트 )?

결국 우리는이 간단 보이는 BASH 스크립트 (Cron이 매 10 분라고도 함)으로 끝낼 수도 :

  #! / bin / sh를
 경우 PS 도끼 | grep - v를 grep | grep PHP > / dev / null로
 그때
     에코 "작업은 현재, 출구를 처리"
 다른
     에코 "작업이 실행되지 않습니다, 지금 시작"
     CD / 경로 /로 /가 / 복사 작업
     svn 업데이트
     PHP yourJobProcessingScript.php
 Fi 인터넷 접속 

이제 우리는 각각의 실행과 함께 우리가 확실히 최신 코드를 실행하고 있는지 확인하실 수 있습니다. 우리는 실행을 수행하는 각각의 시간을 우리의 코드베이스를 업데이 트하고 우리의 네트워크를 통해 파일의 차이를 전송함으로써 네트워크 트래픽을 줄임으로써 이것을 보장거야.

내 시범 설치, 난 정확히 위에서 않았다. Subversion을 내 작업 처리 서버에 설치하고 간단하게 'svn 업데이트'를 사용하여 '노동자'지점에서 최신 코드를 뽑았습니다. 나는 또한 결과 반환의 일부로 데이터베이스에 반환되었다 내 처리 스크립트 버전 번호 태그를 추가했습니다. 이런식으로 내 코드가 나는 확실히 최근 처리 스크립트를 실행하는 작업자 지점 즉,로 내 트렁크를 복사 때마다 업데이 트되는 것을 볼 수 있습니다.

최신 데이터를 사용하여

귀하의 작업 처리는 다음 데이터 소스를 사용하게하는 경우 어떤 시점에서이 너무 업데이 트가 될 수 있습니다. 당신은 즉시 당신의 근로자 정돈에 이르기까지 데려 게재를 시작으로 트래픽이 네트워크를 홍수로가는 매우 드문 기초하여 데이터 소스를 호출하지 않는 한. 내 솔루션을 위해 나는 나의 VMS와 함께 주변의 내 데이터 소스를 이동하고자하는 결심했다.

거기 말이에요 잡아요! 내 데이터 소스는 거대한 무엇면? 그럼 이것은 정말 우리가 얼마나 많은 데이터가 말을하는 사건인가? 그것은 추가 처리 서버를 구입보다 비용 효과적인 각 시스템에 추가 더 큰 하드 드라이브를 설치할 수 있습니다. 이것은 예산의 문제이며 결정하는 사업에 달려있다. 그것은 아마도 당신의 데이터 소스에 너무 큰 그는 귀하의 근로자 기계에 금액의 데이터를 유지하는 단지 unfeasible. 이런 경우에는 어떻게 할까? 그럼 우리는 로컬 데이터 서버를 호출 볼수는 있겠지만, 이것은 네트워크에 문제가 발생할 수 있습니다. 이 경우에는 이와 같은 그리드 시스템은 사무실 환경에 포함 비현실적인 될 수 있습니다. 또한 예를 들어서만 오후 8시과 오전 6시 매일 밤 및 / 또는 스로틀 데이터 소스 요청 사이에 근로자를 호출 당신이 대안 실행 전략으로 볼 수 있습니다.

달리자 데이터 100GB하기 위해 데이터 소스 금액을 말할 수 있습니다. 네, 그거 업데이 트에 대한 네트워크 이동하는 데이터의 꽤 있어요. 어떻게 우리가이 경우에는 데이터의 최신 복사본이 있는지 확인까요? Rsync은 가능성이지만, 개인적으로 난 당신의 작업 처리 서버에서 최신 데이터 소스를 실행하고 복제에서 마스터 (좋은 긴 빈 로그)와 이것을 설정하여 이동하는 방법 것 같아 :

복제 데이터 소스로 작업 제어 서버 업데이 트에 노예로 근로자의 각각을 설정하면 (당신은 거대한 데이터 업데이 트를 수행하고 모든 직원이 빨리 회복하지 않는 한 그것은 네트워크의 활동에 큰 증가없이 노동자에게 정중하게 아래로 물방울합니다 한 번에). 데이터베이스 업데이트,, 이것은 각 작업 전에 긴 정지를하지 않겠다고에서 rsync 이상의 장점이 MySQL의 처리가 계속 동안 작업자에 데몬이 계속 자사의 데이터를 업데이 트됩니다.

이것은 내가 데모 서버를 설정하는 방법입니다. 복제를 설정하려면 저는 MySQL 사이트에있는 가이드 (다음 복제를 설정을 ) 20 분 이내에 그 작업 제어 서버 세트를 복제 내 inital 노동자했다. VM이 복사된 때 각 추가 노동자에 대한 복제 설정과 프로세스가 각 시간을 일했습니다.

개요

문서의이 섹션에서는 우리가 간단하고 고통없이이 작업을 수행하고 같은 time.Â에서 네트워크 트래픽을 줄이기 위해 rsync using 또는 subverion (SVN)에 의해 날짜에 처리 코드를 유지하는 것이 얼마나 봤어 우리는 또한 어떻게 논의 그것이 근로자의 각 다운 세류 수 있도록하여 데이터 소스 정보가 항상 최신 상태로 유지합니다. 따라서 우리 지역 우리 사무실 그리드 시스템의 비즈니스 로직 및 정보를 유지하도록하는. 이 분명 이러한 작업을 수행하기 위해 수많은 대안 수 있지만 여기에 솔루션으로 올 것이 얼마나 쉬운지 보여 두 가지 간단한 예제했다됩니다.

다음 시간

aptly라는이 시리즈의 마지막 부분에서 제 5 부 , 우리는이 시스템을 배포 다루겠습니다. 내가 만들고 관리 어떻게 알게되어 무엇 요약 알려드립니다.

가상 환경을 사용하여 Office의 그리드 컴퓨팅 - 3 부

으로 (금) 2009년 12월 4일 오후 11시 37분

소개

나는 우리가 매일의 데이터 기록의 수백만을 처리하는 여러 일괄 작업을 실행하고 각 앉아서 매일 몇 시간 동안 아무것도하지 않고 모든 시스템에 대해 최근에 생각해 봤는데 회사에서 작동합니다. 우리 시스템의 처리 능력을 강화하기 위해 그 기계를 사용할 수있다면 좋지 않겠어요? 기사의 집합에 나는 사무실 고용의 잠재적인 이익 보는거야 그리드 virtualised 환경을 사용합니다.

2 부 우리는 서버가 실행 작업을 검토한 결과, 어떻게 작업은 각 작업이 실패하지 않고 처리 있도록 반면 처리 최고 금액을 달성하기 위해 구성해야합니다.

당신의 노동자 설정 - 또는 미약 서버

그 과정에서 다음 단계는 가상 노동자를 설정하는 것입니다. 이를 위해 저는 VirtualBox를 사용하여 centOS의 설치를 사용하는거야. 제가 설치하는거야 마이 SQLPHP를 또한 절름 (리튬의 nux, M ySQL, P HP) Server (I가 그 이름을 만들 수도 있습니다)로 알려진 서버에.

  • 귀하의 윈도우 머신에 VirtualBox를 설치 (링크를 클릭하십시오)
  • 만들어진 가상 머신 내에서 centOS (현재 버전 5.3) 다운로드 및 설치

아무 소용 내가이가는가 없습니다 천의 큰 자습서 거기서는 (좋아, 여기에 하나 : 아마있다 virtualbox 아래의 생성 및 Managing centOS 가상 머신 ). 제가 바라는 참고로 중요한 포인트는 내 가상 기계가 GridMachine라는 것입니다.

까지 가상화 클라이언트와 운영 체제의 내 선택 가고 각 선택에 대해 큰 매력 이유도없이이 없습니다. VirtualBox 내 집에서 컴퓨터에 사용하고 세 가지 주요 운영 체제에서 지원하는 무언가이다. 나는 그것의 좋은 안정적인 OS로 centOS를 선택하고 내 자신의 웹 서버에 사용합니다. 나는 (내가 신청 해요 있지만 여기에 정신 '당신을위한 빠르고 쉬운을 사용') 작업에 적합한 도구의 훌륭한 신자이다, 그래서 운영 체제 X는 빨리 코드를 실행하고있다면보다 효율적으로 그 대신에 사용)

중요한 것은 당신의 VM은 각각의 새로운 가상 머신에 대해 달리, DHCP를 사용하여 우리가 want.By 우리가 노동자 기계 개별적으로 네트워크 설정을 구성할 필요가 없습니다 DHCP를 사용하지 않는 일이되는 별도로 구성할 필요가 있는지 확인, DHCP 손으로 것입니다 당신을 위해 아웃 IP를. 따라서 당신은 (이것은 확장성을 향상시키고 노동자 관리를 줄일 수) 각 설정에 대한 걱정없이 가상 머신 사무실에 대해 복사할 수 있습니다.

당신이 달성하는 것을 목표로해야하는 과정은 새로운 물리 기계를 얻을 VirtualBox를 설치하고 꽤 많이 다른 많은 않고 가상 이미지를 배포하는 것입니다. 그것은 당신이 적어도 실행 얼마나 많은 기계를 볼 수 있도록 다른 서브넷에있는 모든 근로자를 설치하는 것이 현명 수 있습니다. 당신은 또한 긴 임대 또는 무제한 임대 DHCP에서 시스템을 설정해야합니다.

노동자에 대한 채용 정보를 실행하는 방법

이것은 흥미로운 지역이며, 노동자에 대한 작업을 처리하는 몇 가지 유효한 방법이 있습니다. 여기 난 그냥 두 분명한 논의주지

  • 끊임없이 스크립트를 실행 : 스크립트는, 그것 쉘 스크립트 수도, 또는 PHP 스크립트가 노동자에 한 번 실행하고 무한 루프의 일부로 실행됩니다. 저는 스크립트 중 하나를 사고로이 방법을 할인했습니다 잠재적으로 직원들은 개입하지 않고 일종의 실행 중단됩니다.
  • Cron의 기반 스크립트 실행 : 모든 X의 분에는 cron 데몬이이 일을 가야하는 스크립트로 전화를 나가 라고요. 몇 가지 체크없이는 노동자 스크립트 실행의 여러 많은 복사본을 초래할 수 있습니다.

나의 결정은 내 쉘 스크립트는 다음 작업을 수행합니다 매 10 minutes. 쉘 스크립트를 Cron의 재미와 함께 이동하는 것이었다 :

  1. 프로세스 목록을 구해서 'PHP'에 대한이 grep. 발견되지 않으면 다음을 계속합니다.
  2. 직업 코드를 호출, 내 경우에는이 기준 뭔가 PHP 될
  3. 노동자 스크립트는 실행을 완료
  4. 다음 적절한 전화를 다시 갈 준비

내 BASH 스크립트는 다음과 같이 보입니다 :

  #! / bin / sh를
 경우 PS 도끼 | grep - v를 grep | grep PHP> / dev / null로
 그때
     에코 "작업은 현재, 출구를 처리"
 다른
     에코 "작업이 실행되지 않습니다, 지금 시작"
     PHP yourJobProcessingScript.php
 Fi 인터넷 접속 

참고 : 에코의 거의 완전히 무의미한 있지만, 그것을 시도하고 편집할 나타나서 다음 사람을 도움이 될 수 있습니다.

즉, 빠르고 간단하고, 수신 하드웨어의 각 새로운 조각에 복사하기 쉽고 노동자 가상 머신의 최대 집합을 마칩니다. 그리드 시스템의 '영리'는 정말 시각 OS,에없는 그 작업, 작업 구성, 그리고 적절한 작업 (즉 실행되었는지 확인하는에있는 호스트가 유휴 상태 프로세스에 만들어진 코드와 함께 할 모든 ).

근로자를 초기화하도록 Windows를 설정

첫 번째 작업은 Windows 명령줄에서 가상 머신을 실행하는 데 필요한 명령을 해결하는 것입니다. 당신이 기본 위치에 virtualBox를 설치했고 당신의 노동자 GridMachine라는 경우 다음 명령은 노동자가 최대 부하 요구 :

  "C : \ 프로그램 파일 \ 일 \ VirtualBox \ VBoxManage.exe"startvm GridMachine 

그러나 우리가 사용해야하는 '머리없는'상태로 스크립트를 실행하려면 다음 단계를 따르십시오

  "C : \ 프로그램 파일 \ 일 \ VirtualBox \ VBoxHeadless.exe"- startvm GridMachine - vrdp = 해제 

이것은 GUI없이 가상 머신을 시작하고 정상적으로 상태를 저장할 수 있습니다. 두 번째 인수는 윈도우 RDP와 충돌하지 않도록 RDP 해제하거나, 당신에게 포트 3389에서 수신 대기에 대한 메시지를 제공합니다. 가상 머신 이름은 대소문자를 구분합니다!

다음, 우리는 기계가 유휴되면 우리 노동자 VM을 킥오프 창문을 설정해야합니다. > 모든 프로그램 - -> 악세사리 -> 시스템 도구 -이 (Windows XP에서) 할하려면 시작을 가야하는 데 필요한 다음과 같이> 예약된 작업을 :

예약된 작업

다음 사용자 지정 프로그램을 추가로 이동하여 다음의 '예약 작업 추가'를 클릭합니다. 귀하의 VBoxManage 스크립트로 이동하고 확인을 누릅니다. 옵션 중 하나에 대한 작업을 예약할 (우리는 곧이 시스템을 바꿀거야)과 계속합니다. 다음 화면을 빼먹는 후 Windows에서이 작업을 실행하려는 사람을 요청할 것입니다, 나는 '관리자'또는 새로운 사용자를 만드는 권한 중 하나를 제안 거라고. 우리가 언제든지 시스템에 표준 직원 계정을 방해하고 싶지 않아 기억하십시오. 다음을 클릭하고이 작업에 대한 고급 옵션 표시를 확인하십시오.

실행 텍스트 상자의 끝에 우리 'startvm GridMachine'문자열을 추가하고 로그인하는 경우에만 실행되도록 보장이 unticked 남아 있습니다. 다음 일정 작업을 방문하여, 당신은 기계가 다음 탭으로 이동하기 전에 유휴 상태에 있고 싶어 시간을 선택 '할 때 유휴 상태'일정 옵션을 드롭 다운 변경할 수 있습니다.

결국 시간의 X 금액을 실행되어있는 경우 작업을 중지 상태 옵션을 untick하지만, 기계가 더 이상 유휴 없다면 작업을 중지하는 옵션을 체크 않습니다.

시간표

그것은 윈도우 호스트 설치를위한 다음에요!

개요

이 부분에서 우리는 노동자뿐만 아니라 우리가 (자신을위한 PHP 스크립트)를 호출 및 작업 처리 스크립트를 실행하는 방법으로 행동하는 가상 머신을 설정합니다. 여기에서 우리는 사용자가 기계의 사용을 다시 시작하면 그 상태를 컴퓨터가 유휴되면 머리가 모드에서 가상 머신을 시작하고, 저장 창 우리의 사본을 설정하는 방법 좀 봐. 다행히도이 시점에서 당신은 이러한 시스템을 설정하는 방법을 간단하게보고있어 일부 실험은 스스로를 가야하는 가려움 있습니다!

다음 시간

에서 4 부에서는 우리는 얻은 결과는 최신 비즈니스 정보와 논리와 최신 항상있다 있도록 코드와 데이터 소스의 최신 버전을 실행하는지 확인하는 도구를 사용하여보고됩니다.

가상 환경을 사용하여 Office의 그리드 컴퓨팅 - 파트 1

으로 (금) 2009년 12월 4일 오후 11시 23분

소개

나는 우리가 매일의 데이터 기록의 수백만을 처리하는 여러 일괄 작업을 실행하고 각 앉아서 매일 몇 시간 동안 아무것도하지 않고 모든 시스템에 대해 최근에 생각해 봤는데 회사에서 작동합니다. 우리 시스템의 처리 능력을 강화하기 위해 그 기계를 사용할 수있다면 좋지 않겠어요? 기사의 집합에 나는 사무실 고용의 잠재적인 이익 보는거야 그리드 virtualised 환경을 사용합니다.

으로 의 PHP 개발자 나는, 즉 하루에 리눅스 사용하는 도구를 사용하는거야 마이 SQL , PHP, VirtualBox와 Subversion을 (SVN)을. 그러나이 가이드는 단지뿐만 아니라 다른 언어와 기술에 적응 바랍니다.

제가 제공하는 솔루션은 매우 느슨하게 제가 단순 것들을 바꿀거야, 아니면 더 재미있게 사용 시나리오를 생산하는 등 우리가 전체 기사를 통해이 사실이되지 않을 수도 있습니다 그러나 달성하기 위해 필요한 건 처리 유형에 따라 것입니다.

이 사무실의 대부분이 실행 무엇 때문에 이러한 virtualised 환경은 Windows 컴퓨터에서 실행됩니다. 사무실 기계는 그 기계를 사용하는 직원을 방해하지 말아야 할 것을 처리, 기계에 아무런 유지 보수를 필요로하지 않으며 그들이 제공되는 새로운 시스템에 쉽게 deployable해야합니다. 또한, 새로운 가상 머신이 크게 그리드 시스템을 확장할 수있는 확장성에서 손쉽게 감소와 같은 추가 구성이 필요 없습니다.

왜 오피스 컴퓨팅 그리드를 배포?

첫째로 생각 수, 왜 그냥 같은 클라우드 컴퓨팅 리소스를 사용하지 아마존의 EC2 플랫폼 ? 그럼 그 이유는 예를 들어, 여러 수 :

  • 당신은 클라우드 컴퓨팅 환경에 특정 데이터를 위탁하지 않습니다
  • 당신은 잠재적인 법적인 이유로, 예를 들어 보건국 기록에 대한 법적인 이유로 (예 : 데이터가이 나라를 떠나)을위한 클라우드 컴퓨팅 환경으로 특정 데이터를 넣어 수 없습니다.
  • 귀하의 처리 장치도 하드웨어를 완벽하게 제어할 수 닫고가 유지하려면
  • 당신은 구름 인스턴스를 실행하려면 프로젝트 자금을 필요가 없습니다
  • 사무실에서 인터넷에 연결되어 있지 않으며 따라서 그것은 불가능 구름 리소스를 사용하는
  • 당신은 비가, 구름은 비를 제안, 그러므로 잘 멀리 유지 싫어

나는 목록이 계속 갈 수있을거야,하지만 충분히 지금이라고 생각합니다.

오피스 컴퓨팅 그리드의 장점

음, (그리고 진정한 물리학 스타일의 일부 전면 가정을 수 있습니다) 몇 가지 수학을 할 수 있습니다. 당신이 큰 우둔한 처리 서버가 하루에 100 작업을 실행 상상해보십시오. 사무실에서 16 시간,이 기계의 각각은 살이 찐 처리 끊다처럼 강력한 10 % 유휴 상태 50 기계 있습니다. (여기서 모든 결과는 성능 향상을 과소 평가로 반올림됩니다.)

그래서, 유휴 시간 1 기계 * 10 % * 전원 3분의 2 시간 = 0.067 즉, 한 바탕 처리는 하루 당 6 전체 작업을 처리 수 있습니다.

지금까지 이렇게 규모 경우 귀하의 기본 처리 서버와 마찬가지로 하루에 많은 작업을 처리 15 유휴 데스크탑 걸립니다.

그래서 50 기계 우리의 흉내 사무실에서 우리는 4 전체 처리 서버에 최대 1 서버에서 우리의 처리 능력을 증대시킬 수있다, 또는 우리는 100 대신에 하루에 400 작업을 처리 될 수 있습니다.

공지, 새로운 하드웨어에서없이 투자 회사는 4 번 그 배치 처리 용량을 증가했습니다! 잠재적으로 귀하의 전력 사용을 증가시킬거야하지만 난 기계했던 대부분의 사무실 환경에서 일반적으로 하룻밤 어쨌거나에 남아 있으며, 그래서 당신은 녹색 구상으로 볼 수 있습니다.

사무실 컴퓨터가 충분하여 귀하의 사무실 컴퓨터의 전원을 개선하는 등 사무실 격자가 자동​​으로 더 강력한된다고하면 다른 장점은 또한 새로운에 투자 (또는 업데이트) 처리 서버가 지연될 수을 뜻합니다.

기술

뭐가 필요 한가? (이상 정확히 내가 무엇을 사용하는 한) :

  • 유휴 사무 기계 (제 경우에 여분의 오래된 Windows XP의 노트북)
  • VirtualBox (또는 다른 가상화 클라이언트 소프트웨어)
  • OS 아래 상처를 실행하는 PHP, MySQL을 runningÂ와 가상 머신, 내가이 내 다리를 저는 서버를 부르 겠네 :)
  • 실행 채용 정보
  • 작업 서버 (어딘가에 다른 가상 머신 수 있습니다)

일반 채용 정보

다음과 같이 시스템이 실행되도록 설계되는 작업의 유형은 다음과 같습니다 :

  • 시스템은 우리가 결과를 일치와 반환을 필요로하는시 데이터의 목록을받습니다
  • 검색은 체크 / 몇 가지 (상당히 정적) 데이터 소스를 검색을 포함
  • 데이터 소스의 결과가 결과에 대한 응답으로, 추가 데이터 소스의 검사를 병합, 추가 검증을 요구할 수 있습니다
  • 데이터는 완전히 확인 및 처리, 일치하는 레코드로 반환됩니다
  • 직장 내에서 각 레코드는 나머지 무관

그러니까 기본적으로 우리는 데이터베이스 조회 및 일부 숫자 재정, 비즈니스 환경에서 매우 일반적인 시나리오의 혼합물을 필요로 작업을 실행에 찾고 있습니다.

그리드 솔루션은 이러한 유형의 작업을 처리에만 유리한되지 않습니다. 기본적으로 독립적인 단위로 분할 수있는 모든 프로세스가 병렬로 실행할 수 있습니다. 예제 및 자세한 내용은이 위키 피 디아를 참조 : 그리드 컴퓨팅 하지만, 유명한 예제 몇 가지입니다 Seti @ 홈BIONC . 이 컴퓨팅 그리드를 실행하기위한 프레임 워크가 있으며, 이들은 잘 조사하고 가치가있다.

우리는 무엇을 달성 것인가?

이 기사의 마지막으로 나는 사무실 그리드를 배포하는 것은있을 상당히 비용이나 시간이 소요되는 필요도없는 것을 보여줄 수 있도록 최선을 다하겠습니다. 나는 토론거야 :

  • 작업 제어 시스템 설정, 작업 구성
  • 적절한 처리 가상 머신 만들기
  • 윈도우 머신에 시스템을 설치하는 방법
  • 당신이 최신 코드와 데이터를 사용하는 보장
  • 배포 및 벤치마킹
  • 미리 보면서

나는 (OK 난 다음, 내장이 쓴) Windows XP 및 내 'GridMachine'가상 머신을 사용하여 로컬 컴퓨터에있는 개념을 테스트하기 위해 예제 응용 프로그램을 구축됩니다. 내 작업 관리 서버가 실행 내 주요 기계 것입니다 페도 라 11 .

이것은 어떠한 방식으로도 제대로 작동하는 강력한 시스템을 설명하기위한에, 그것은 시위보다 이러한 것들은 시간을 합리적으로 짧은 공간에서 작은 비용으로 달성할 수 있다고 보여주는 논의를 의미. 나에게 의견, 수정 또는 개선 사항을 보내주시기 바랍니다 나는 일치하도록 업데이 트이 문서를 유지하기 위해 최선을 다하겠습니다.

다음 시간

에서 제 2 부 나는 그 일을 제어 시스템을보고하여 시작되며, 작업이 각 작업이 실패하지 않고 처리 있도록 반면 처리 최대 금액을 달성하기 위해 구성해야하는 방법에 대해 조사.

가상 환경을 사용하여 Office의 그리드 컴퓨팅 - 2 부

으로 (금) 2009년 12월 4일 오후 11시 23분

소개

나는 우리가 매일의 데이터 기록의 수백만을 처리하는 여러 일괄 작업을 실행하고 각 앉아서 매일 몇 시간 동안 아무것도하지 않고 모든 시스템에 대해 최근에 생각해 봤는데 회사에서 작동합니다. 우리 시스템의 처리 능력을 강화하기 위해 그 기계를 사용할 수있다면 좋지 않겠어요? 기사의 집합에 나는 사무실 고용의 잠재적인 이익 보는거야 그리드 virtualised 환경을 사용합니다.

에서는 제 1 부 나는뿐만 아니라 당신이 사무실 그리드를 만들려 왜 가능성이 이유의 일부를 논의로 사용 될 시스템 및 기술의 개요를했다.

작업 제어

이 작업을 실행하려고하는 경우 다음 그들을 관리하는 방법이 필요 해요. 귀하의 작업 제어 시스템 (직업 서버에) 정말 잘 심지어 사무실 그리드를 실행하기 전에 밖으로 생각해야합니다. 따라서 첫째, 작업 제어 시스템에 대한 작업은 무엇입니까 :

  • 노동자의 요청에 따라 핸드 아웃 작업
  • 작업의 어떤 종류가 실행하는 근로자에​​게
  • 트랙 작업
  • 작업이 한 번만 실행됩니다 있는지 확인
  • 노동자 작업 데이터를 제공하거나, 그것을 어디에 적어도 그들에게 말해

또한이 시스템은 확장, 비즈니스 그리드 솔루션의 가치를 보는 등 여러 종류의 작업을 실행하는 연장 수있는 하나의 경우에 지금 작동 솔루션이 필요합니다. 그것은 '일반 노동자 떨어져 있기는하지만, 예를 들어, (즉 여러 코드베이스) 작업은 우선순위를 얻을 수 있습니다 하나 이상의 작업 유형이있을 수 있습니다, 결국 당신도 (업무의 각 유형에 대해 최적화된 여러 가지 다른 작업자 머신을 실행할 수 있습니다 '생각). 항상 시스템을 개발할 때 미래에 대해 생각하려고 단기 비전은 장기 좌절과 개발 시간 증가로 이어질 수 있습니다.

작업 서버

우리의 작업을에서 제어하는​​ 곳으로 필요 해요,이 등 IP 주소, 호스트 이름, URL이 (내부 DNS를 사용하여)이 있기 때문에 즉, 고정 리소스 위치를 가지고 여러분의 그리드에서 유일 시스템이어야한다 노동자는 어디 일자리 찾기 위해 알아야 할, 노동자는 작업 제어 시스템 (아닌 작업 제어 시스템이 근로자를 찾으)를 찾아야 해요.

작업 서버 자체가 정말 (기본 시스템에 어쨌든) 복잡한 작업을하지 않는다, 그것은 작업 손을, 작업 목록을 저장할 결과를 수신하고, 이후 나중에 검색을 위해 그들을 저장하기 위해 필요합니다. 어떻게 이러한 부품 (예 : '작업 밖으로 손') 정의하는 것은 매우 기본적인 수 있습니다. 나중에 우리는 관리 인터페이스를 추가, 수정, 삭제, 작업을 일시 중지하지만, 본 운동 이상입니다를 포함하는 시스템을 확장할 수 있습니다.

무엇이든지 다음 작업 서버가 귀하의 기본 처리 서버 내에서 실행되는 가상 머신 수 없다 그것은 제공된 여기에서 너무 많은 자원을 배출하지 않는 이유가 없습니다. 당신이 처리의 전체 주말을 잃게 될거야 금요일 저녁에 다운된다면 작업 서버는하지만 잠재적으로 당신에게 처리 시간의 가치 몇주 (혼자 기본 처리 서버에 비교할 때) 비용, 높은 가용성을 필요합니까 . 당신은 높은 가용성을위한 분산 환경에서 작업 서버에 관해서 고려할 수 있습니다.

기본 설정

우리 일이 서버에 대한 기본 설정 내 미약 서버 중 하나를 (리튬의 nux, M ySql, P HP는 것을)를 호출하는지 구성됩니다. the 근로자에​​서 실행되는 코드는 실제로 작업 제어 시스템 데이터베이스와 상호 작용하여 실행할 수있는 작업을 밖으로 작동합니다. 나중에 우리는 오히려 노동자는 노력 자체를 할 필요 이상의 작업을 밖으로 웹 서비스와 실제로 손을 만들 수 있지만, 지금 우리는 계속 사용 할게 키스 원리를 (바보, 간단하게!).

따라서, 세 만들 수 있습니다 mySQL 데이터 작업 처리 테이블. 이들은`일자리`,`jobRecords`와`jobResults`것입니다.

작업 테이블 난 여기 사용하고 SQL 버디에게 수있는 좋은 작은 대안 phpMyAdmin을 자사 쉽게이 (에 대한 다른 참조 centOS에 설치해서 phpMyAdmin 10 좋은 대안을 )

이 표는 5 간단한 필드로 구성되어 있습니다

  • ID : 유니 클리 작업을 식별
  • 이름 : 클라이언트 참조 또는 다른 식별자의 숫자 수도
  • 상태 : 당신은 작업, 예를 들어에서 어디 있는지 알아야
    • 0 : 시작되지 않음
    • 1 왔는데
    • 2 : 완료
  • started_by : 일을 시작이 누구지? 이것은 전적으로 필요하지만 가지고 좋은하지 않습니다. 당신의 네트워크에서 자신의 IP 주소로 추적 노동자를 제안 거라고
  • started_at : 언제 노동자가 작업을 시작 했나요? 우리가 다시 한번 작업을 선택하고 다른 노동자에 의해 처리를 시작하는 데 필요한 아는 시간 X 금액 이내에 완료하지 않은 작업을 추적함으로써. 근로자가 처리를 중지 / 어떤 수를 이유로, 정전, 충돌, 네트워크 손실 등 오프라인 갈 수있다

그것은이 테이블 통계를 추적하는 경향에 얼마나 많은 노동자들이 (분명히이 요구 사항을 작업을 주워보고 얼마나 오랫동안 작업했다, 카운터 보시려면 완료 시간을 열 수 있도록 몇 가지 추가 필드 확장 될 수 방법을 쉽게 1) 작업 우선 순위는 목록과에 갈 수 있습니다. 더 복잡한 작업 시나리오에서는 그것은 노동자가 (그리고 그에에만 적합한 근로자를 사용), 또는 심지어 어떤 종류의 노동자의 것이 될 필요에 대한 액세스를 필요 얼마나 메모리를 지정하는 것이 가능해 질 것입니다.

몇 가지 예를 들어 작업을 추가할 수 있습니다 :

예를 들어 채용 정보

다음 테이블을 다시 이해하기 매우 간단합니다, 이들은 우리 일을 기록하고 있습니다. 그들은 열을`jobs_id`하면 기본 작업 테이블에 연결되어 있습니다. The make up of this table very much depends on the data that you need to supply to your workers, lets make a very simple example where we have four columns:

  • id: ID of the record
  • name: Person's name
  • address: Person's address
  • jobs_id: The job ID that this record is linked to

The third and final table consists of a results table, it has much the same make up as our records table, and with the addition of some columns could be part of the records table:

  • job_record_id: Link the result to the job table
  • result: The result data

…and that's all you need for job control! (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`상태`=`1`= started_by __ME__; 
  2. 우리의 직업 선택 기준을 사용하여 직업을 선택하고 해당 근로자가 취급되는 제어 시스템을 말한다
      UPDATE`작업은`상태`= 1,`started_by`= __ME__,`started_at`= NOW () WHERE`상태`= 0 또는 SET
     (`상태`=`1`started_at> DATE_SUB (NOW (), 간격 X 시간))`ID`ASC 정렬; 

    우리 모두가 작업이 무단 충돌하거나가는 노동자의 경우에서 실행되도록 시간의 X 금액에 결과를 반환하지 않은 일자리를 잡아서.

  3. 다음 기록 스스로 다음 작업 세부 정보를 잡아 :
      *를 SELECT`일자리`어디서`started_by`= __ME__ 제한할 1;
     `job_records`FROM *를 SELECT WHERE`ID`= __JOBID__; 

우리가 결과 레코드를 삽입하고 완료 작업 표시 작업이 완료되면. 작업 스크립트의 일부 견고를 허용 언제든지 중지할 / 재개할 수로 기억하십시오. 이것은 작업이 때문에 직장에서 레코드의 개수를 확인하고 작업 제어 시스템에 다시 저장 결과의 숫자가 현명한 이동하기 때문에, 작업 제어 시스템을 업데이 트를 통해 중간 정직 시키실 것을 수 있습니다.

또한,이 작업이 정말해야 SQL - 쿼리 프레임을 선택하고 관리할 수 방법을 보여줍니다 반면 초록 직장 제어 있도록 당신은 웹 서비스, 파일 기반 시스템의 사용으로 전환하기로 결정하는 경우 XML 이나 다른 시스템의 숫자 그것 위의 코드에는 영향을 미치지 않습니다.

작업 구성

고려해야 할 다음 측면은 작업 크기와 구성입니다. 작업 구성 연주함으로써 우리는 속도, 프로세스 복제 및 안정성 사이의 훌륭한 균형을 공격할 수 있습니다. 몇 관람할 시나리오를 가지고 :

  1. 잡스는 각 실행하는 일일 의견 : 이것은 근로자 (시간 2/3rds에 대한 전력의 10 %를 기억) 각 작업을 처리 15 일 이내에해야한다는 것을 의미합니다. 이것은 분명히 현명한 구성하지 않습니다, 당신의 직업 크기가 너무 큽니다! 초기 노동자가 무단 (이것은 결과 플러스 재처리 시간을 반환하지 않은 데리러 시간) 가야는 처리 작업을 두 번 최소한 시간이 걸릴 것입니다. 이상에서는 처음 실종 가야 처리 이틀은 더 걸릴거야 당신이 직업을 극복하고 최악의 경우에 가고 작업을 계속 그렇게 쉽게 각각의 긴 유휴 기간이 끝날 때까지 해제 적어도 하나의 완전한 일을하고 있겠지.
  2. 작업이 실행 1 분 걸릴 : 이것은 노동자가 각 작업을 실행하는 데 약 15 분 걸릴 것을 의미합니다. 이것은 처음에는 이상적인 것처럼 보일 수도 반면, 당신이 점심 시간 동안 추가 작업 처리 이득, 커피 휴식 시간, 회의 등이 시나리오는 시스템의 다른 영역에 대한 부담을두고 있으며 자체적으로 문제를 소개하고 있습니다. 예를 들어, 첫번째 설치 / 처리 시간 비율은 따라서 시스템의 효율성을 잃고, 바로 내려 갈 것입니다. 네트워크는 지속적으로 일 작업하기 위해 일 서울시의 다양한 노동자 실망 직원에게 작업 정보를 스트리밍 될 것입니다. 당신은 또한 그것이 많은과 정기적으로 작품의 작은 조각을 많이 밖으로 요리를해야 귀하의 작업 처리 서버에 대한 자세한 부담을 줄거야. 직업 서버가 다운되면 마지막으로,이 상황에서 당신은 더 큰 작업 반면 uncompleted 작품의 거대한 다시 로그를 창조하는거야 것은의 작업 서버가 어려움을 겪고 있다고한지 모르고 살았 처리 계속 수 있습니다.

현실에서 그리드 설정을위한 아무 이상 구성 없을 것입니다, 많이 사용할 수있는 리소스, 등등 작업, 작업 처리 시간 요구 사항, 네트워크 기능, 그리고 종류에 따라 달라집니다. 그러나 몇 가지 지침은 다음과 같습니다

  • 크기 작업 때문에 각각의 근로자가 15 시간의 기간 동안 적어도 3-4 작업 (가장 긴 가능성이 유휴 기간)를 통해 얻을 수
  • 그 설치 시간이 처리 시간 (염두에두고 위의 지점을 베어링)에 비해 상당히 무의미한 될 수 있도록 작업의 크기와 재생합니다.
  • 일을 당신이 완료하는 데 예상 시간 더블 금액 (어쩌면 이하)에 완료되지 않는 경우는 사라 무단와 다른 노동자와 처리 시작 있다고 가정합니다. 이것은 (후속 작업이 실패한다면 아마도 이상) 전체에 대한 작업을 세 번 정상적인 길이까지 기다려야 할 수있다는 것을 의미합니다. 이 시간을 줄일 수 있지만, 너무 많은 당신은 정기적으로 처리 작업을 중복 시작할 수로 감소하지 않도록주의해야 할 수 있습니다.
  • 잡스는 최대한 외부 요구 사항을 독립적으로해야합니다. 작업 서버는 예를 들어, 오직 모든 작업의​​ 시작과 끝에 연락해야합니다.
  • 네트워크를 포화하지 마세요,이 두 가지 부정적인 영향을 것입니다, 당신의 낮 직원 네트워크가 실망과 문제점을 연결하여 그리드를 규모로만 악화될 것입니다 문제를 타이밍과 경험이있을 수 있습니다 사용하여 찾을 수 있습니다.
  • 확인 작업은 노동자에서 실행할 수 있습니다. 작업이 너무 메모리가있다면 집중 또는 디스크 공간이 집중 작업이 중단 시작하고 알 수있는 유일한없이 진짜 이유는 이유로 처리 작업의 수가 감소됩니다.

직업의 제출 결과

작업의 결과를 제출할 때 그 결과가 현재의 노동자가 몇 시간 동안 수면 상태에있다 특히, 다른 노동자로 제출하지 않은 확인하는 것이 중요합니다.

결과가 제출되면 결과의 수는 작업 내에서 레코드의 번호와 일치하는지 확인.

마찬가지로 이전에 명시된 바와 같이, 및 직업 검색 및 결과 제출에 결함 허용 기능을 구축, 강조를 통해 수 없습니다. 노동자 수 (그리고 가능성이 높습니다)이 시대의 가장 불편한에서 중단 모드로 진입이 요구가에 대한 음식을 제공 했었죠 수 있습니다. 또한 다시 한번 결과 제출 멀리 추상화하는 것은 처리 훨씬 쉽게 작업 제어 시스템에 향후 변경 맞추 도움이 될 것입니다.

개요

이 sectionÂ에서 우리는 작업 제어 서버에게 필요한 건 봤어 그리고 아주 기본적인 시스템 설정하는 방법. 우리는 제어 시스템에서 작업 방법과 최선의 가장 저희 사무실 그리드 시스템을 위해 작업을 구성할 수를 검색하는 방법을 논의했다. 완료하려면 작업 제어 서버에 다시 결과를 제출에 단락이나 두 발표했습니다.

  • 작업 제어 서버는 모든 작업 단위가 완료되는 작업과 보장을 관리
  • 선택 / 결과 제출 직장을 추상화함으로써 우리는 많은 문제없이 제어 서버의 기술을 변경할 수 있습니다
  • 그들이 당신의 네트워크 인프라에 너무 많은 압박을 가하고하지 않고도 신속하고 효율적으로 실행되는 것을 보장하기 위해 귀하의 작업을 구성하고, 정기적으로 처리 작업을 중복하지 않고.
  • 당신의 일상에 내결함성 및 오류 checkingÂ를 구축하는지, 노동자는 일시 중지 및 재개와 시간의 가장 불편할 수 있습니다. 결과가 이미 다른 작업자에 의해 제출되었는지 확인하는 것을 잊지 말아주세요.

다음 시간

에서 제 3 우리는 가상 가공 시스템을 만들고 유휴 시간 근로자가되기위한 윈도우 시스템을 설정합니다.

가상 환경을 사용하여 Office의 그리드 컴퓨팅 - 5 부

으로 (금) 2009년 12월 4일 오후 11시 3분

소개

나는 우리가 매일의 데이터 기록의 수백만을 처리하는 여러 일괄 작업을 실행하고 각 앉아서 매일 몇 시간 동안 아무것도하지 않고 모든 시스템에 대해 최근에 생각해 봤는데 회사에서 작동합니다. 우리 시스템의 처리 능력을 강화하기 위해 그 기계를 사용할 수있다면 좋지 않겠어요? 기사의 집합에 나는 사무실 고용의 잠재적인 이익 보는거야 그리드 virtualised 환경을 사용합니다.

In Part 4 we looked at using tools to ensure that we're running the latest version of the code and data sources so that obtained results are always up-to-date with the latest business information and logic.

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. So,

  • how many records can you process currently? Per Day? Per Hour?
  • How long does it typically take to turn around a job?
  • How much more capacity do you have?

There's also additional questions:

  • If your processing server (or one of your processing servers) goes down how will this affect your capabilities, will you be crippled?
  • What advantages do you hope/expect to get from a grid system?
  • Are your office machines capable of running the jobs?
  • Are your (or can you jobs be converted) to wrok in this style of running?

The last major point is to take your time on any major change like this. Update your processing code to work using the new methodology, benchmark again. Possibly set up your processing server to run a virtual machine, after all your processing server will just be another worker (just a very powerful one relatively). Allow the new process to settle.

전개

My suggestion would be to pop into the office one weekend perform all the installations and setup. Do this just before a fortnight's holiday and leave so other poor chap to deal with the consequences… maybe not…

Deployment for a system like this needs to be slow. Despite it being relatively simple to set up this system will affect your entire office infrastructure (well the digital one). Firstly, roll out to a couple of machines at a time, monitor network traffic, how the worker hosts perform on a day-to-day basis. You may need to alter your job configuration in response to your findings.

Once the system has settled with a few machines (lets say 10% of all office machines, ie 5) keep monitoring network traffic and host machine performance. Next benchmark again, you should now be processing 33% more jobs than your first benchmarks. Check this is so, or that you're at least in this ballpark. If not, investigate what is going on before moving on. Repeat this cycle until you happily have all office machines running without killing individual machine performance or grinding your network to a standstill.

At all times keep benchmarking, even after all deployments are made. Check how new code updates affect speed of your system, check all workers are reporting in and processing jobs. Slowly (very slowly) increment your job configuration to get the best from your workers and network.

Stop!

What if you want to stop your workers from running at some time? They are all out there running, regenerating, and trying their best to process data like hungry insects. The answer may seem obvious but its worth adding just in case its overlooked. Simply edit your processing script with an exit(0) or die() or some other statement to kill your processing job. An important reason why we always try to update to the latest processing script before any run!

Demonstration System

In order to write this set of short articles I created a very small grid to demonstrate the technologies and methodologies. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. By no means have I gone out and saturated a whole office with traffic and nor have I had access to a regular staff members PC to see how host performance was affected.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. On this I had installed mySQL server installed set up as a master in replication, PHP , and SVN linked through apache (for access via worker VM).

I then created a centOS worker machine on VirtualBox on a 6 year old windows XP laptop. I setup scheduled tasks as specified after copying the VM onto the machine and let it go.

The virtual machine was set up with PHP, subversion, and mySQL. I checked out a branch named 'worker' from my job control servers repository and made sure it could be updated using 'svn update'. Next I setup mySQL as a slave and checked that data was replicating from mySQL on the job control server down to the worker VM. After all this I setup the bash script and the cron job.

My processing script basically went along the lines of this (very simple stuff):

  • Read in the name field
  • Counted the number of similar names in a table from the data source held on the VM
  • Counted the number of names as above but splitting the name by spaces (ie forename, middle, surname)
  • Repeated this process 1,000 times

Each job took approximately 20 minutes to run. At one point I opened several copies of the worker VM on the windows laptop and watched the jobs be checked off by each of the worker IP addresses. At this point I also confirmed that replication automatically restarted.

Leaving the laptop to idle resulted in a worker starting to process jobs from the job control server. When resuming laptop usage there was a delay of about 30-60 seconds, this is a fair amount of time and staff would need to be made aware that their machine may pause for a short while when returning to the machine. Newer machines may not have a pause of this long. The benefit of the amount of processing performed by these machines during idle periods would more that outweigh staff members having to wait a short period (say 1 minute) on arriving at their machines of a morning (I frequently wait longer that this for a Windows Defender update to take place) provided they were made aware of this (useful time to grab a morning coffee!).

Overall I feel confident that I have demonstrated the technologies that could be used to create such a system. I have shown that such a system does work on a (very) small scale and with some more experimenting could be scaled up utilise the resources of an office's machines. If I don't get to the point of doing this I would be very interested to know/see when someone else does.

Conclusions / Evaluation

The next obvious step would be to actually get a real world example and start to deploy a system such as this within an office environment and see what happens. Asking a business to commit to this without a trail blazing company to prove the technology and effectiveness may be a little difficult. Grid/Distributed computing is very popular is some circles and has some large applications (BIONC, SETI@Home, Folding@Home, etc). 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.

I created a basically free system using mostly open source software and tools available in almost any office. The technologies were basically demonstrated and show to perform and work as expected. Hopefully I have show that with not much work and with a very simple setup you can deploy an office grid computing system that is powerful, cheap, and scalable all at the same time.

Once a system is up and running there is almost no end to the amount of customisation and improvements you can make. For example statistics / benchmarking can easily be added showing the worth of such a system every day. New machines can be added quickly and easily as and when they arrive with upgrades to existing hardware bolstering your processing power.

I hope you've enjoyed reading this series of articles and its given you food for thought on running an office grid system. The solution presented here won't necessarily work in all situations but should be adaptable to allow you to get your data processing done using your own solution.

Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.

Zend Framework: Fundamentals – Review

By , Saturday 28th November 2009 10:42 pm

My employer recently paid for a group of us developers to take the Zend Framework: Fundamentals course, here I'll summarise my thoughts and opinions on the course for others. For those looking to save time, here's my summary:

For developers who haven't had time to look at the Zend Framework this course (Zend Framework: Fundamentals) offers a good overall picture of the framework introducing you to the key areas and giving enough information in order to continue. For those who have spent time looking at the framework and have followed one or two tutorials this course does not offer much beyond.

배경

I've been a PHP developer for around 5-6 years, and have started working with the Zend Framework on a component basis over the last 6 months. I've developed and/or been a developer on a couple of small Zend Framework MVC sites. I'll be honest, I haven't had a huge amount of exposure to other frameworks from a coding point of view but have spent several hours researching the project websites and evaluating them. The framework and the community surrounding Zend Framework it is quite exciting and there seem to be huge possibilities in where its going.

About the Course

The course is delivered over 9 two hour webex sessions (with a 10-minute break in the middle). The time is spent going through a set of slides provided by Zend with discussion at any time. You can use a microphone to talk to the instructor, but to be honest I didn't see anyone use anything more than the chat window. In addition a VMWare Ubuntu machine is provided that has example code and projects set up an a trial version of Zend Studio. The course leader talks to attendees either over an integrated VoIP solution, or you can dial in using one of the many worldwide dial in numbers.

During the course the material consists of a brief overview of the Framework and the MVC pattern before heading into a sample guestbook application. The discussion demonstrated bootstrapping, Zend_Application, Db Tables, Database access, Forms, Filtering, ACL, Validating, etc, etc. Basically covering all the topics you'd require to get a basic site up an running all the time giving you the tools to go and get more advanced in the framework (although this did amount to 'See the website' much of the time).

Time is given to code up some examples, and to develop the 'guestbook' and simple 'wiki' application. Personally I felt that providing the code or each app and then asking us to develop what was essentially a copy alongside didn't really provide a good learning experience. I would have preferred to develop an application similar, but not identical. to the example application with the benefit of having a guide to refer to. Alternatively building the applications from scratch with the demonstrator would of possibly led to more questions about why and how , thus giving a better understanding of the framework, after all you can look up specifics after the course.

The last lecture consisted of working on the wiki application with help/guidance from the instructor. After the course feedback was taken, it was emphasised several times through the course that Zend takes feedback very seriously, in fact apparently our version of the course was quite new. Some of the other developers in the company will be taking the course soon so it will be interesting to see if this has happened.

The course style was informal, allowed for feedback and collaboration between attendees and the instructor. The course leader was friendly, approachable (email addresses were shared for questions), and whilst his presentation from the slides was a bit shaky seemed fully competent in the framework. He was clearly someone who used the framework on a regular basis rather than someone who is taught to teach the course, I liked the 'real world' experience in that respect.

Overall Feeling

In some ways I found the course a waste of time, in others it was very handy. Hopefully I'll get my reasons across clearly, and maybe provide some food for thought or useful feedback (knowing me this is unlikely!).

For myself this course was aimed at too low a level. Having gone through the quickstart guide, read Rob Allen's Zend Framework in Action, and worked with the framework a little I didn't really get anything too much. I would of liked the course to pick up from the end of the quickstart and develop additional skills.

That said, the course title does clearly state “Zend Framework: Fundamentals ” and in that aspect the course achieves what it sets out to do. Other members of the development team that haven't spent the time looking into the framework finished each session with enthusiasm and asked questions which was really nice to see.

All was not lost, it was good to spend time confirming the basic details of the framework and get to ask a couple of questions in areas where I wasn't 100%. It was also time that I got to sit down each day and think about coding using the framework and future projects, something I wouldn't of been able to do otherwise (can you imagine your company agreeing to that? :) ). Last but not least you also get a nice certificate from Zend to say that you attended the course (albeit by email).

Zend Framework Certification

This was one question that kept coming to mind during the course, would it prepare me for the certification? The quick, easy is a resounding No . The course instructor was quite clear on that with the additional advice that for the certification you should really be using the framework on a day to day basis and feel very comfortable and confident in its usage and methodologies.

개요

Given everything I've written above, I'll summarise everything in two easy bullet points:

  • New to Zend Framework: This course does exactly what you'd expect, it gives you a nice introduction to the framework and a good grounding on the basics from which you can build. The course seems to generate interest and enthusiasm for the framework amongst developers.
  • Used the Zend Framework: While it was nice to shore up some of the very basics I felt the time, effort, and funds to take the course could of been better spent elsewhere. It will be nice to see Zend create a new higher level course to take developers to the next level – at least to the standard of certification and beyond. For that I would sign up immediately.












파노라마 테마로 Themocracy

온라인 지금은 8 방문자
4 인, 4 봇​​, 0 회원
Max visitors today: 13 at 07:06 am UTC
이번 달 : 2011년 12월 9일 세계 협정시 오후 2시 18분 48
올해 : 28-03-2011 세계 협정시 오후 10시 40분시 130
모든 시간 : 28-03-2011 세계 협정시 오후 10시 40분시 130