MSA (Microservices Architecture) 마이크로소프트 아키텍처


MSA이란?

  • Micoroservices Architecture
  • 모든 시스템의 구성요소가 한 프로젝트에 통합되어 있는 Monolithic Architecture(모놀리식 아키텍처)의 한계점을 극복하고자 등장하였다.
  • 작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크이다.
  • MSA는 1개의 시스템을 완전한 독립적으로 배포 가능한 각각의 서비스로 분할한다.
  • 각각의 서비스는 RESTful API를 통해 데이터를 주고 받으며, 1개의 큰 서비스를 구성한다.
  • 다른 기술 스택(개발 언어, 데이터베이스 등)이 사용 가능한 단일 사업 영역에 초점을 둔다.

MSA의 특징

  • API를 통해서만 상호작용 할 수 있다.
  • 서비스의 end-point(접근점)을 API 형태로 외부에 노출한다.
  • 실직적인 세부 사항은 모두 추상화 한다.
  • 내부의 구현 로직, 아키텍처와 프로그램 언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다.

MSA의 장점

  • 각각의 서비스는 모듈화가 되어 있으며 이러한 모듈끼리는 RPC 또는 Message-driven API 등을 이용해서 통신한다.
  • 각각의 개별의 서비스 개발을 빠르게 하고, 유지 보수도 쉽게 할 수 있도록 한다.
  • 적절한 수준의 기술 스택을 다르게 가져갈 수 있다.
  • 서비스별로 독립적 배포가 가능하다.
    • 지속적인 배포(CD)도 모놀로식에 비해서 가볍게 할 수 있다.
  • 각각 서비스의 부하에 따라 개별적인 Scale-out이 가능하다.
    • 이는 메모리, CPU 적으로 상당부분이 이득이다.
  • 일부 서비스에 장애가 발생하여도 전체 서비스에 장애가 발생하지 않는다.
  • 각각의 서비스들은 다른 언어와 프레임워크로 구성될 수 있다.
  • 서비스의 확장이 용이하다.

MSA의 단점

  • 모놀리식에 비해 상대적으로 많이 복잡하다.
  • 서비스 간에 RESTful API로 통신하기 때문에 그에 대한 비용이 발생한다.
  • 서비스가 분리되어 있어, 테스팅이나 트랜잭션 처리 등이 어렵다.
    • 통신 장애와 서버의 부하 등이 있을 경우 어떻게 transaction을 유지해야 할지 결정하고 구현해야 한다.
  • 서비스 간에 호출이 연속적이기 때문에 디버깅 및 통합 테스트가 어렵다.
  • 실제 운영 환경에 대해서 배포하는 것이 쉽지 않다.

MSA 서버 구성

서비스 디스커버리 서버

  • Spring : Netflix Eureka

웹 서비스 클라이언트

  • Spring : Netfilx Feign

클라이언트 사이드 로드 밸런서

  • Spring : Netflix Ribbon

서킷 브레이커(Circuit Breaker)

  • Spring : Netflix Hystrix
  • 클라이언트에서 원격 서버로 전송한 요청의 실패율이 특정 임계치(threshold)를 넘어서면, 이를 서버가 문제가 있다고 판단하여 더 이상 무의미한 요청을 전송하지 않고 빠르게 에러를 발생키시는 방법(fail fast)이다.

API 게이트웨이(Gateway)

  • Spring : Netflix Zuul, Gateway
  • 리버스 프록시 서버

참고