애플리케이션 디자인

DC/OS에서 Java 및 데이터베이스 애플리케이션을 사용한 서비스 검색

이 블로그에서는 간단한 Java 애플리케이션이 데이터베이스나 서비스로서의 데이터베이스 (DBaaS) DC/OS에서 서비스 검색을 사용합니다.

DC/OS logo

왜 서비스 검색인가?

애플리케이션은 일반적으로 애플리케이션 서버, 데이터베이스, 웹 서버, 캐싱 및 메시징 서버와 같은 여러 구성 요소로 이루어져 있습니다. 일반적으로 애플리케이션의 필요에 따라 각 구성 요소의 여러 복제본이 실행됩니다. 컨테이너 오케스트레이션 프레임워크를 사용하여 이 애플리케이션을 배포한다는 것은 각 복제본이 컨테이너로 실행된다는 것을 의미합니다. 따라서 애플리케이션은 일반적으로 멀티 컨테이너 애플리케이션으로 배포됩니다.

각 컨테이너에는 수명 기간 동안 고유한 IP 주소가 할당됩니다. 그러나 컨테이너는 임시적이며 오케스트레이션 프레임워크에 의해 다른 호스트에서 종료되고 다시 예약될 수 있습니다. 이 경우 일반적으로 컨테이너에는 다른 IP 주소가 할당됩니다. 즉, 애플리케이션 서버에 배포된 애플리케이션은 데이터베이스의 IP 주소에 의존할 수 없습니다. 이 경우 서비스 검색이 필요합니다.

따라서 컴포넌트의 여러 복제본에는 논리적 이름이 할당됩니다. 예를 들어 모든 애플리케이션 서버 컨테이너와 db 를 모든 데이터베이스 컨테이너에 추가합니다. 이제 애플리케이션은 논리적 서비스 이름을 사용하여 데이터베이스 컨테이너와 통신할 수 있습니다. 이를 통해 데이터베이스 컨테이너는 클러스터의 어느 곳에서나 스케줄을 재조정할 수 있으며 동적으로 확장 및 축소할 수도 있습니다.

애플리케이션 서버와 데이터베이스 서버의 단일 인스턴스를 사용하여 DC/OS에서 이를 어떻게 수행할 수 있는지 살펴보겠습니다. 이 블로그에서는 애플리케이션 서버에는 WildFly를, 데이터베이스에는 Couchbase를 사용합니다.

DC/OS를 사용하는 Mesos의 Couchbase 클러스터 설정 방법에 대한 자세한 내용은 카우치베이스 클러스터를 설정합니다.

이 블로그에서는 다음과 같은 주요 단계를 사용합니다:

  • DC/OS 클러스터 설정
  • 마라톤 애플리케이션 정의
  • 애플리케이션 배포

이 블로그에 사용된 전체 소스 코드는 다음 링크에서 확인할 수 있습니다. github.com/arun-gupta/dcos-java-database.

많은 분들께 감사드립니다. 언터스타인 Maven 플러그인을 만들고 DC/OS의 내부 작동을 이해하는 데 도움을 주신 분들께 감사드립니다.

DC/OS 클러스터 설정

DC/OS 클러스터는 다음을 사용하여 쉽게 만들 수 있습니다. CloudFormation 템플릿. 시스템 요구 사항, 스크린샷 및 설정을 포함한 자세한 지침은 AWS에 DC/OS 설치하기에서 확인할 수 있습니다.

CloudFormation 출력은 다음과 같습니다:

DC/OS Cluster CloudFormation Output

키에 표시된 값을 메모해 둡니다. DnsAddress 그리고 PublicSlaveDnsAddress. 첫 번째 키의 값은 DC/OS GUI에 액세스하는 데 사용할 수 있으며 다음과 같습니다:

DC/OS Cluster Console Default Output

CLI에 설명된 대로 DC/OS CLI를 구성합니다. 간단히 말해, 다음 명령이 사용됩니다:

  • dcos config set core.dcos_url http://${DnsAddress} 교체 ${DnsAddress} 를 CloudFormation 출력의 해당 값으로 대체합니다.
  • dcos 인증 로그인
  • dcos config show core.dcos_acs_token. 아직 완료되지 않은 경우 다음에서 리포지토리를 복제합니다. github.com/arun-gupta/dcos-java-database. 새 파일 만들기.dcos-token 를 클릭하고 이 파일에 명령의 출력을 복사합니다.
  • dcos 패키지 설치 마라톤-lb

