Skip to content

Latest commit

 

History

History
48 lines (31 loc) · 5.79 KB

File metadata and controls

48 lines (31 loc) · 5.79 KB

마이크로서비스 아키텍처 기반 오케스트레이션

오늘은 마이크로서비스 아키텍처 기반의 오케스트레이션에 대해 정리하고자 한다. 마이크로서비스 아키텍처에서는 각 서비스가 독립적으로 동작하고 배포될 수 있으므로, 다양한 서비스들을 효율적으로 조율하고 관리하는 오케스트레이션이 필수적이다. 오케스트레이션을 통해 배포와 스케일링, 모니터링, 장애 복구 등을 자동화하여 마이크로서비스 환경의 유연성과 안정성을 보장할 수 있다.

1. 마이크로서비스 아키텍처에서 오케스트레이션의 중요성

마이크로서비스 아키텍처는 하나의 애플리케이션을 여러 개의 독립된 서비스로 분할하여 구성하는 구조로, 각 서비스는 고유의 역할과 데이터를 가지고 동작한다. 이 아키텍처에서는 각 서비스가 독립적으로 배포되고, 상호작용하면서 시스템의 전체 기능을 수행한다. 따라서, 오케스트레이션은 여러 분산된 서비스를 통합적으로 관리하고, 개별 서비스의 상태를 조율해 애플리케이션의 안정적 운영을 돕는 핵심 역할을 한다.

오케스트레이션을 통해 다음과 같은 이점을 얻을 수 있다:

  • 서비스 확장성: 트래픽이 증가할 때 특정 서비스만을 스케일링하여 리소스를 효율적으로 사용할 수 있다.
  • 자동화된 배포: 각 서비스를 독립적으로 배포하여 배포 시간을 단축하고 운영 효율성을 높일 수 있다.
  • 장애 복구: 서비스 장애 발생 시 자동으로 복구되도록 설정하여 시스템의 가용성을 높인다.

2. 마이크로서비스 오케스트레이션 도구 - AWS ECS

내가 사용해봤던 기술 중 AWS의 ECS(Amazon Elastic Container Service)는 관리형 컨테이너 오케스트레이션 서비스로, 마이크로서비스 아키텍처에서 각 서비스의 배포, 스케일링, 로드 밸런싱을 자동화할 수 있다. 특히 ECS는 AWS와의 높은 통합성을 제공해, AWS의 다른 서비스들과 손쉽게 연동할 수 있다.

ECS를 사용해 다음과 같은 작업을 수행할 수 있었다:

  • Auto Scaling: 각 서비스의 트래픽과 부하에 따라 컨테이너 인스턴스를 자동으로 확장하고 축소하여 안정적인 서비스 성능을 유지할 수 있었다.
  • 로드 밸런싱: ALB(Application Load Balancer)를 통해 서비스로 들어오는 트래픽을 균등하게 분배하고, 헬스 체크를 통해 비정상 상태의 서비스가 자동으로 제외되도록 설정했다.
  • Blue/Green 배포: 서비스의 새 버전을 별도의 환경에서 테스트하고, 성공 시 트래픽을 새로운 버전으로 전환하여 무중단 배포를 구현했다. 이 방식은 배포 실패 시 즉각 롤백할 수 있는 유연성을 제공했다.

3. 마이크로서비스 오케스트레이션의 주요 구성 요소

  • 서비스 디스커버리: 각 서비스가 서로 위치 정보를 인식하도록 하여, 서비스 간 통신을 원활하게 한다. ECS와 AWS의 서비스 디스커버리 통합을 통해 동적 IP 할당 환경에서도 서비스 위치를 쉽게 확인할 수 있다.

  • API Gateway: 외부 요청을 각 마이크로서비스로 라우팅하며, 트래픽 제어, 로드 밸런싱을 통해 시스템의 안정성을 높인다.

  • 로그 관리 및 모니터링: 각 서비스의 로그와 상태를 중앙 집중적으로 관리하여 문제 발생 시 빠르게 원인을 파악할 수 있도록 한다. CloudWatch 및 X-Ray와 같은 도구를 통해 서비스 상태를 모니터링하고, 성능 및 오류 로그를 분석할 수 있었다.

4. 트러블슈팅 경험: ECS 오케스트레이션 설정 오류

ECS를 통해 Blue/Green 배포를 설정하는 과정에서, 일부 서비스가 예상대로 스케일링되지 않는 문제가 발생했다.

  • 문제 원인
    Auto Scaling 설정에서 각 서비스의 CPU와 메모리 사용량에 맞는 적절한 스케일링 정책이 설정되지 않아, 필요 이상의 리소스를 사용하거나 제한된 리소스로 인해 과부하가 발생했다.

  • 해결 방법

    1. 필요 이상의 리소스 원인 분석: 다른 부서에서 일정시간에 특정 서비스의 API를 불필요하게 많이 호출하는 배치가 있었다.(단일 고객을 조회하는 API를 특정 조건 없이 전체 고객에 대한 ID로 전부 요청을 보내고 있었다...) 요청 ClientIP를 확인 하고 해당 담당자와 커뮤니케이션 후 적절한 요청을 보내도록 했다.
    2. 스케일링 정책 재설정: 서비스의 실제 워크로드에 맞춰 CPU와 메모리 기준 스케일링 정책을 재설정했다.
    3. 로드 밸런서 헬스 체크 강화: 비정상 상태의 컨테이너를 자동으로 재시작하도록 ALB 헬스 체크를 강화해 문제 발생 시 빠른 대응이 가능하도록 했다.
    4. 모니터링 개선: CloudWatch 경고 알림을 설정해 리소스 사용량이 기준치를 초과할 경우 알림이 오도록 구성했다.
  • 결과
    설정 변경 후 ECS 오케스트레이션이 안정화되었으며, 필요에 따라 서비스가 유동적으로 스케일링될 수 있도록 관리할 수 있었다.

결론

마이크로서비스 아키텍처에서는 각 서비스의 독립성과 확장성을 유지하면서도, 통합된 관리가 필수적이다. 오케스트레이션을 통해 서비스의 배포, 스케일링, 로드 밸런싱을 자동화함으로써 마이크로서비스 간의 의존성을 효율적으로 조율할 수 있었다. 오케스트레이션을 통해 시스템의 가용성과 안정성을 유지하며, 더 나아가 자동화된 배포와 장애 복구에 대처하자.