-
Service Discovery란?MSA & 쿠버네티스(Kubernetes) - k8s 2022. 3. 24. 18:05
Service Discovery란?
MSA로 구성되어 있는 서비스들은 각자 다른 IP와 Port를 가지고 있습니다.
MSA와 같은 분산 환경은 서비스 간의 원격 호출로 구성되며 원격 서비스 호출은 IP주소와 포트를 이용하는 방식입니다.
클라우드 환경이 되면서 서비스가 Auto-Scaling등에 의해서 동적으로 생성되며 서비스의 IP가 동적으로 변경되는 일이 잦아졌습니다.
따라서 서로 다른 서비스들의 IP와 Port 정보에 대해서 저장하고 관리할 필요가 있는데 이것을 Service Discovery라고 합니다.
AutoScaling이란?
사용자가 정의한 주기나 이벤트에 따라 서버를 자동으로 생성하거나 삭제하는 것을 말합니다.
제공하는 서비스에 대해서 사용자가 몰리거나, 여유로운 시간대에 서버를 자동으로 늘리거나 줄여 비용 부담을 줄이고 원활한 서비스를 제공할 수 있습니다.
다음 그림과 같이 Service A의 인스턴스들이 생성될 때 Service A에 대한 주소를 Service registry에 등록해놓습니다.
Service A를 호출하고자 하는 클라이언트는 Service registry에 Service A의 주소를 물어보고 등록된 주소를 받아서 그 주소로 서비스를 호출합니다.
Client side discovery vs Server side discovery
Service discovery 기능을 구현하는 방법으로는 크게 2가지 방식이 존재합니다.
앞에서 소개한 service registry를 이용하는 방식을 client side discovery라고 합니다.
다른 접근 방식으로는 호출이 되는 서비스 앞에 일종의 proxy 서버(로드밸런서)를 넣는 방식입니다.
- 서비스 클라이언트가 로드밸런서를 호출한다.
- 로드밸런서가 Service registry로 부터 등록된 서비스의 위치를 반환한다.
- 이를 기반으로 라우팅한다.
Service registry
Service registrys는 서비스 검색의 핵심 부분입니다.
가장 쉬운 방법으로는 DNS 레코드에 하나의 호스트명에 여러 개의 IP를 등록하는 방식으로 구현할 수 있습니다.
하지만 DNS 레코드 삭제 시 업데이트되는 시간 등이 소요됩니다.
따라서 ZooKeeper나 etcd와 같은 서비스를 이용할 수 있으며 Service discovery에 전문화된 설루션인 Netflix의 Eureka나 Hashcorp의 Consul과 같은 서비스가 있습니다.
출처
https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/
'MSA & 쿠버네티스(Kubernetes) - k8s' 카테고리의 다른 글
도커란? +(도커 이미지란?) (0) 2022.06.29 NGINX란? (0) 2022.06.25 로드 밸런서(Load Balancer)란? (0) 2022.03.22 Message System이란? (0) 2022.03.18 서비스 메시(Service Mesh)란? + API Gateway와 차이점 (0) 2022.03.17