장기 실행 비동기 작업을 관리 할 때의 모범 사례


12

최종 사용자가 웹 페이지에서 오래 실행되는 비동기 처리 작업을 생성하는 요청을 제출하는 프로젝트의 디자인 단계에 있습니다. 이 문제에 대한 "모범 사례"가 있습니까? 웹 서비스 및 서비스 브로커가 좋은 방법입니까? 여기에 Microsoft 메시징 대기열이 적용됩니까?


웹을 통해이 작업을 수행하고 시간이 오래 걸리면 완료되면 사용자에게 문자 메시지 나 전자 메일을 보낼 수 있습니다.
Job

답변:


6

나는 "모범 사례"에 대해 모른다. 가장 일반적인 실수를 알고 있습니다.

첫 번째 실수 : DOS 자신

웹 핸들러를 사용하여 장기 실행 작업을 처리합니다. 장기 실행 작업이되는 적중률, 실행 기간 및 지속 트래픽 양에 따라 이는 나쁘거나 매우 나쁠 수 있습니다.

장기 실행 작업을 완료하는 데 걸리는 시간 내에 장기 실행 작업을 두 개 이상받지 않도록하려고합니다. 당신이 스스로를 DOS. 백분율과 시간이 일정하게 유지된다고 가정하면 더 많은 트래픽을 얻을 수 있습니다. 트래픽 증가에 한계를 스스로 부과하는 문제 중 하나입니다.

두 번째 실수 : 웹 핸들러에서 스폰

웹 핸들러에서 프로세스를 생성하여 장기 실행 프로세스를 처리하는 것은 까다로울 수 있으며 결과적으로 오류가 발생하기 쉽습니다.

  • 부모와 올바르게 분리해야합니다. 그렇지 않으면 웹 처리기가 자식이 완료되기를 기다립니다.
  • 유닉스에서 자식을 포크하면 부모로부터 열린 핸들을 상속받습니다. 덮어 쓰지 않으면 자동으로 닫힙니다. 여기에는 데이터베이스 연결, 파일 핸들, 기타 열린 네트워크 연결과 같은 것들이 포함됩니다. 자식 프로세스가 완료되면 모두 닫힙니다 .

옵션

나는 보통 at(1)웹 핸들러를 깨끗하게 분리하지 않고 사용 합니다.

로 폴링 구현을 사용할 수도 있습니다 cron.

처리를 처리하는 다른 서버 프로세스와 통신 할 수 있습니다. 즉, 통신을 수행 할 수 있습니다 sockets, pipes지내는 HTTP 호출 또는 큐 메시지를 라우팅과 같은, 또는 높은 수준의 추상화.


2

나는 당신이 몇 분 이상 이야기하고 있다고 가정합니다.

몇 분이 지나면 백그라운드에서 작업자 스레드를 시작하고 UI에 약간의 진행률을 표시 할 수 있습니다. 많은 웹 응용 프로그램이이 방법을 사용합니다.

5 분 이상이면 작업을 전용 서비스에 위임 할 수 있습니다. 한 예로 Google 웹 로그 분석에서 생성 한 보고서가 있습니다.

Microsoft 메시징 대기열을 사용하여 시스템에서 다른 시스템으로 또는 구성 요소에서 다른 시스템으로 정보를 전송할 수 있습니다.


PHP와 같은 언어는 어떻게 이것을 달성합니까? 이 작업을 수행하지만 PHP로 작성된 몇 가지 웹 응용 프로그램을 알고 있습니다
TheLQ

PHP 전문가는 아니지만 같은 페이지에서 시작한 스레드 대신 다른 스레드가 호출됩니다. 이것이 실제로 AJAX에서 발생합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.