MSA

Updated:

  • 하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐

Microservice

  • 각각의 서비스는 그 크기가 작을 뿐, 서비스 자체는 하나의 모놀리틱 아키텍쳐와 유사한 구조를 가짐
  • 각각의 서비스는 독립적으로 배포가 가능해야함.
  • 각각의 서비스는 다른 서비스에 대한 의존성이 최소화 되어야함
  • 각 서비스는 개별 프로세스로 구동 되며, REST와 같은 가벼운 방식으로 통신되어야 함.

장점

  • 배포(deployment) 관점
    • 서비스 별 개별 배포 가능 ( 배포 시 전체 서비스의 중단이 없음)
    • 요구사항을 신속하게 반영하여 빠르게 배포할 수 있음.
  • 확장(scaling) 관점
    • 특정 서비스에 대한 확장성이 용이함.
    • 클라우드 사용에 적합한 아키텍쳐.
  • 장애(failure) 관점
    • 장애가 전체 서비스로 확장될 가능성이 적음
    • 부분적 장애에 대한 격리가 수월함

단점

  • Monolithic Architecture은 단순한 아키텍쳐인데 비해 MSA는 보다 복잡한 아키텍쳐로, 전체 서비스가 커짐에 따라 그 복잡도가 기하급수적으로 늘어날 수 있습니다.
    • 성능 - 서비스 간 호출 시 API를 사용하기 때문에, 통신 비용이나, Latency가 그만큼 늘어나게 됩니다.
    • 테스트 / 트랜잭션 - 서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도가 증가하고, 많은 자원을 필요로 합니다.
    • 데이터 관리 - 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어렵고, 데이터의 정합성 또한 관리하기 어렵습니다.

<-> Monolithic Architecture

  • 서비스/프로젝트가 커지면 커질수록, 영향도 파악 및 전체 시스템 구조의 파악에 어려움이 있습니다.
  • 빌드 시간 및 테스트시간, 그리고 배포시간이 기하급수적으로 늘어나게 됩니다.
  • 서비스를 부분적으로 scale-out하기가 힘듭니다.
  • 부분의 장애가 전체 서비스의 장애로 이어지는 경우가 발생하게됩니다.

Leave a comment