MSA(Microservices Architecture)

Spring Cloud

운동하는 주니어개발자 2024. 8. 2. 12:08

1. Spring Cloud

Spring Cloud란?

  ● Spring Cloud는 마이크로서비스 개발을 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장이다.

  ● 마이크로서비스 아키텍처를 쉽게 구현하고 운영할 수 있도록 도와준다.

주요기능

  ● 서비스 등록 및 디스커버리 : Eureka, Consul, Zookeeper

  ● 로드밸런싱 : Ribbon, Spring Cloud LoadBalancer

  ● 서킷 브레이커 : Hystrix, Resilience4j

  ● API 게이트웨이 : Zuul, Spring Cloud Gateway

  ● 구성 관리 : Spring Cloud Config

  ● 분산 추적 : Spring Cloud Sleuth, Zipkin

  ● 메시징 : Spring Cloud Stream


2. Spring Cloud 주요 모듈

2-1 서비스 등록 및 디스커버리

  - Eureka

    ● 넷플릭스가 개발한 서비스 디스커버리 서버로, 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리한다.

  - 주요 특징

    ● 서비스 레지스트리 : 모든 서비스 인스턴스의 위치를 저장하는 중앙 저장소

    ● 헬스 체크 : 서비스 인스턴스의 상태를 주기적으로 확인하여 가용성을 보장한다.

2-2 로드 밸런싱

  - Ribbon

    ● 넷플릭스가 개발한 클라이언트 사이드 로드 밸런서로 서비스 인스턴스 간의 부하를 분산

  - 주요 특징

    ● 서버 리스트 제공자 : Eureka로부터 서비스 인스턴스 리스트를 제공받아 로드 밸런싱에 사용

    ● 로드 밸런싱 알고리즘 : 라운드 로빈, 가중치 기반 등 다양한 로드 밸런싱 알고리즘 지원

    ● Failover : 요청 실패 시 다른 인스턴스로 자동 전환

2-3 서킷 브레이커

  - Hystrix

    ● 넷플릭스가 개발한 서킷 브레이커 라이브러리로 서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지

  - 주요 특징

    ● 서킷 브레이커 상태: 클로즈드, 오픈, 하프-오픈 상태를 통해 호출 실패를 관리

    ● Failback: 호출 실패 시 대체 로직을 제공하여 시스템 안정성 확보

    ● 모니터링: Hystrix Dashboard를 통해 서킷 브레이커 상태 모니터링

  - Resilience4j

    ● Resilience4j는 자바 기반의 경량 서킷 브레이커 라이브러리로, 넷플릭스 Hystrix의 대안으로 개발

  - 주요 특징

    ● 서킷 브레이커: 호출 실패를 감지하고 서킷을 열어 추가적인 호출을 차단하여 시스템의 부하를 줄임

    ● Failback: 호출 실패 시 대체 로직을 실행하여 시스템의 안정성을 유지

    ● 타임아웃 설정: 호출의 응답 시간을 설정하여 느린 서비스 호출에 대응할 수 있음

    ● 재시도: 재시도 기능을 지원하여 일시적인 네트워크 문제 등에 대응할 수 있음


3. Spring Cloud 구성 요소의 활용

3-1 API 게이트웨이

- Zuul

    ● 넷플릭스가 개발한 클라이언트 사이드 로드 밸런서로 서비스 인스턴스 간의 부하를 분산

- 주요 특징

    라우팅: 요청 URL에 따라 적절한 서비스로 요청 전달

    필터: 요청 전후에 다양한 작업을 수행할 수 있는 필터 체인 제공

    모니터링: 요청 로그 및 메트릭을 통해 서비스 상태 모니터링 할 수 있음

- Cloud Gateway

    ● 클라우드 게이트웨이는 스프링 클라우드에서 제공하는 API 게이트웨이로 마이크로서비스 아키텍처에서 필수적인 역할

- 주요 특징

    루팅 및 필터링: 요청을 받아 특정 서비스로 라우팅하고 필요한 인증 및 권한 부여를 수행

    보안: 외부 요청으로부터 애플리케이션을 보호하고, 보안 정책을 적용함

    ● 효율성: 마이크로서비스 아키텍처에서 필요한 요청 처리 및 분산 환경의 관리를 효율적으로 수행

3-2 구성 관리

- Spring Cloud Config

    ● Spring Cloud Config는 분산된 환경에서 중앙 집중식 설정 관리를 제공

- 주요 특징

    Config 서버: 중앙에서 설정 파일을 관리하고 각 서비스에 제공

    Config 클라이언트: Config 서버에서 설정을 받아서 사용하는 서비스

    설정갱신: 설정 변경 시 서비스 재시작 없이 실시간으로 반영


4. Spring Cloud의 적용 사례

4-1 Netflix

    ● 넷플릭스는 2000년대 후반 데이터 베이스 장애를 통해 심각한 서비스 장애를 겪음

    ● 사용자가 급격히 증가 함에 따라 기존 모놀리틱 아키텍처로는 빠르게 증가하는 트래픽과 사용자 요구를 감당하기 어렵고

    신뢰성 높고 수평 확장이 가능한 클라우드 시스템으로 이전할 필요성을 느꼈다.

    폭발적인 사용자 증가, 빈번한 서비스 장애, 인프라 확장의 어려움, 빠른 기능 배포의 필요성, 클라우드 전환 등의 계기로 인해 MSA 전환이 시작

- MSA로의 전환 이유

    확장성(Scalability): 넷플릭스는 글로벌 서비스를 제공하며 수백만 명의 사용자가 동시 접속할 수 있는 인프라가 필요

    신뢰성(Reliability): 한 부분의 장애가 전체 시스템에 영향을 미치지 않도록 해야했음

    개발 속도(Speed of Development): 새로운 기능을 빠르게 배포하고, 독립적인 팀이 동시에 작업할 수 있는 환경이 필요

- 전환 과정

    ● 서비스 분리: 넷플릭스는 기존 모놀리식 애플리케이션을 여러 개의 독립적인 마이크로서비스로 분리

    자동화 도구 도입: CI/CD 파이프라인을 구축하여 코드의 빌드, 테스트, 배포 과정을 자동화 이를 통해 개발 속도를 크게 향상

    ● 자체 도구 개발: 넷플릭스는 Hystrix, Eureka, Ribbon 등의 도구를 개발하여 서비스 간 통신, 장애 복구, 로드 밸런싱 등을 효율적으로 처리

    ● 클라우드 인프라 활용: AWS와 같은 클라우드 인프라를 활용하여 서비스 확장성을 높였음

- 전환 과정

    향상된 확장성: 넷플릭스는 MSA 전환 이후 수천 개의 마이크로서비스를 운영하며, 글로벌 사용자 증가에 유연하게 대응

    높은 가용성: 서비스 장애 시 다른 서비스에 영향을 미치지 않고 독립적으로 복구할 수 있어, 사용자에게 지속적인 서비스를 제공

    빠른 배포 주기: 새로운 기능을 신속하게 개발하고 배포할 수 있어, 사용자 요구에 빠르게 대응

'MSA(Microservices Architecture)' 카테고리의 다른 글

대규모 AI 시스템 설계 프로젝트  (1) 2024.09.06
서비스 디스커버리  (0) 2024.08.02
MSA 개요  (1) 2024.07.31