컨셉

컨셉 (Concepts)

이 문서는 YARN이 장기 실행(long running) 서비스를 YARN에서 기본적으로 지원하는 일급(first-class) 플랫폼이 되게 만드는 몇 가지 핵심 개념과 기능을 설명합니다.

출처: 문서

본문

YARN에서의 서비스 프레임워크 (Service Framework / ApplicationMaster)

YARN에 서비스를 배포하는 데 도움을 주는 컨테이너 오케스트레이션 프레임워크가 구현되어 있습니다. 요컨대 이 프레임워크는, 사용자가 제공한 서비스 정의에 기반해 ResourceManager로부터 컨테이너를 요청하고 배치(placement) 정책을 준수하며 클러스터 전반에 걸쳐 컨테이너를 실행하는 ApplicationMaster입니다. 또한 서비스 정의와 구성을 해석하고, 실패한 컨테이너를 자동 재시작하는 것 같은 컴포넌트 수명주기를 관리하며, 컴포넌트의 건강성(healthiness)과 준비 상태(readiness)를 모니터링하고, 컴포넌트 간 의존성 시작 순서를 보장하며, 컴포넌트를 확장/축소(flex up/down)하고, 컴포넌트를 업그레이드하는 등의 무거운 작업도 모두 처리합니다. 프레임워크의 최종 목표는 서비스가 사용자가 원하는 상태로 실행 중임을 보장하는 것입니다.

또한 스케줄링 제약을 달성하기 위해 YARN 코어의 많은 기능을 활용합니다. 예를 들어 affinity/anti-affinity 스케줄링, 서비스에 대한 로그 집계, 컨테이너 실패 시 자동 재시작, 컨테이너의 제자리(in-place) 업그레이드 등입니다.

YARN에 서비스를 배포/관리하기 위한 RESTful API 서버

간단한 JSON 스펙을 통해 사용자가 YARN에서 서비스를 배포/관리할 수 있도록 RESTful API 서버가 개발되었습니다. 이는 사용자가 저수준 API를 다루고 복잡한 코드를 작성해 서비스를 YARN에 올릴 필요를 없애줍니다. REST 계층은 YARN 서비스의 생성과 수명주기 관리를 위한 통일된 REST 기반 진입점 역할을 합니다. 여기서 서비스는 단순한 단일 컴포넌트 앱부터 특별한 오케스트레이션이 필요한 가장 복잡한 다중 컴포넌트 애플리케이션까지 다양할 수 있습니다. 자세한 API 문서는 API 문서를 참조하세요.

API 서버는 무상태(stateless)입니다. 즉 사용자는 간단히 여러 인스턴스를 띄우고 앞에 로드 밸런서를 두어 HA를 지원하고 부하를 분산할 수 있습니다.

서비스 디스커버리 (Service Discovery)

표준 메커니즘인 DNS 조회를 통해 YARN에서 서비스를 발견할 수 있도록 DNS 서버가 구현되어 있습니다.

프레임워크는 호스트네임과 ip 같은 컨테이너 정보를 YARN 서비스 레지스트리에 게시합니다. 그리고 DNS 서버는 YARN 서비스 레지스트리의 정보를 A 레코드, SRV 레코드 같은 DNS 레코드로 변환하여 노출합니다. 그러면 클라이언트는 표준 DNS 조회를 통해 컨테이너의 IP를 발견할 수 있습니다.

이전의 YARN Service Registry 읽기 메커니즘은 레지스트리 특화 (java) API와 REST 인터페이스로 한정되어, 기존 클라이언트와 서비스를 연결하기 어려웠습니다. DNS 기반 서비스 디스커버리는 이 격차를 해소합니다. 자세한 내용은 Service Discovery 문서를 참조하세요.

더 알아보기 (Learn more)