bionote.net

큐잉(queueing) 기능의 구현


단백질의 구조를 자동으로 예측해주는 서버를 구축해서 시험 가동하던 중 한가지 문제가 생겼다. 한꺼번에 다수의 쿼리가 수행될 경우에 전체 시스템이 느려지는 현상이 발생한다. 따라서 큐잉 기능을 추가할 필요가 생겼다.

요구사항은 다음과 같다.
  1. 다수의 작업이 입력되더라도 가장 먼저 입력된 하나의 작업만을 프로세서에서 처리되도록 한다.
  2. 현재 작업큐의 상태를 모니터링할 수 있어야 한다. 이때 보여주는 정보는 작업명, 인덱스, 입력시간을 반드시 포함한다.
  3. 작업이 큐에 대기하는 시간을 최소한이 되도록 효율적이어야 한다.

조사해 본 바로는 UNIX의 named pipe를 이용하면 큐잉 기능을 구현하는 것이 가장 간편해 보였다. 실제로 병철 선배가 같은 방식으로 큐잉을 구현해봤는데 간단하고 지금도 정상적으로 작동하고 있다고 한다. 파이썬에서도 mkfifo() 함수를 제공하고 있어서 일반파일처럼 read(), write() 함수로 다룰 수 있다 [조성준, [예제] FiFO(Named Pipe), http://www.openphp.com].

사용자로부터 입력을 받으면 1) 웹프로그램은 작업큐에 작업을 입력한다. 각각의 정보를 '\0'로 구분해서 하나의 작업이 하나의 라인에 저장되도록 한다. 2) 서버 프로그램은 데몬처럼 돌면서 FIFO에 read()를 수행하고 read()가 성공하면 실제 구조 예측 프로그램에 의해서 작업이 수행되도록 한다. 3) 구조 예측 작업이 끝나면 다시 read()를 시도하는 일부터 루프를 돈다.

2006/07/17 00:28 2006/07/17 00:28
top

TRACKBACK ADDRESS :: http://bionote.net/tt/blna999/trackback/96

Leave a comment..