Service Registration Options
(서비스 등록 옵션들)
앞서 언급했듯이, 서비스 인스턴스는 서비스 레지스트리를 통해서 등록되고, 등록 취소 되어야 한다. 등록 및 취소를 다루는 몇가지 다른 방법이 있다. 한가지 옵션은 서비스 인스턴스가 자체 등록 패턴으로 등록하는 것이다. 다른 옵션은 서비스 인스턴스의 등록을 3rd-party 등록 패턴으로, 다른 서비스 컴포넌트에서 다루는 것이다. 먼저 자체 등록 패턴에 대해서 살펴보자.
The Self-Registration Pattern
(자체 등록 패턴)
자체 등록 패턴을 사용하는 경우, 서비스 인스턴스는 직접 서비스 레지스트리에 등록하고 등록을 취소한다. 또한 만약 필요하다면, 서비스 인스턴스는 등록이 만료되지 않도록 heartbeat 요청을 보낸다. 다음 다이어그램은 이 패턴의 구조를 보여준다.
이러한 접근법의 좋은 예제는 Netflix OSS Eureka 클라이언트이다. Eureka 클라이언트는 서비스 인스턴스의 등록 및 등록 취소에 대한 모든 측면을 다룬다. 서비스 검색을 포함하여 다양한 패턴을 구현한 Spring Cloud 프로젝트에서는 Eureka로 서비스 인스턴스를 쉽게 자동으로 등록하게 한다. Java Configuration Class에서 @EnableEurekaClient Annotation만으로 간단히 사용할 수 있다.
자체 등록 패턴은 다양한 이점과 단점이 있다. 한가지 이점은 상대적으로 간단하고 다른 시스템 요소가 필요없다는 것이다. 그러나, 큰 단점은 서비스 레지스트리와 서비스 인스턴스가 묶여 있다는 것이다. (상호 의존 관계임) 서비스에서 사용하고 있는 프로그래밍 언어와 프레임워크마다 등록 코드를 구현해 주어야 한다.
서비스에서 서비스 레지스트리를 분리하도록 대체하는 접근법은 3rd-party 등록 패턴이다.
The Third-Party Registration Pattern
(3rd-Party 등록 패턴 : 제 3자 등록 패턴)
3rd-Party 등록 패턴을 사용할 때, 서비스 인스턴스는 서비스 레지스트리에 스스로를 등록할 책임이 없다. 대신에 서비스 레지스트라로 알려진 또다른 서비스 컴포넌트가 등록을 처리한다. 서비스 레지스트라는 배포환경을 polling하거나 이벤트에 등록하여 실행중인 인스턴스 집합에 대한 변경을 추적한다. 서비스 레지스트라는 새로 이용 가능한 서비스 인스턴스를 알게 되면, 인스턴스를 서비스 레지스트리에 등록한다. 또한 서비스 레지스트라는 서비스 인스턴스가 종료되었을 때, 등록을 취소한다. 다음 다이어그램은 이 패턴의 구조를 보여준다.
서비스 레지스트라의 한가지 예제는 Open Source Registrator 프로젝트가 있다. Open Source Registrator 프로젝트는 Docker 컨테이너로 배포된 서비스 인스턴스들을 자동으로 등록하고, 등록을 취소한다. Registrator는 etcd와 Consul을 포함하여 다양한 서비스 레지스트리를 지원한다.
서비스 레지스트라의 또다른 예제는 NetflixOSS Prana를 들 수 있다. 주로 Non-JVM 언어로 작성된 서비스를 대상으로 하는, 서비스 인스턴스와 함께 실행되는 사이드카 어플리케이션이다. (Sidecar Application : 주로 사용하는 메인 기능 이외 부가적으로 사용하여 메인 기능을 향상시키는 어플리케이션) Prana는 Netflix Eureka를 사용하여 서비스 인스턴스를 등록하고, 등록을 취소한다.
서비스 레지스트라는 배포 환경에 내장된 구성 요소이다. Autoscaling Group에 의해 생성된 EC2 인스턴스는 ELB(Elastic Load Balancer)에 자동으로 등록될 수 있다. Kubernetes 서비스는 자동으로 등록되어 검색에 사용할 수 있다.
3rd-Party 등록 패턴은 다양한 이점과 단점을 가지고 있다. 주요 이점은 서비스가 서비스 레지스트리와 분리되어 있다는 것이다. 개발자들이 사용한 프로그래밍 언어와 프레임워크 마다 서비스 등록 로직을 구현할 필요가 없다. 대신에, 서비스 인스턴스 등록은 전용 서비스에서 중앙집중식으로 이루어진다.
이 패턴의 한가지 단점은 배포 환경에 내장되어 있지 않으면, 설치 및 관리할 필요가 있는 또다른 고가용 시스템 컴포넌트라는 것이다.
댓글을 달아 주세요
댓글 RSS 주소 : http://www.yongbi.net/rss/comment/770