2013-07-01 8 views
7

첫 번째 Play 애플리케이션을 만들었습니다. 프로덕션에 가장 적합한 배포 방법은 무엇입니까? 전체 프로젝트를 프로덕션 서버로 복사하고 플레이 시작을해야합니까? 아니면 내 응용 프로그램에서 전쟁을하고 tomcat/jboss에 배포해야합니까? 가장 권장되는 방법은 무엇입니까? 그것의 레일 타입의 행동과 비교하여 혼란스러워합니다. 이것은 대용량 데이터 응용 프로그램으로 간주되며 나중에로드 된 요청을 처리 할 수도 있습니다. 따라서 우리는 확장 성, 가용성, 성능 측면을 고려하고 있습니다. 이 응용 프로그램은 클라우드에 배치되기로 결정됩니다.Play framework 2.1 애플리케이션 배포

감사합니다.

답변

20

다른 사람들과 마찬가지로 dist 명령을 사용하면 일회용 응용 프로그램에 Play를 배포하는 가장 쉬운 방법입니다. 내가 자주 업데이트 응용 프로그램이있을 때, 나는 일반적으로 서버에서 재생을 설치하고 힘내 통해 업데이트를 수행

  • : 그러나, 나는 여기에 몇 가지 다른 옵션 그들과 나의 경험을 가지고 정교합니다. 그렇게 할 때마다, 매번 업데이트 한 후 (실행중인 서버를 중지하기 위해) play stop을 실행하기 만하면, 때때로 play clean을 실행하여 손상 될 가능성이있는 라이브러리 나 바이너리를 모두 지운 다음 play stage을 실행하여 모든 필수 구성 요소가 있는지 확인하고 컴파일을 수행합니다. 마지막으로 play start을 사용하여 업데이트 된 응용 프로그램의 서버를 실행하십시오. 그것은 많은 것처럼 보이지만 빠른 bash 스크립트를 통해 자동화하는 것은 쉽습니다.

  • 또 다른 방법은 Apache, Nginx 등과 같은 프런트 엔드 웹 서버 뒤에 Play를 배포하는 것입니다. 이는 일종의로드 균형 조정을 수행하려는 경우 유용하지만 Play에서 자신의 서버. 문서는 : http://www.playframework.com/documentation/2.1.1/HTTPServer

  • 배포하는 또 다른 방법을 play2war 플러그인입니다 사용하여 WAR 아카이브를 생성,하지만 당신은 이미 당신이 언급 한이 서블릿 컨테이너에 내장 된 주요 인프라를 가진 사람에게 제공하지 않는 한 나는 (그것을 권하고 싶지 않다 많은 대기업들이 그렇듯이). 서블릿 컨테이너를 사용하면 Play가 본질적으로 제거해야하는 복잡성 (즉, 통합 서버)이 추가됩니다. 앞에서 설명한 두 가지 방법보다이 방법을 사용하는 것이 현저한 성능 향상은 없습니다.

  • 물론 서버에 업로드하여 play start을 실행하여 패키지를 만드는 play dist이 항상 있습니다. 이것은 아마도 가장 쉬운 방법 일 것입니다. 문서 도구 : http://www.playframework.com/documentation/2.1.1/ProductionDist

성능과 확장 성, 재생에서의 Netty 서버가 필요한 것에 대해 매우 적절 예외적으로 작동합니다.다음은 모든 프레임 워크와 "재고"Play 앱 중 가장 빠른 성능으로 Netty를 보여 주며 현장의 중간 어딘가에 들어 오지만 성능면에서는 Rails/Django보다 앞서 있습니다 : http://www.techempower.com/blog/2013/04/05/frameworks-round-2/.

더 많은로드 균형 조정과 가용성 확보가 필요한 경우 위에서 설명한대로 프런트 엔드 서버에서 실행되도록 배포 아키텍처를 변경할 수 있습니다. Play와는 사소한 변화입니다. 내가 말했듯이, WAR 설치 옵션을 권장하지 않는다. 이미 말했듯이 누군가 당신이 앱을 제공하도록 강요 받고있는 서블릿 컨테이너의 대규모 설치 기반을 이미 가지고있다.

캐싱 사용, 데이터베이스 구성, 동시성 사용 (Play가 좋음) 및 기본 하드웨어 또는 클라우드 품질과 같은 다른 요인들과 함께 확장 성과 성능이 훨씬 더 많습니다 플랫폼. 예를 들어, Instagram과 Pinterest는 매일 매일 수백만 명의 사람들에게 Python/Django 스택을 제공합니다.이 스택은 모든 유명한 벤치 마크에서 평범한 성능을 보여줍니다. 이들은 많은 캐싱 및 고성능 데이터베이스 (대개 대형 응용 프로그램의 병목 현상)로이를 완화합니다.

이 대답이 너무 길어질 위험이 있으므로 마지막으로 한 가지만 추가 할 것입니다. 필자도 애플 리케이션을 실행하기 위해 가장 강력한 스택과 구성이 필요하다고 생각하면서 성능과 확장성에 초조해했다. 당신이 매일 또는 수십억 번 공격 당할 때마다 모든 알고리즘을 정밀하게 조정해야하는 Google이나 Facebook 규모와 같은 말을하지 않는 이상 더 이상 그렇지 않습니다. 하드웨어 (또는 클라우드) 리소스는 저렴하지만 개발자/시스템 관리자는 그렇지 않습니다. 최상의 실적을내는 배포 구성의 경우 가장 쉬운 옵션 일지라도 원시 성능 비교에 비해 앱을 배포하는 데 사용 편의성과 유지 관리 편의성을 고려해야합니다.

+1

감사합니다. 매우 자세한 답변 ... :) 그런데, 나는이 응용 프로그램과 함께 갈 MongoDB를 사용하고 있습니다. – popcoder

+1

감사합니다. 또한 MongoDB는 훌륭하지만 모든 데이터베이스와 마찬가지로 성능면에서 여전히 한계가 있습니다. 특정 유형의 쿼리는 관계형 데이터베이스보다 오래 걸리지 만 확장성에 대한 샤딩은 훨씬 쉽습니다. 데이터가 구조화/구조화되지 않은 방법에 따라 다릅니다. 모든 것은 기술의 트레이드 오프입니다 :-) –

4

응용 프로그램을 실행하기 위해 Play의 콘솔을 사용할 필요가 없으며 일부 리소스를 소비하며 개발 목표를 빨리 달성하는 것이 주요 목표입니다.

최상의 옵션은 문서에 설명 된대로 dist command입니다. 덕분에 대상 시스템에 Play를 설치할 필요조차 없습니다. dist은 모든 필수 요소가 들어있는 독립 실행 형 응용 프로그램을 사용할 준비가되었습니다 (또한 내장 서버이기 때문에 WAR로 배포 할 필요가 없습니다. 어떤 용기 에든).

클라우드를 사용할 계획이라면 예 : ie도 확인해야합니다. Heroku 또는 CloudBees에서 애플리케이션을 배포 할 수 있습니다. git 저장소를 통해 변경 사항을 적용하는 것은 매우 편리합니다. documentation's home을 확인하고 링크를 아래로 스크롤하여 ...에 배치합니다.

관련 문제