본문 바로가기

엔지니어링

서비스 디스커버리 패턴

서비스 디스커버리 패턴(Service Discovery Pattern)은 마이크로서비스 구조에서 중요한 역할을 하는 디자인 패턴입니다. 클라우드 기반 인프라에서는 수백, 수천 개의 서비스가 동시에 운영되고, 각각의 서비스는 동적으로 확장하거나 축소할 수 있습니다. 이런 복잡한 시스템에서, 어떤 서비스가 어디에 있는지, 어떻게 연결할 수 있는지를 찾아내는 것이 쉬운 것은 아닙니다. 이 때 한 서비스가 다른 서비스를 찾아 연결하는 것이 '서비스 디스커버리'입니다.

 

그런데 말입니다.. DNS에 IP를 여러개 붙여놓으면 되는 것 아닐까요? 왜 굳이 서비스 디스커버리가 필요한 걸까요?

 

쿠버네티스의 '서비스'가 바로 그 필요성을 설명하는 단적인 예입니다.

참고로 쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 플랫폼인데요. 컨테이너를 사용하는 환경에서, 컨테이너는 매우 짧은 생명주기를 가집니다. 계속해서 새로 생성되고 소멸되죠. 이로 인해 컨테이너의 IP 주소는 계속 변하게 되고, 이를 실시간으로 연결해 줄 매개체가 필요합니다.

이러한 상황에서 쿠버네티스의 서비스는 이를 해결하는 방안을 제공합니다. 쿠버네티스의 서비스는 여러 개의 파드(Pod)에 대한 단일 진입점을 제공하는데, 이는 일종의 로드 밸런서 역할을 합니다. 즉, 서비스는 파드가 죽거나 새로운 파드가 생성되더라도 사용자에게는 계속 동일한 IP와 포트를 제공할 수 있습니다. 이를 통해 다른 서비스나 클라이언트가 파드에 쉽게 접근할 수 있게 되는 것입니다.

그렇다면 쿠버네티스가 모든 걸 해결해줄까요? 만약 클러스터 간의 통신이 필요한 상황에서는 어떻게 해야할까요?

이러한 상황에서 도움을 받을 수 있는 몇 가지 도구와 기술들이 있습니다.

1. 서비스 메시: Istio, Linkerd, Consul 같은 서비스 메시 솔루션들은 멀티 클러스터 서비스 디스커버리를 지원합니다. 이들은 각 클러스터의 서비스를 통합적으로 관리하고, 클러스터 간의 통신에 필요한 라우팅과 로드 밸런싱을 처리할 수 있습니다.

2. DNS: CoreDNS 같은 DNS 기반의 서비스 디스커버리 도구를 사용하여, 클러스터 간의 서비스 디스커버리를 수행할 수 있습니다. 각 서비스에 DNS 이름을 할당하고, 클러스터 간의 통신에 DNS를 이용하여 서비스를 찾을 수 있습니다.

3. API Gateway: Kong, Ambassador 등의 API Gateway도 멀티 클러스터 환경에서 서비스 디스커버리를 지원할 수 있습니다. 이들은 각 클러스터의 서비스를 통합적으로 라우팅하고 관리하는 역할을 합니다.

4. 클라우드 제공 서비스: AWS Cloud Map, Google Cloud Service Directory 등과 같은 클라우드 제공 서비스 디스커버리 도구를 사용할 수도 있습니다. 이들은 클라우드 벤더가 제공하는 자체적인 서비스 디스커버리 솔루션으로, 클라우드 환경에서 클러스터 간의 서비스 디스커버리를 돕습니다.

이러한 도구와 기술들은 각각의 클러스터에서 실행되는 서비스를 통합적으로 관리하고 라우팅하는 역할을 하며, 각각의 방식과 기능에 따라 가장 적합한 도구를 선택하는 것이 중요합니다. 이들을 통해 클러스터 간의 통신과 서비스 디스커버리를 보다 효과적으로 처리할 수 있습니다.

서비스 디스커버리 패턴은 마이크로서비스 아키텍처에서 각각의 서비스가 어떻게 효율적으로 상호작용할 수 있는지를 정의하는 중요한 도구입니다. 서비스 디스커버리를 통해 시스템은 더욱 유연하고, 확장 가능하며, 견고해질 수 있습니다.

그럼 다음 포스팅에서 서비스 메시에 대해서 알아보겠습니다. 감사합니다.

'엔지니어링' 카테고리의 다른 글

Bulkhead 패턴  (0) 2023.07.18
Amazon API Gateway vs API Gateway 직접 구현  (0) 2023.07.17
API 게이트웨이 - Rate limit  (0) 2023.07.15
Spring Boot를 이용한 OAuth 2.0 인증 구현  (0) 2023.07.15
API 게이트웨이 - 인증  (0) 2023.07.15