2009-05-10 5 views
9

내가 데스크톱 응용 프로그램 개발의 많은 년 (I 장고/파이썬을 사용하고 있지만, 어쩌면이 잘 모르겠어요, 완전히 일반적인 질문) 이후 처음으로 웹 응용 프로그램을 짓고 있어요. 그래서 조심하시기 바랍니다 -이 초 초보자 질문 할 수있다 ... 내 사용자 프로세스의웹 응용 프로그램의 백그라운드 프로세스, 초보자 디자인 질문

하나는 서버에 무거운 처리를 포함한다 (즉, 사용자 입력 뭔가, 서버가 필요 ~ 10 분을 처리하기 위해). 데스크톱 응용 프로그램에서 사용자 입력을 뮤텍스에 의해 보호되는 큐에 던져 버리고 해당 뮤텍스를 사용하는 큐에서 우선 순위가 낮은 전용 백그라운드 스레드가 실행되도록해야합니다.

그러나 웹 응용 프로그램에서는 모든 것이 HTTP 요청과의 동기화를 지향하는 것으로 보입니다.

데이터베이스를 대기열로 사용한다고 가정 할 때 백그라운드 프로세스를 실행하기위한 최적의 아키텍처는 무엇입니까?

답변

7

적어도 두 가지 생각이 있습니다 (적어도).

  1. 는 큐에 작업을 던져 웹 스택을 처리 밖에 다른 뭔가가있다.
  2. 는 큐에 작업을 던져 웹 스택을 처리에서 다른 뭔가가있다. 어느 경우

, 당신은 어딘가 큐 (예를 들어, 데이터베이스 테이블)에서 작업 단위를 만들고 어떤 프로세스가 그들을 돌볼 수 있습니다.

나는 일반적으로 이러한 것들을 처리하는 전용 Windows 서비스가있는 1 번을 사용합니다. SQL 작업 또는 이와 유사한 작업으로이 작업을 수행 할 수도 있습니다.

2 번 항목의 장점은 모든 코드를 웹 계층의 한 곳에서 쉽게 유지할 수 있다는 것입니다. 실행을 트리거하는 항목 (예 : 작업 단위를 충분히 높은 시간 제한으로 처리하는 웹 페이지로드)이 필요하지만 다양한 메커니즘을 사용하여 쉽게 수행 할 수 있습니다.

1

일반적으로 웹 서버에로드가있는 경우 다른 서버에서 백그라운드 프로세스를 실행하는 것이 좋습니다.

2

는 이후 :

1) 이것은 일반적인 문제,

2) 당신은 당신의 플랫폼

에 익숙하지 - 당신은 당신의 플랫폼에 기여 라이브러리에서 볼 것을 제안 작업을 처리 할 솔루션을 찾습니다. 대기와 작업을 처리하는 것 외에 고려해야 할 것이다 : 작업자 및 웹 스택 사이

1) 상태 통신. 이 방법은 작업자 프로세스가 죽지 않도록하는 등의 작업이 진행되고 인간,

2) 보장, 작업의 완료율 수를 표시 웹 페이지를 가능하게 할 것이다.

3) 작업에 오류가있는 경우 작업자 프로세스가 자동으로 주기적으로 작업을 재 시도합니까? 작업이 실패하면 운영 담당자에게 통보합니까?

4) 작업 수가 늘어남에 따라 추가 작업자를 추가하여 병렬 처리를 수행 할 수 있습니까? 다른 서버에도 작업자를 추가 할 수 있습니까?

Django/Python에서 좋은 해결책을 찾을 수 없다면 다른 플랫폼의 솔루션을 자신의 것으로 이식하는 것도 고려해 볼 수 있습니다. 나는 Ruby on Rails에 delayed_job을 사용한다. 작업자 프로세스는 runit에 의해 관리됩니다. 장고 긴 프로세스를 실행

감사합니다,

래리