2016-11-25 1 views
10

우리는 수십 가지의 마이크로 서비스 (대부분 Akka 기반 임)로 끝날 것입니다. 배포를 가장 잘 관리하는 방법을 확신 할 수 없습니다. 특히, 이들은 서로 독립적이고 가능한 한 전문화되고 배포되도록 구축됩니다.Scala/Akka 마이크로 서비스를 배포하기위한 표준 방법은 무엇입니까?

제 질문은 모든 것이 자신의 개별 JVM에 비해 너무 작습니다. AWS nano 인스턴스에 호스트를 호스팅 할지라도 중복성을 고려하면 약 40 대의 시스템으로 끝나기 때문에 이러한 높은 수는 단순히 필요하지 않습니다. 3 개의 중간 규모 인스턴스는 전체 작업 부하를 쉽게 처리 할 수 ​​있습니다.

현재 이들을 "컨테이너"응용 프로그램으로 그룹화하고 다소 임의적으로 만든 다음 더 큰 JVM에서이 컨테이너 응용 프로그램을 실행합니다.

그러나 더 좋은 방법이 있어야합니다. Akka의 애플리케이션 서버는 "배포자"로만 배포 할 수 있으므로 다른 사람들이 Akka 마이크로 서비스를 프로덕션 환경 (특히 배포 관리 방법)에서 실행하는 방법에 대한 통찰력을 얻고 싶었습니다.

아마도 Scala와 Akka에 국한되지 않고 대부분의 다른 플랫폼에는 이러한 것들을 배포하는 전용 응용 프로그램 서버가 있습니다.

+0

Akka 클러스터링 및 라우팅. 라우터는 구성을 기반으로 다수의 Routees를 배포 할 수 있으며 클러스터는 라우터가 실행될 수 있도록 많은 노드를 제공합니다. 여기에 설명 된 많은 옵션이 있습니다. http://doc.akka.io/docs/akka/current/scala/cluster-usage.html –

답변

2

IMHO, 정식 방법은 서비스 오케스트레이션 도구를 사용하는 것입니다. 실제로는 개별 프로세스에서 JVM을 실행합니다. 마이크로 서비스로 원하는 디커플링, 격리, 복원력을 얻는 유일한 방법은 개별적으로 배포, 업데이트, 중지 및 시작할 수있는 방법입니다.

당신은 말을하는지 :

내 질문은 그들 모두가 자신의 개인의 JVM에 비해 너무 작 있다는 사실에서 유래

; 인스턴스

JVM과 Amazon VM을 동등한 것으로 취급하지만 실제로는 그렇지 않습니다. 단일 가상 시스템에 여러 개의 JVM 프로세스를 가질 수 있습니다.

난 당신이 서비스 오케스트레이션 도구 등 Lightbend Production Suite/Service Orchestration 또는 Kubernetes

이 그냥 예입니다, 다른 사람이 거기에 봐 좋습니다. 이 도구 범주는 쉬운 조정, 로그 통합, 서비스 조회, 상태 확인/서비스 실패 처리 등과 같이 조만간 필요하게 될 많은 기능을 제공합니다.

+0

매우 유용한 정보를 제공해 주셔서 감사합니다. 내가 언급 한 도구를 살펴볼 것입니다 (이전에 Kubernetes에 대해 들어 봤지만 어떤 이유로 Docker 컨테이너를 관리하기 위해 더 많은 기능이 필요하다고 생각했습니다). 단일 머신에서 여러 개의 JVM을 실행하는 것에 관해서는 가능합니다. 그러나 모든 마이크로 서비스가 모두 내부에서 실행될 수있을 때 전체 JVM을 실행하는 오버 헤드로 인해 항상 불필요하다고 생각했습니다. 아마도 현대의 JVM은 일반적으로 가볍기로 동의했기 때문에 이것은 다소 구식 인 생각 일 수 있습니다. – Ruslan

+0

* "이 방법으로 만 배포, 업데이트, 중지, 개별적으로 시작할 수 있습니다"* 실제로는 사실이 아닙니다. 단일 JVM 내에서 구성 요소의 개별 라이프 사이클을 가질 수 있습니다.탄력성은 또 다른 문제이지만 시스템 자원을 과도하게 구독하면 시스템의 여러 JVM 간의 상호 작용이 중요하지 않을 수 있습니다. – the8472