1. 개요

애플리케이션은 설정이 필요하다. DB 접속 정보, 연계되는 다른 서버의 정보 등등..

과거에는 이러한 정보가 소스 코드 내에 하드코딩되어 있는 경우가 많았다. 하지만 이제는..

특히 마이크로서비스는 사람의 개입이 최소화되므로 애플리케이션 구성관리가 매우 중요하다.

만약 사람이 구성하거나 배포한다면 편차가 발생하고 확장 요구 발생 시 지연이 발생하게 될 것이다.


2. 논리적 개요

  • 인스턴스 시작 시 구성관리 서비스 엔드포인트를 호출하여 환경별 구성 정보를 가져온다. 구성관리 서비스 접속 정보는 마이크로 서비스 시작시에 전달되는 것을 전제로 한다.
  • 실제 구성정보는 저장소에 들어있다. (RDB 혹은 K/V DB 등)
  • 구성관리도 빌드/파이프라인을 통해 관리, 변경된다. 단 애플리케이션 배포와는 독립적으로 관리된다. 
  • 구성관리가 변경되면, 구성 데이터를 사용하는 서비스는 변경 통보를 받는다. 그리고 가지고 있는 데이터 사본을 갱신해야 한다.

3. 구성 관리 관련 프로젝트

3.1. etcd

Go 언어 기반 오픈 소스 프로젝트로 Key-value 방식이다. 분산 구성이 가능하다.

3.2. Eureka

동적 클라이언트 갱신 기능이 있다. 넷플릭스가 자바로 개발했다.

서버와 클라이언트 구조로 동작하는데

  • 서버는 레지스트리 역할을 하며 여기에는 각 서비스의 서비스 ID와 URL 등의 정보가 등록되어 있다.
  • 클라이언트는 일반적으로 자바 애플리케이션이지만 자바가 아닌 경우 Sidecar 형태로 동작한다. 또 클라이언트는 서버로부터 레지스트리 정보를 가져와서 로컬에 캐시한다. 그리고 캐시된 정보를 사용한다. 물론 캐시는 1회성이 아니라 주기적으로 갱신된다.
  • 서버에 클라이언트가 등록되면 서버는 주기적으로 ping을 쏴서 healcheck를 수행한다. ping이 안되면 레지스트리 대상에서 제외한다.

3.3. Consul

etcd와 유사한데 분산 컴퓨팅을 위해 다른 알고리즘을 사용한다.

하시코프가 만들었는데 2014년 DNS 기반 서비스 검색을 위해 출시되었다. 

GitHub 내 Changelog는 https://github.com/hashicorp/consul/blob/master/CHANGELOG.md 를 참고하라.

일반적으로 자동화나 편의성이 상대적으로 높다고 알려져있다. (HTTP API, UI API 등)

3.4. Zookeeper

아파치 프로젝트이다. Distributed locking 기능을 제공한다.