1. Service Discovery란
MSA와 같은 분산 환경에서는 서비스 간의 API 호출로 동작하는데 API를 호출하기 위해서는 각 서비스의 IP 주소와 PORT 번호를 알아야 합니다. IP 주소와 PORT 번호가 고정적이라면 다행이지만 요즘은 클라우드 환경이 기반이 되면서 서비스의 IP가 동적으로 변경되는 경우가 있습니다. 이러한 변화를 매번 대응할 수 없기 때문에 Service Discovery를 통해 서비스의 위치(IP, PORT)를 알아낼 수 있습니다. 이러한 Service Discovery를 구현하는 방법으로는 크게 Client Side Discovery 방식과 Server Side Discovery 방식이 있습니다.
2. Client Side Discovery
클라이언트 서비스가 service registry에 query를 통해 서비스의 위치를 물어보고 호출하는 방식으로, 호출 시에는 로드 밸런싱 알고리즘을 통해 서비스가 호출됩니다. Service Discovery에 서비스가 등록될 때 ip 주소와 port 번호가 service registry에 등록되며, 서비스가 종료될 때 service registry에서 삭제됩니다.
Client Side Discovery의 대표적인 예로 Netflix Eureka가 있습니다. Netflix Eureka는 서비스를 등록하고, 사용 가능한 서비스를 조회하기 위한 REST API를 제공하며 Neflix Ribbon은 Eureka와 함께 쓰이며 로드밸런싱 역할을 해줍니다.
3. Service Side Discovery
Client Side Discovery와의 차이점은 Load Balancer를 앞단에서 사용하면서 클라이언트 서비스는 로드밸런서를 호출하고, 로드밸런서가 Service Registy에 서비스의 위치(ip, port)를 확인한 후 해당하는 서비스를 호출하는 구조입니다. client side discovery와 마찬가지로 서비스가 등록될 때 service registry에 생성되고, 서비스가 종료될 때 service registry에서 삭제됩니다.
Service Side Discovery의 대표적인 예로 AWS Elastic Load Balancer(ELB), Kubernetes가 있습니다.
< 참고 자료 >
'Spring > 스프링 클라우드' 카테고리의 다른 글
[Spring Cloud] Spring Cloud Gateway(SCG) (0) | 2023.05.17 |
---|