클라우드 서비스 환경에서 수평 확장( auto-scaling)같은 이유로 서비스 인스턴스의 수가 동적으로 가감하는 상황에서 가감되는 서비스의 주소(IP…)를 감지하고 서비스의 헬스체크를 하여 이용이 불가능한 서비스를 삭제하는 등 이름 그대로 서비스 인스턴스를 발견하고 관리하는 역할이 필요해졌고, 이 때 Netflix에서 지난 7년간 Cloud System으로 서비스 이전을 하면서 쌓은 MSA기술이 오픈 소스로 풀린 것이 스프링 클라우드 넷플릭스이다. 이 Netflix OSS에는 다음과 같은 서비스가 있다.
Eureka: Discovery Service
Ribbon: Client Side Load Balancer
Zuul: API Gateway
Hystrix: Circuit Breaker
EvCache
Spectator
Archaius
이 중에서 Eureka 서비스는 MSA의 핵심 요소인 Service Discovery를 지원하는 서비스로,
서비스 디스커버리가 가져야 할 장점들을 모두 가져갈 수 있게 해준다.
고가용성
: 서비스 검색 정보를 서비스 디스커버리 클러스터의 여러 노드가 공유하는 핫 클러스터링 환경을 지원하여 한 노드가 사용할 수 없게 되면 클러스터의 다른 노드가 인계를 받을 수 있어야 한다.
P2P(Peer-to-Peer)
: 서비스 디스커버리 클러스터의 각 노드는 서비스 인스턴스 상태를 공유한다.
부하 분산
: 요청을 동적으로 부하 분산하여 서비스 디스커버리가 관리하는 모든 서비스 인스턴스에 분배해야 한다.
회복성
: 서비스 디스커버리 클라이언트는 서비스 정보를 로컬에 캐시(cache)해야 한다. 로컬 캐싱은 서비스 디스커버리의 성능을 점진적 저하시킬 수 있는데 서비스 디스커버리 서비스가 가용하지 않을 때 애플리케이션이 로컬 캐시에 저장된 정보를 바탕으로 서비스를 찾을 수 있고 동작하게 한다.
장애 내성
: 서비스 인스턴스의 비정상을 탐지하고 가용 서비스 목록에서 인스턴스를 제거해야 한다.
서비스 디스커버리 아키텍처는 위에서 소개한 기능을 어떻게 구현하는가에서 시작한다.