마라톤 애플리케이션 정의

마라톤 프레임워크는 DC/OS에서 컨테이너를 스케줄링하는 데 사용됩니다. 마라톤 애플리케이션은 애플리케이션 정의를 제공하여 정의할 수 있습니다.

앞서 언급했듯이 이 블로그에서는 간단한 Java 애플리케이션이 데이터베이스와 통신하는 방법을 보여드리겠습니다. 여기서는 WildFly에 배포된 Java EE 애플리케이션을 사용하고 데이터베이스로 Couchbase를 사용하겠습니다. 애플리케이션 정의는 다음과 같습니다:

이 애플리케이션 정의의 핵심은 무엇인가요?

  • 애플리케이션에는 두 개의 컨테이너가 있습니다: 데이터베이스 그리고 . 웹 컨테이너는 다음을 사용하여 정의된 데이터베이스 컨테이너에 대한 종속성이 있습니다. 종속성 속성입니다.
  • 데이터베이스 컨테이너 용도 아룽업타/카우치베이스:여행 도커 이미지. 이 이미지는 다음에서 생성됩니다. github.com/arun-gupta/couchbase-javaee/tree/master/couchbase. 카우치베이스 기본 이미지를 사용하고 Couchbase REST API 를 사용하여 데이터베이스를 미리 구성할 수 있습니다. 샘플 버킷도 데이터베이스에 로드됩니다.
  • 컨테이너 용도 아룽업타/와일드플라이-카우치베이스-자바예:여행 이미지. 이 이미지는 다음에서 생성됩니다. github.com/arun-gupta/couchbase-javaee/blob/master/Dockerfile. 이 앱은 WildFly에 번들로 제공되는 Java EE 7 애플리케이션입니다. 이 앱은 COUCHBASE_URI 를 환경 변수로 설정하여 Couchbase 데이터베이스에 연결합니다. 이 환경 변수의 값은 DNS 서비스 검색을 사용하도록 구성되며 가상 네트워크에 설명된 대로 파생됩니다.

값을 변경해야 합니다. haproxy_0_vhost 의 값과 일치하도록 ${공용슬레이브Dns주소} 를 출력합니다. 레이블 haproxy_0_vhost 는 가상 호스트가 있는 외부 로드 밸런서에 Docker 컨테이너(이 경우 WildFly 애플리케이션 서버)를 노출하도록 Marathon-LB에 지시합니다. 이 경우 0 는 0부터 시작하는 서비스포트 인덱스에 해당합니다. 서비스포트 정의가 여러 개 있는 경우 0, 1, 2 등으로 반복합니다. 내부 및 외부 로드 밸런싱 앱 배포에 대한 자세한 내용은 마라톤-lb를 구성하는 방법에 대한 자세한 내용을 참조하세요.

서비스 검색 및 로드 밸런싱에서는 DC/OS의 서비스 검색 및 로드 밸런싱에 대한 자세한 내용을 제공합니다.

Maven을 사용하여 애플리케이션 배포

애플리케이션은 다음을 사용하여 배포할 수 있습니다. dcos-maven-플러그인.

플러그인처럼 보입니다:

이 조각의 주요 요점은 다음과 같습니다:

  • 플러그인 버전은 0.2입니다. 이는 플러그인이 아직 개발 초기 단계에 있음을 나타냅니다.
  • dcosUrl 의 값은 ${DnsAddress} 키를 입력합니다. 이 주소는 애플리케이션 배포에 사용됩니다.
  • <배포 가능 요소는 앱, 그룹 또는 포드 등 다양한 유형의 배포를 가능하게 합니다. 이 요소는 플러그인에 대한 힌트이며 향후 버전에서 Marathon API가 통합됨에 따라 사라질 가능성이 높습니다. 팔로우 #11 에서 자세한 내용을 확인하세요.

