더 좋은 방법이 있을 봉사하는 결과의 비싼 차단,python 과정을 통해 HTTP?

StackOverflow https://stackoverflow.com/questions/1929681

  •  20-09-2019
  •  | 
  •  

문제

우리는 웹 서비스를 제공하는 작은,임의의 세그먼트 고정 인벤토리의 큰 MP3 파일이 있습니다.MP3 파일을 생성되는 즉석에 의해 파이썬다.모델게 얻을 요청하는 URL 을 지정하는 세그먼트,당신이 원하는 얻 audio/mpeg 스트림 응답에서.이것은 비용이 많이 드는 프로세스입니다.

우리가 사용하는 Nginx 프런트 엔드 요청이 처리기입니다.Nginx 의 응답을 캐싱에 대한 일반적인 요청입니다.

우리는 처음에 시도를 사용하여 토네이도에서 요청을 처리하기 위해서 Nginx.당신이 기대하는 바와 같이,차단 MP3 작업이 유지되는 토네이도에서 그것의 일을 하고 있(asynchronous I/O).그래서,우리는 멀티스레드는 해결을 차단한 문제할 수 있습니다.그러나,그것은 미묘한 경쟁 조건(에서 실제로드)우리는 할 수 없었던 진단 또는 재직.경쟁 조건을 손상 우리의 MP3 출력됩니다.

그래서 우리는 결정을 설정하는 우리의 응용 프로그램으로 간단하 WSGI 뒤에 처리기 Apache/mod_wsgi(여전히 w/Nginx 앞).이렇게 차단하는 문제 및 경쟁 조건이지만 생식 로드(즉아파치를 만들은 너무 많은 processses)서버에서 실제 조건에서.우리는 작업 중에서 조정 Apache/mod_wsgi 지금,하지만 아직도 시험과 오류가 단계입니다.(업데이트:우리는 다시 전환해 주셔서 감사합니다.아래 참조).

마지막으로,질문:우리는 없나요?더 좋은 방법이 있을 제공 CPU-비싼 리소스를 통해 HTTP?

업데이트: 감사 그레이엄의 정보 문서,데이 아파치 조정 문제입니다.에서 의미-시간,우리는 다시 사용하여 토네이도를 해결하려는 데이터 손상 문제입니다.

사람들을 위해 그렇게 빠르게 던져 더 많은 철분에서 이 문제를 토네이도의 비트 멀티-스레딩(에도 불구하고 데이터 무결성 문제를 도입하여 실을 꿰)처리하는 부하에서 적절하게 작은(single core)Amazon EC2 인스턴스입니다.

도움이 되었습니까?

해결책

apache/mod_wsgi의 임베디드 모드를 사용하는 실수를 저지르고 있습니까? 읽다:

http://blog.dscpl.com.au/2009/03/load-spikes-and-excecive-memory-usage.html

Apache/mod_wsgi를 사용하는 경우 데몬 모드를 사용하십시오.

다른 팁

당신은 시도 했습니까? 산란? 유연한 스레딩 모드가있는 WSGI 서버입니다.

을 고려할 수 있습 큐 시스템 AJAX 를 통지 방법이 있습니다.

가 있을 때마다 요청의 비싼 자원,그리고 자원이 될 필요가 생성 된 추가하는 요청을 큐에(있다면 그것은 이미 있다).는 큐 작업을 반환해야 합니다 ID 는 객체의 쿼리할 수 있습을 얻을 수있는 상태입니다.

다음 당신이 쓰는 배경 서비스는 회전 worker threads.이러한 근로자 단순히 제거하는 요청,생성,데이터를 저장하고 데이터의 위치에서 요청을 개체입니다.

웹 페이지를 만들 수 있습 AJAX 를 호출하여 귀하의 서비스를 진행을의 생성과에 대한 링크를 제공 파일을 한번 사용할 수 있습니다.

이 얼마나 큰 미디어 사이트 작동하는 사람들을 다루어야 비디오습니다.그것이 과잉이 될 수 있에 대한 MP3 작업 그러나입니다.

또는, 찾으로 실행하는 몇 가지 기계로 작업 부하를 분산시키기 위해.귀하의 스레드에서 아파치는 여전히 차단하지만,적어도 없는 리소스를 사용 웹 서버에 있습니다.

일반적인 의미가 없으므로 "계단식 부하"를 정의하십시오.

너무 많은 Apache 프로세스를 실행하는 경우 가장 큰 문제가 될 것입니다.

이와 같은 부하의 경우 Prefork MPM을 사용하고 있는지 확인하고 적절한 수의 프로세스 (CPU 당 1 개 이상, 2 이하)로 제한해야합니다.

CPU 전원이 부족한 일을 제대로하고있는 것 같습니다.이 MP3를 생성하는 과정에서 CPU 로딩이 무엇인지 결정할 수 있습니까?

다음으로해야 할 일은 MP3를 다른 기계에 렌더링하기 위해 더 많은 하드웨어를 추가하는 것이라고 생각합니다. 또는 사전 렌더링 된 MP3를 제공하는 방법을 찾으십시오 (아마도 일부 미디어를 할 수 있습니까?)

BTW, 웹 스케일링은 올해 Pycon Brasil의 Jacob Kaplan-Moss의 기조 연설 주제였으며, 폐쇄 된 문제는 아닙니다. 처리해야 할 기술 스택은 매우 인상적입니다. (프레젠테이션의 온라인 사본을 찾을 수 없었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top