2013-07-14 2 views
6

분산 환경에서 Thrift 서비스를 찾기 위해 Zookeeper 상단에 서비스 검색 계층을 구축했습니다. 지금 프로덕션 환경에서 이러한 서비스를 실행하는 가장 좋은 방법을 찾고 있습니다.슬리 프 서비스 배포 및 게재

현재 Tomcat에 배포 된 전쟁을 패키지화하여 수행합니다. 서블릿 인스턴스화 중에 Spring ApplicationContext가 생성되어 Tomcat 내부에 TThreadPoolServer을 생성합니다.

나는 몇 가지 이유에 대해이 작업을 좋아하지 않는다 :

  • 그것은 쓸모의 톰캣 정렬하게, 그리고 쉽게 배포
  • 그것은 톰캣 스레드 풀링을 방지하고 모두에게 용이하게하기 위해 해킹 같은 느낌 요청

이 처리하는 최선의 전략을 찾기 위해 노력하는 과정에서 배포하는 가장 좋은 방법을 알아내는 들어갔 논리, 나는 대안의 부부와 함께 올라와있다 :

독립형 JAR로
  • 시작 중고품 서비스 (I 따라서 활용, 지금 응용 프로그램 컨테이너 개발자가 HTTP를 통해
  • 호스트 중고품을 작업에 많은 시간을 보냈습니다 논리를 재발견 할 필요가 주로하기 때문에,이 싫어 서비스 요청에 대한 톰캣 스레드 풀과 논리 사람이 있습니까 이러한 서비스

호스팅

  • 를 사용하여 응용 프로그램 컨테이너의 다른 유형 (때문에이 일에 대한 불확실한 - - 미성년자 임에도 불구하고 성능이 부과됩니다에게 명중) 이전에 분산 서버 호스팅을 어떻게 처리했는지에 대한 제안. Tomcat 내부에서 HTTP를 사용하는 것이 나을까요?

  • +1

    이 질문은 논점이 아닙니다 : 기존 서버의 배포 시나리오가 아니라 프로그래밍과 관련된 새로 개발 된 서비스의 아키텍처에 관한 것입니다. – Wildfire

    답변

    6

    나는 Thrift 서버의 호스트로 Tomcat을 사용해 보았지만 추가 값을 가져 오지 않는다는 것을 알았습니다.이 시나리오에서는 서블릿 컨테이너의 모든 기능 (요청 라우팅 등)이 필요하지 않습니다. 반면에 Tomcat은 복잡성과 부품 이동을 추가합니다 (즉, PermGen 문제를 해결하기가 어렵습니다).

    HTTP를 통한 절약을 사용하면 특히 클라이언트 연결이 많은 고부하 시나리오에서 성능에 큰 영향을줍니다.

    그래서 Supervisor Daemon (http://supervisord.org/)에서 실행되는 독립형 Thrift 서비스로 끝났습니다. 분산 배포 관리가 정말 편리합니다. HTTP를 통해 Thrift API를 노출해야하는 경우 (예 : JS 클라이언트의 경우) vert.x에 구현 된 씬 비동기 프록시 (http://vertx.io/)를 사용합니다.

    +0

    jar 파일에 의존성을 패키지합니까? 실제 배포를 어떻게 처리합니까? 바로 지금 나는 매우 편리한 WAR를 업로드하기 위해 Tomcat 웹 API를 사용하고있다. –

    +0

    @ColinMorelli : 우리는 하나의 병에 의존성을 패키징하지 않는다. 대신 우리는 응용 프로그램 jar와 종속성들로 구성된 배포판을 만듭니다. 우리는 rsync를 통해 배포판을 서버에 배포하는 패브릭 스크립트를 사용합니다. 20 호스트에서 자주 변경되는 라이브러리가 50MB ~ 500KB 인 응용 프로그램 병을 배포 할 때 실제로 시간을 절약 할 수 있습니다. WAR 배치는 작은 배치에서는 편리하지만 큰 배치에서는 확장되지 않습니다. – Wildfire

    +0

    좋아, 나 한테 좋은 소리. 현재로서는 내 의존성 목록이 상대적으로 작습니다. 아마도 너무 커질 때까지 단순화하기 위해 패키지화 된 JAR을 작성하게 될 것입니다.그것 이외에, 나는 Supervisord와 함께 계속 달릴 것이다. 감사! –

    관련 문제