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