2004년 8월 24일 화요일

모듈간 data file 교환을 위한 방안

전제조건
. 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 락파일명

댓글 없음:

댓글 쓰기