전제조건
. shell script를 사용한다.
. cron을 이용하여 batch로 주기적으로 자료를 생성한다.
. 자료의 생성시간을 완벽하게 예측할 수 없다.
(loose한 동기화 필요)
. data파일이 생성 즉시 처리되어야 한다.
. data file 교환은 copy, remote copy에 의해 일어난다.
아이디어를 얻은 곳
. 전자공학의 회로 모델
. clock, clock skew, polling, interrupt에서 차용해 옴.
. Unix에서 mv는 순간적으로 일어나는 operation임.
개념
. clock의 frequency = cron의 실행 주기
. polling = incoming directory scan(shell의 ls명령)
0. 파일명 정하기
0.1 모듈명이나 디렉토리명과 겹치지 않게 한다.
0.2 모듈명이나 디렉토리명에는 .을 넣지 많고 파일명에는 .을 넣는 다.
(헷갈리지 않게 하기 위해)
1. input/output data 파일명에 날짜/시간을 넣는 다.
예) url_count.2004week10
url_count.2004033007 : 2004년 3월 30일 7시에 생성된 자료
anchor_url.200408101402 : 2004년 8월 10일 2시 2분에 생성된 자료
장점 :
1. data를 시간별로 관리가능
2. debugging 시에 유용
3. system fail 같은 상황에서 과거 data로 복구 가능
4. file의 meta 정보로 기록되는 시간은 물리적인 정보이고 file명에 기록되는 시간은 논리적인 정보임.
(날짜/시간은 파일의 생성시점을 기록한 것이 아니라 processing 과정상의 electric pulse clock과 같은 역할.)
5. data의 history를 남길 수 있음.
(지속적으로 보관 혹은 최근 n일의 data 보관 등을 할 수 있음.)
2. input, output 파일 관리
2.1 파일 복사시 input.dat 라는 파일이 있다면
input.dat.copying이라는 중간 파일로 복사하고 복사가 완료되면 input.dat로 파일명 변경.
(input.날짜시간.dat -> input.날짜시간.dat.copying -> input.날짜시간.dat)
예) scp input.dat 대상서버:/input.dat.copying
ssh 대상서버 "mv input.dat.copying input.dat"
2.2 incoming directory에 들어온 파일을 processing할 때
(input.날짜시간.dat -> input.날짜시간.dat.processing -> input.날짜시간.dat.done)
예) mv input.dat input.dat.processing
데이터 계산/ouptut 파일 생성
.
.
mv input.dat.processing input.dat.done
2.3 output file 생성하기
(ouput.날짜시간.dat.generating -> output.날짜시간.dat)
예) fopen(output.dat.generating);
작업
fclose()
mv output.dat.generating output.dat
장점 :
1. 현재 processing 중인 파일을 알 수 있음.
2. script 실패시 어느 시점의 어느 파일이 문제인지 찾을 수 있고
다음 작업이 진행되지 않아서 복구가 쉬움.
3. 각 작업들을 쉽게 syncronize 할 수 있음.
-> 파일명을 보고 다음 작업 수행 여부를 결정.
3. lock 사용하기
3.1 lock이 필요한 상황
a. cron의 scripts가 중복 실행되는 것을 막을 때
b. db, file 같은 data가 중복 access되는 것을 막을 때
3.2 lock을 위한 Unix utility : lockfile
lock 걸기 : lockfile /락파일명
lock 풀기 : rm -f 락파일명
댓글 없음:
댓글 쓰기