JMK no matter what

새 파이썬 대몬 아키텍처

  • 일단 채점 서버 자체를 EC2 위에 올릴 순 없다. 외부 모니터링도 문제가 되고, 멀티 서버 돌릴 때 (그 날이 과연 오긴 올까)
  • 아마존 EC2 쓰면 스케일링이 쉬워진다. 그냥 서버 더 열어달라고 하면 됨~ :-) 인스턴스간에 CPU 파워가 대략 일정하니 time limit consistency 문제도 어느정도 해결된다.
  • 원래 생각했던 것처럼 채점서버별로 스레드를 하나씩 돌려서 producer-consumer 모델로 구현. 단 GIL 이 무서우니 multiprocessing 패키지를 써서 별개의 프로세스로.
  • SQLite 에 멀티프로세스에서 액세스하면 매우 귀찮음. (그렇다고 MySQL 쓰긴 싫다 -_ -;) 그냥 db 접근하는 것은 메인 프로세스로 한정하자.
  • Notification 프로세스는 지금과 같은 형태로. 3번 연속 실패하면 3분 쉬었다가 다시 하는 식.
  • 로깅에 이메일 보내주는 기능을 추가해서, 1) 서버가 맛이 가서 재부팅했다 2) 웹서버 접근에 실패했다 등등의 오류가 발생했을 때 나한테 이메일 보내는 것으로.. 'ㅅ'

채점서버 프로세스는:

  1. 큐에서 작업을 받는다
  2. 아마존에 소스코드 보내서 컴파일 & 실행. 시간 제한 + 5초가 흐르도록 답이 없으면 인스턴스 강제 리셋하고 런타임 에러 보낸다.
  3. 서버가 시작된지 55분이 되면 마지막 20분 동안 서브미션이 없었나 확인하고 없으면 서버

이걸 위해 할 수 있어야 하는 일은

  1. EBS Snapshot 으로부터 새 인스턴스를 얻고 핸들을 반환받음
  2. 인스턴스에 원격으로 명령 내려서 실행 / 결과 넘겨받기 (이거 그냥 ssh 로 해서 표준출력 받아와야 하나.. 사실 그게 제일 간단하긴 함...)
  3. 인스턴스 리셋

이런걸 하려면 Python API 를 쓰면 좋으나.. 버전 따라가기도 귀찮고.. 그냥 아마존에서 나오는 커맨드라인 유틸리티를 쓴다. 스냅샷 내에는 이런 스크립트를 만들어 둬야겠군:

  1. 답안 번호, 문제번호를 넘겨받고 웹서버에 접근해서 소스코드와 채점 데이터, 채점 스크립트를 가져옴 (30초 갭을 두고 3회 연속 실패시에는 별도의 오류 결과로 끝)
  2. 알아서 적당히 잘 컴파일 해주는 스크립트
  3. 알아서 잘 실행해 주고 채점해 주는 스크립트

EBS Snapshot 을 만들 때는

  1. 프로그램 실행하는 데 사용할 계정 만들고 (가능하면 chroot jail 에 넣음)
  2. 각종 컴파일러 깔아두고
  3. 해당 사용자에게 네트워크 액세스 막고...

이렇게 하면 좀 되려나?

2009-12-07 04:41:30 | JM | /writings/cs/ | 4 Comments
ltdtl
2009-12-07 06:03:55
될거같죠?

ㅂㄹ
2009-12-07 06:44:13
왠지 윗분 말이 나온 김에 '근데 우린 안ㄷ...' 이게 나와야 할 것 같은 느낌.
wook
2009-12-07 11:19:57
멍.. 이게다 무슨소리야 ㅠㅠ
JM
2009-12-07 23:21:43
해서 보여줄테다 쳇

Leave a comment

春來不似春

About

Eventstream

Pages

Guestbook

Search

Site Admin

Recent Comments