최근에 진행하고 있는 프로젝트에서 단위, 통합 테스트를 진행하며 매일을 바쁘게 살아가고 있는 것 같다. 생각보다 공부 시간을 내기 어렵지만 틈틈히 시간이 날때마다 공부를 하고 있는 요즘이다.
지난 장에서는 워크플로우의 개념에 대해서 알아보았다. 이번 시간에는 워크플로우 실행에서 발생할 수 있는 오류와 이를 신속히 회복할 수 있는 방법에 대해 배워보도록 하자.
1. 워크플로우 관리 도구의 오류 및 회복 방법
1-1. 복구와 플로우의 재실행
- 복구(recovery)의 필요성
- 워크플로우 관리 도구를 설계할 때 수많은 오류를 자동으로 회복하긴 어렵다.이러한 이유로 수작업에 의한 ‘복구(recovery)’를 전제로 한 태스크 과정을 설계하게 된다.
- 위 설계를 통해 워크플로우 실행 과정에서 실패한 태스크는 모두 기록 되며, 이를 추후에 재실행함으로써 모든 작업이 복구 되도록 진행된다.
- 재실행(retry, 재시도와 동일)의 필요성
- 수작업으로 복구를 할 수 있지만 만약 하나의 태스크에서 여러 번 오류가 발생한다면 이는 자동으로 해결할 수 있으면 좋을 것이다.이를 위해 태스크 단위에서 발생하는 오류는 자동으로 태스크를 ‘재실행(retry)' 시키게 된다.
- 일반적으로 태스크 실패 후 약 5~10분의 간격을 두고 태스크를 재실행시킴으로써 오류를 해결하게 된다.
- 백필(backfill)의 필요성
- 태스크의 실패는 단순히 몇 번만 발생할 수 있지만 일정 기간동안 지속적으로 실패가 발생할 수도 있다.이와 같은 상황에서 정해진 일자 동안의 워크플로우를 전체 재실행시키는 것을 ‘백필(backfill)’이라고 한다.
- 실행 일자에 대한 변수 파라미터를 바꾸면서 태스크를 전체 재실행하는 방식으로 실행되는 것이 특징이다.
1-2. 재실행의 안정성 유지
지난 4장에서 데이터의 중복을 피하기 위한 원칙을 기억하는가? 워크플로우의 개별 태스크는 어느 시점에 실패하는지에 따라서 데이터가 전송되지 않을 수도 있고, 혹은 중복되어 전송될 수도 있다. 그러므로 각 태스크는 ‘마지막까지 데이터 전송에 성공’하거나 ‘전송에 실패하면 데이터를 저장하지 않는다’라는 원칙을 지켜야 한다.
이러한 원칙에서 데이터를 가장 안정적으로 보장하는 방법은 태스크 실행시 데이터를 덮어쓰는 방법이다. 테이블을 Drop하고 다시 만들거나, 데이터를 추가(append) 및 치환(replace)하여 중복을 방지하는 것이다. 하지만 이러한 방법도 데이터를 찾고 삭제하는 과정에서 성능 저하가 발생할 수 있기 때문에 사용하게 된 것이 ‘테이블 파티셔닝’이다.
테이블 파티셔닝(table partitioning)이란?
- 특정 기간(ex. 1시간, 1일, 1주일 등)을 기준의 파티션 단위로 테이블을 분할하는 방식파티션 단위로 데이터를 치환함으로써 재실행의 안정성 유지 가능파티션 단위의 작업에서 가장 효율적으로 사용되는 명령어는 TRUNCATE, INSERT OVERWRITE 구문이다.
1-3. 워크플로우 외부 시스템의 안정성을 유지하는 방법 - 관련 용어 설명
위에서 워크플로우 관리 도구를 안정적으로 실행시키는 방법에 대해 배워보았다. 그러나 때로는 외부 시스템에 문제가 발생하여 워크플로우 실행 오류를 일으킬 수도 있다. 이러한 상황을 대비하여 외부 시스템의 문제를 해결할 수 있는 방법(=외부 시스템의 부하 컨트롤)에 대해 알아두는 것이 중요하다.
- 워크플로우 실행시 발생하는 서버 요인 및 해결 방안
- 타임 아웃이란?
- 타임 아웃 시간을 지정하여 정해진 시간 내에 태스크가 끝나지 않으면 강제로 중단되는 것을 의미한다.타임 아웃이 존재하면 시스템상 문제로 태스크가 끝나지 않아 시스템의 자원을 모두 낭비하는 상황을 방지할 수 있다.
- 병목 현상이란?
- 하나의 태스크로 인해 전체 시스템의 성능과 용량이 제한을 받는 상황을 의미한다.일반적으로 CPU 및 메모리 사용량이 정해진 범위를 넘어서는 경우 병목현상이 발생한 것이기 때문에 해결 조치가 필요해진다.
최근 단위 테스트를 진행해보며 워크플로우 설계, 실행 및 오류 확인, 워크플로우를 통한 스케줄 생성 의 업무를 수행해볼 수 있었다. 이 내용을 공부하면서 내가 수행했던 업무의 필요성을 배울 수 있는 시간을 가질 수 있어 더 관심을 가지고 읽게 된 챕터인 것 같다. 그리고 실제 업무를 수행하며 마주했던 병목현상과 워크플로우 타임 아웃이 발생하는 원인을 알 수 있었고, 앞으로의 프로젝트 수행시에도 이 부분에 대해 각별히 주의하며 시스템을 설계할 수 있는 DA로 성장해나가야겠다고 생각하게 되었다.
니시다 케이스케 지음 / 정인식 옮김
📘참고 서적: [빅데이터를 지탱하는 기술]
'[기술서적]' 카테고리의 다른 글
[빅데이터를 지탱하는 기술] Chapter5.빅데이터의 파이프라인 - (1) (0) | 2023.06.02 |
---|---|
[빅데이터를 지탱하는 기술] Chapter4.빅데이터의 축적 - (3) (0) | 2023.06.01 |
[빅데이터를 지탱하는 기술] Chapter4.빅데이터의 축적 - (2) (0) | 2023.06.01 |
[빅데이터를 지탱하는 기술] Chapter4.빅데이터의 축적 - (1) (0) | 2023.06.01 |
[빅데이터를 지탱하는 기술] Chapter3.빅데이터의 분산 처리 - (2) (0) | 2023.06.01 |