소개
그날 각각의 데이터 레코드를 처리하는 업무에 수백만 달러의 작업을 일괄 실행 많은 우리 기업과 제가 각각의 주변 왔던 기계를 앉아 있었 다 생각하고 최근 몇 시간 동안 아무것도하지 않고 매일. 시스템의 처리 능력을 강화겠습니까 이러한 기계를 사용할 수 좋으면 우리가 수없는가? 기사 집합이 있음 난 사무실에 고용의 장점에있는 잠재력을보고가는거야 그리드 환경을 사용하여 가상.
에 제 1 부 나는 그리드를 사무실 만들 준 개요를 위해의 좋습니까 왜 시스템이 이유 잠재적인 논의 일부의과 기술뿐만 아니라 사용하고 난됩니다.
작업 제어
당신이가는 경우에는 당신이 그들을 관리하는 방법이 필요 할거야 다음 작업을 실행합니다. 귀하의 작업 제어 시스템 (직장 서버에서) 정말 잘 심지어 사무실에서 그리드를 실행하려고 시도하기 전에 생각해야합니다. 그래서 첫째, 무슨 일을 제어 시스템에 대한 작업 위치 :
- 근로자의 요청에 따라 작업을 밖으로 손
- 노동자는 무슨 작업의 종류 실행 해
- 트랙 작업
- 작업이 한번 실행에만있는 것으로 확인
- 또는, 노동자에게 업무 데이터를 제공 적어도 어디에 그것을 얻기 위해서 그들에게
또한이 시스템은 비즈니스 그리드 솔루션의 가치를보고 같은 작업의 여러 유형을 실행하는 확장할 수 있습니다 확장할 수있게 이제 하나의 사건에서 작동하는 솔루션이 필요합니다. 예를 들어, 작업 우선순위를 얻을 수 있으며 하나 이상의 일자리 유형은 결국 당신도 그것은 '일반 노동자 떨어져 있기는하지만 (작업의 각 유형에 대한 최적화된 여러 작업자 기계를 실행할 수 있습니다 (즉, 여러 개의 코드베이스) 존재할 수 있습니다 '생각). 개발 시스템은 단기 비전은 장기적인 좌절감과 개발 시간 증가로 이어질 수있을 때 항상 미래에 대해 생각하려고 해요.
작업 서버
우리는 이것은 고정된 리소스 로케이터를 가지고 당신의 그리드에서 유일 시스템이어야에서 IP 주소, 호스트 이름, URL이 (내부 DNS를 사용하여), 등등이 있기 때문입니다가 될 우리의 작업을 통제하는 곳으로 필요 해요 노동자는 어디에 일자리를 찾아 알아야, 노동자는 작업 제어 시스템 (하지 작업 제어 시스템 노동자를 찾으) 찾아야 해요.
작업 서버 자체가 정말 복잡한 작업을 (기본적인 시스템 얘기할에서)가 없습니다, 그것은 잡스가 밖으로, 손으로 작업의 목록을 저장하는 결과가 나타납니다, 그리고 이후에 나중에 검색을 위해 그들을 저장할 필요합니다. 이러한 부품 (예 : '작업 밖으로 손') 아주 기본적인 수 있습니다 정의된 방법. 우리는 추가, 수정, 삭제, 작업을 중지 관리 인터페이스를 포함하도록 시스템을 확장할 수 있지만 나중에 본 운동 이상입니다.
아무 이유없이 당신의 일자리 서버가 기본 처리 서버 내에서 실행되는 가상 머신 수 없다는 다음이든지있다는 그곳에서 너무 많은 리소스를 유출하지 않습니다 제공됩니다. 그것은 잠재적으로 당신에게 주 처리 시간의 가치 정도 (혼자 기본 처리 서버에 비교할 때) 원가계산, 당신은 처리 주말 내내 잃게 될거야 금요일 저녁에 다운되면 일자리 서버 단, 필요한 높은 가용성을 않는다 . 당신은 높은 가용성을위한 분산 환경에서 작업 서버를 퍼팅하는 것이 좋습니다.
기본 설정
우리의 일이 서버에 대한 기본 설정)는 HP의 피, 윌 ySql 미터, nux는 리튬의 구성 서버 미약의 어떤 난 전화 한 제 (. the 노동자에서 실행되는 코드는 실제로 작업 제어 시스템 데이터베이스와 상호 작용하여 실행할 수있는 작업을 밖으로 작동합니다. 나중에 서비스를 웹 수도 만드는 우리는 스스로를 직장들에게 밖으로 힘든 작업을 대신보다하는 데 노동자 손을 사실에 대한하지만 지금은 계속 사용거야 우리가 비벼 원리를 (멍청한 계속 그것을 간단!).
그래서, 셋 만들 수 MySQL의 작업을 처리 테이블. 이들은`작업이 될`,`jobRecords`, 그리고`jobResults`.
여기에 제가 사용하고 SQL 버디에게 멋진 작은 대안을 위해 phpMyAdmin 단지 :해서보고 다른 사람을위한 (centOS는 쉽게 설치에 10 그레이트 대안을 phpMyAdmin으로 )
이 표는 5, 단순한 필드로 구성되어 있습니다
- 자료 ID : 유니 클리 작업을 식별
- 이름 : 식별자 다른 그럴지 클라이언트 참조 번호 중 하나, 또는
- 상태 : 당신은 예, 어디에 있대 작업이 필요
- started_by : 작업을 시작하고 누구예요? 이것은 전적으로 필요하지 않지만 가지고 좋은 것입니다. 난 당신의 네트워크에서 자신의 IP 주소에 의해 노동자를 추적하는 것이 좋습니다 싶어요
- started_at : 작업을 시작하면 한 작업자가? 우리가 다시 한번 작업을 데리러와 다른 노동자로 처리를 시작할 필요가 아는 시간의 X 금액 이내에 완료하지 않은 작업을 추적하고 있습니다. 근로자 처리를 막을 수 / 이유 숫자, 정전, 추락, 네트워크 손실 등 오프라인으로 이동
이 테이블은 작업이 많은 노동자들이 (분명히 이것은 경향 데 필요한 작업을 주워 방식을 볼 수, 카운터는데 얼마나 걸린보고, 마무리 시간 열을 추적 통계가 가능하도록하기 위해서 몇 가지 추가 필드를 사용하여 확장할 수있는 방법은 간단합니다 1) 작업 우선 순위 목록에 갈 수 및. 보다 복잡한 작업 시나리오에서는 그것은 노동자가, (그리고 그러므로 오직 적합한 근로자를 사용하는)에 액세스해야하는 것이 얼마나 메모리 또는 심지어 노동자의 유형은 필요한 것입니다 무엇 지정하는 것이 가능해집니다.
수있는 몇 가지 예를 들어 작업을 추가 :
다음 테이블은 다시 아주 이해하기 간단합니다, 이들은 우리의 일이 기록하고 있습니다. 그들은 열을 기준으로 기본 작업 테이블에 링크된`jobs_id. 우리가 네 컬럼을 가지고 매우 간단한 예제를 만들 수 있습니다, 대단히 당신이 근로자에게 공급하는 데 필요한 데이터에 따라이 표의하다 :
- 자료 ID : 레코드의 ID
- 이름 : 사람의 이름을
- 주소 : 사람의 주소
- jobs_id : 작업 ID로이 링크되어 기록
세 번째와 마지막 테이블 결과 테이블의 구성, 지금까지 많은 동일한 레코드가 테이블의 일부가 될 수있는 몇 가지 항목의 추가 기록 테이블로와 함께하다 :
- job_record_id : 작업 테이블에 링크 결과를
- 결과 : 결과 데이터
그리고 당신은 작업 제어에 필요한 모든 것! (아주 기초적인 수준이라도) 내 경우에는 내가 처리 내 데이터가 위치한되었습니다 다른 테이블을 가리 켰지만, 이건 그냥 쉽게, 시뮬레이션 코드를 실행하는 매개 변수를 파일을하고 수도, 당신이 그것을 이름.
직업 선택
이전에 언급한 바와 같이, 노동자 그래서 우리가 진짜로해야 모든 처리를 필요로하는 정보를 얻는 직업을 찾을 수있다, 지금은 우리를 위해 우리의 일이 경영을 할 것입니다. 우리가 어떻게 이런 짓을 했을까? 그럼 우리의 직업 선택 기준을 선택하고 작업에 봐, SQL에서 나는 다음과 같은 한 :
- 완료하지만 우리 근로자에서 표시되지 않으며, (가장 쉬운 IP 주소 될 식별자로 대체 __ME__) 그들을 재설정하는 작업을보세요 :
업데이트`채용`설정`상태`= 0`어디 상태`= 1,`started_by`= __ME__;
- 직업을 선택하고 해당 근로자가 취급되어 제어 시스템 말해, 우리의 직업 선택 기준을 사용 :
업데이트`채용`설정`상태`= 1,`started_by`= __ME__,`started_at`= 이제 () 여기서`상태`= 0 또는
(`상태`= 1``started_at> DATE_SUB (현 (), 엑스 간격 시간)) 명령에 의해이`오름차순`신분증;
우리는 모든 작업이 노동자가 충돌하거나 무단 외출의 경우에 실행되도록 시간의 X 금액에 결과를 반환하지 않은 일자리를 잡는 있습니다.
- 다음은 자체 기록을 다음에 작업 내용을 잡으 :
* 선택로부터`채용`어디`started_by`= __ME__ 제한 1;
* 선택로부터`job_records는`어디`=`id를 __JOBID__;
작업이 완료되면 우리는 우리의 삽입 결과 기록하고 완료 작업을 표시합니다. 작업이 일시 중단 수 / 스크립트의 일부 견고 수 있도록 언제든지 다시 기억하십시오. 그것은 작업이 너무 일자리의 레코드의 개수와 현명한 조치가 되겠죠 작업 제어 시스템에 다시 저장한 검색 결과의 개수를 확인하고, 작업 제어 시스템을 업데이 트를 통해 절반쯤를 일시 중단되는 수도 있습니다.
또한,이 반면 정말 수있는이 작업 방법을 보여줍니다으로 선택합니다 SQL 쿼리 프레임 당신과 관리에서 추출 기반 시스템, 파일, 서비스를 웹 사용하는 작업 제어를 수 있도록한지 여부로 전환 XML을 , 또는 기타 시스템의 숫자는 그것이 위의 코드에 영향을주지 않습니다.
작업 구성
고려해야 할 측면은 다음 작업 크기와 구성입니다. 직업 구성에 재생하여 우리는 속도, 프로세스 복제 및 안정성 사이의 훌륭한 균형을 공격할 수 있습니다. 부부에게 소문이 시나리오를 가지고 :
- 작업이 실행 걸릴 일일에게 각 : 이것은) 시간이 의미 2/3rds위한 권력의 네 10 (기억이 작업을 처리 각각 15 일 근로자가 필요한 %를. 이것은 분명히 현명한 구성하지 않습니다, 당신의 직업 크기가 너무 큰 방법입니다! 그것은 (그것이 결과를 더한 재처리 시간이 반환되지 않았음을 데리러 시간) 최초의 노동자가 무단 가야 처리 직장을 얻기 위해 시간을 두 번 이상 걸릴 것입니다. 이상에서 당신은 이상 계속 당신은 잡스가 똑딱이 방법 유휴 기간이 긴 끝에 각각의, 적어도 하나에 의해 전체 작업을 삭제 쉽게 줄이 것이 걸릴 일 실종 가장 먼저해야 공정 작업에 최악의 사건.
- 작업이 실행 분 1 의견 :이 작업을 각각의 의미를 실행 15 분 정도 걸릴 직원들은. 반면이 처음에는 이상하게 들리겠지만, 당신은 등이 시나리오가 시스템의 다른 영역에 대한 부담을 내건 자체적으로 문제를 도입 점심 시간, 커피 타임, 회의, 중 추가 작업 처리를 습득합니다. 예를 들어, 먼저 설치 / 처리 시간 비율 따라서 시스템의 효율성을 잃고, 바로 내려 갈 예정입니다. 네트워크가 지속적으로 작동하도록 그들의 일 하루 동 아르 좌절 직원 다양한 노동자에게 일자리 정보를 스트리밍 될 것입니다. 당신은 또한 그것은 많이하고 정기적으로 작품의 작은 조각을 많이 밖으로 요리한다대로 작업 처리 서버에 더 많은 부담을거야. 마지막으로,이 상황에서 당신의 직업 서버가 처리를 전엔 작업 서버가 어려움을 겪고 있는지 몰랐습 지속적인 수도의 큰 작업 반면 uncompleted 작품의 거대한 다시 로그인을 창조하는거야 다운되면.
실제로 많이 사용할 수있는 리소스, 작업 처리 시간 요구 사항, 네트워크 능력 등 직업의 종류에 따라, 귀하의 그리드 설정을위한 아무 이상적인 구성이있을 것입니다. 그러나 몇 가지 지침은 다음과 같다 :
- 크기 잡스는 이렇게 각각의 근로자는 15 시간 (가장 긴 가능성이 유휴 기간)의 기간 동안 적어도 3-4 작업을 통해 얻을 수있는
- 그 설치 시간이 상당히 무의미한 처리 시간 (마음 위 지점에 베어링)에 비해 됐을 작업의 크기와 재생합니다.
- 일은 자네가 그렇게 그 간 탈영을지지하고 다른 작업자와 함께 작업을 시작해야 완료하는 데 예상 (어쩌면 간단히보기) 두 시간의 양을를 완료하지 않는 경우. 이것은 그것은 (아마도 더 이상 후속 작업이 실패하는 경우)을 완료하는 세 번 직장의 정상적인 길이를 기다려야 할 수도 있습니다을 의미합니다. 당신은 시간이 절감하려는 수 있으나 정기적인 기초에 대해 작업을 처리 조심 중복되지 시작할 수 있습니다 당신만큼 너무 줄이기 위해 그것을.
- 잡스는 최대한 외부의 요구 사항을 독립해야합니다. 작업 서버는 예를 들어, 단지 시작과 끝 모든 직업에 연락해야합니다.
- 네트워크를 포화하지 마,이 두 가지 부정적인 영향을 갖습니다, 당신의 낮 직원은 네트워크와 좌절 문제는 연결은 당신의 격자 규모로 악화될 것입니다 문제를 밖으로 타이밍을 경험 수를 사용하여 찾을 수 있습니다.
- 보장 잡스는 직원에 실행할 수 있습니다. 잡스는 너무 메모리를 집중되는 경우 또는 디스크 공간 집약적인 작업이 중지됩니다 당신이 알 수있는 유일한 이유는 진짜 이유와 처리 작업의 수가 한 방울입니다.
직업의 제출 결과
작업의 결과를 제출할 때 그 결과가 현재의 노동자 한동안 휴면되었습니다 특히, 다른 노동자 제출되지 않았는지 확인하는 것이 중요합니다.
언제 결과는 결과의 숫자는 작업 내에서 레코드의 번호와 일치하는지 확인 제출됩니다.
그리고, 이전에 명시된 바와 같이 직업 검색 및 결과 제출에 내결함성를 구축, 강조 끝날 수 없습니다. 노동자 수있는 가장 시대의 불편한에서 모드를 중지로 가서이가 음식을 제공 했었죠해야합니다 (그리고 가장 가능성이 높습니다.) 또한 다시 한번 더 쉽게 처리하여 작업 제어 시스템으로 미래의 변화에 맞추 도움이 될 것입 결과 제출 멀리 추출.
개요
이 sectionÂ에서 우리는 작업 제어 서버에게 필요한 건 무엇을 어떻게 설정하는 아주 기본적인 시스템을 얻으려면 받게요. 우리는 제어 시스템에서 작업을 검색하는 방법과 최상의 작업을 구성하려면 논의 가장 저희 사무실 그리드 시스템. , 작업 제어 서버에 다시 결과를 제출에 대한 단락을 두 끝내에게 수여되었다.
- 작업 제어 서버가 작업을 관리하고 모든 작업 단위가 완료되는지 확인합니다
- 직장이 / 결과 제출을 우리는 많은 문제없이 제어 서버의 기술을 변경할 수 있습니다 선택 추출함으로써
- 구성 작업이 그들이 당신의 네트워크 인프라에 너무 많은 압박을 가하고없이 정기적으로 처리하는 작업을 복제하지 않고도 신속하고 효율적으로 실행할 수 있는지 확인합니다.
- 확인하십시오 당신이 루틴에 내결함성 및 오류 checkingÂ을 구축 즉, 근로자는 일시 중지하고 다시 시작하고 가장 시대의 불편. 결과는 이미 다른 노동자에 의해 제출되어 있는지 확인하십시오.
다음번에
에 제 3 부 우리는 기계를 만들고 처리하는거야 우리의 가상 세계와 노동자 시간이 될 유휴 대 머신을 설정 우리의 윈도우.