플러그인에 대한 기타 세부 정보 및 구성은 다음 링크에서 확인할 수 있습니다. dcos-maven-플러그인.

애플리케이션을 배포합니다:

다음과 같은 출력이 표시됩니다:

다음은 DC/OS 콘솔의 업데이트된 출력 중 일부입니다.

첫 번째 업데이트된 서비스 탭:
DC/OS Cluster Web Application

서비스 내 두 가지 애플리케이션:
DC/OS Cluster Web Application

데이터베이스 애플리케이션에는 하나의 작업이 있습니다:
DC/OS Cluster Web Application

데이터베이스 작업 상태:Database Service Discovery

데이터베이스 작업의 로그입니다:
DC/OS Cluster Web Application

서버 구성을 위한 Couchbase REST API의 출력을 보여줍니다.

웹 작업 상태:
DC/OS Cluster Web Application

웹 작업의 로그:
DC/OS Cluster WildFly Output

Java EE 애플리케이션이 성공적으로 배포되었음을 보여줍니다.

애플리케이션에 액세스합니다:

주소는 키의 값입니다. ${공용슬레이브Dns주소} 를 추가할 수 있습니다. 예를 들어 다음과 같이 형식이 지정된 출력은 jq처럼 보입니다:

그거예요!

앞서 언급했듯이 이 블로그에 사용된 전체 소스 코드는 다음 링크에서 확인할 수 있습니다. github.com/arun-gupta/dcos-java-database.

이 블로그에서는 간단한 Java 애플리케이션이 DC/OS에서 서비스 검색을 사용하여 데이터베이스와 통신하는 방법을 보여드렸습니다.

자세한 내용은 여기에서 확인하세요:

 

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 Arun Gupta, 개발자 지원 부문 부사장, Couchbase

아룬 굽타는 Couchbase의 개발자 지원 담당 부사장입니다. 그는 Sun, Oracle, Red Hat에서 10년 이상 개발자 커뮤니티를 구축하고 이끌었습니다. 그는 콘텐츠, 마케팅 캠페인 및 프로그램의 전략, 계획 및 실행을 개발 및 실행하는 교차 기능 팀을 이끄는 데 있어 깊은 전문성을 보유하고 있습니다. 그 전에는 Sun에서 엔지니어링 팀을 이끌었으며 Java EE 팀의 창립 멤버입니다. Gupta는 기술에 관한 블로그 게시물을 2,000개 이상 작성했습니다. 40여 개국에서 수많은 주제에 대해 광범위한 강연 경험을 가지고 있으며, 3년 연속 JavaOne Rock Star로 선정되었습니다. 또한 미국에서 Devoxx4Kids 지부를 설립하여 어린이를 대상으로 한 기술 교육을 지속적으로 장려하고 있습니다. 기술에 관한 여러 권의 책을 저술했으며, 열렬한 마라토너이자 지구를 횡단하는 사람, Java 챔피언, JUG 리더, NetBeans 드림팀 멤버, Docker 캡틴이기도 한 그는 @arungupta에서 쉽게 만나볼 수 있습니다.

댓글 하나

  1. [...] DC/OS에서 Java 및 데이터베이스 애플리케이션을 사용한 서비스 검색은 서비스 검색이 멀티 컨테이너 애플리케이션에 중요한 측면인 이유를 설명합니다. 이 블로그에서는 DC/OS에서 이를 수행하는 방법도 설명합니다. [...]

  2. [...] DC/OS에서 Java 및 데이터베이스 애플리케이션을 사용한 서비스 검색은 서비스 검색이 멀티 컨테이너 애플리케이션에 중요한 측면인 이유를 설명합니다. 이 블로그에서는 DC/OS에서 이를 수행하는 방법도 설명합니다. [...]

  3. 안녕하세요, 아룬.

    서비스 등록을 위해 하프록시와 같은 로드밸런서를 사용하면 안 되는 이유가 궁금합니다. 하프록시는 요청을 CS/OS에서 사용 가능한 서비스 중 하나에 전달할 논리적 서비스 이름을 게시합니다. 서비스 등록이 왜 그렇게 번거로울까요? 동적이고, 확장 가능하며, 기술적으로 투명하기 때문입니다.

    감사합니다, Alexander

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.