Skip to content

ServiceArchitecture

jongman edited this page Jul 8, 2014 · 2 revisions

서버 구성

알고스팟은 개발 VM과 프로덕션 서버 모두 현재 1서버에서 기동하고 있다.

프로세스 구성

다음과 같은 프로세스들로 구성된다.

  • uwsgi: 장고 웹 프론트엔드 코드를 수행하는 애플리케이션 서버. 유닉스 소켓으로 nginx와 통신한다. 설정 파일은 /etc/uwsgi에 있다.
  • nginx: 웹서버. 설정 파일은 /etc/nginx에 있다.
  • celeryd: 채점 서버. 채점 요청을 rabbitmq에서 받아 해당 제출을 채점해준다. 채점 서버는 데이터베이스에 직접 접근해 채점 결과를 업데이트한다. 샌드박싱 기능을 이용하기 위해 root 사용자로 수행된다.
  • postgres: 메인 데이터베이스. uwsgi와 celeryd가 접근한다. 데이터베이스 명은 algospot이며, 접근 권한은 현재 Ident-based authentication을 이용한다.
  • rabbitmq: 채점 서버가 새 채점 요청을 받기 위해 사용하는 메시지 큐. 디폴트 포트로 로컬에 대해 열려 있다.

채점 서버

채점 서버는 독립 프로세스로 돌아가고 있으므로, 채점 관련 코드 (주로 judge.languages의 랭귀지 바인딩)가 변경되었을 경우 재시작해 주어야 한다. VM 밖에서는 make celeryd-restart, VM 안에서는 sudo /etc/init.d/celeryd restart로 이를 재시작할 수 있다.

자세한 채점 서버의 동작 과정에 관해서는 SandboxImplementation을 참조한다.

향후 방향

알고스팟의 사용량이 높아질 경우 물론 이런 1서버 구조로는 운영을 지속할 수 없다. 다음과 같은 순서로 서버를 분리하는 것이 좋을 것이라고 생각된다.

  • 1단계: 채점 서버를 별도로 분리한다. 상황에 따라 웹 서버는 더 좋은 사양으로 업그레이드한다.
  • 2단계: DB 서버를 별도로 분리하고 웹 프론트엔드 서버를 두 개 이상 만든다.
  • 3단계: DB 서버를 샤딩한다.
Clone this wiki locally