2012-08-15 1 views
1

많은 미디어 인코딩을하는 레일 애플리케이션이 있습니다. 백그라운드 프로세스를 통해 처리하지만 CPU가 과부하되고 프런트 엔드로드 시간이 분명히 느려지거나 백 엔드 부분이 커지기 전에 발생하는 것으로 나타났습니다.레일 애플리케이션에서 백 엔드 서버와 프런트 엔드 서버를 분리 하시겠습니까?

그래서 문제 : 미디어 인코딩 기능이있는 레일즈 응용 프로그램은 CPU가로드되고 프런트 엔드가 느려집니다. 목표 - 프런트 엔드/백 엔드 (미디어 인코딩) 부분의 연결을 끊습니다.

질문 - 기존 응용 프로그램을 두 부분 (프런트 엔드 부분과 백 엔드 부분)으로 분할하는 가장 좋은 방법은 무엇입니까?

1) 두 대의 서버에서 두 개의 응용 프로그램 복사본을 실행하고 HTTP를 통해 정보를 POST/PUT하는 사이에 전화를 걸거나 원격 DB에 연결하는 것이 좋습니다.

2) Rails 코드로 둘러싼 CPU 중심 부분을 유지하는 것이 좋습니까? 아니면 Rails 기능에서 제거해야합니까?

멀티 서버 레일스 애플리케이션을 실행하는 데 좋은 지침을 누군가가 가리킬 수 있다면 좋을 것입니다. (멀티 서버 캐 피스 라노 배포에 대한 질문이 검색되지만 덜 구체적인 레시피가 필요합니다.)

답변

0

잘 작동하는 일반적인 방법은 Resque과 같은 작업 대기열을 사용하는 것입니다.

코드 관리
관리하기 쉽도록 처리 코드와 응용 프로그램을 "응용 프로그램"에 보관하십시오. 두 개의 app-server를 배포하지만 처리 서버에서 resque worker를 실행합니다. 처리 작업이 액티브 개체를 지속 관련된 경우

상태 프런트 엔드에서 상태를 폴링하고 주기적으로 인코딩 과정에서 백엔드에서 업데이트 할 수 있습니다
을 변경합니다.

state machine을 사용하는 것이 유용 할 수 있습니다.

귀하의 문제는 이제있어
를 이동 한 클라우드 규모 ™ : 당신의 대기열이 너무 오래 얻는 경우에 근로자를 실행 더 처리 호스트를 추가 할 수 있습니다 D가. 프런트 엔드 만 웹에서 액세스 할 수있는 호스트 인 경우 랙 미들웨어를 설정하거나 무지개를 실행하여 프런트 엔드를 통해 처리 된 결과를 클라이언트에 프록시 할 수 있습니다.

흥미로운 프로젝트처럼 들립니다. 행운을 빕니다!