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