MSA(Micro Software Architecture)
MSA(Micro Software Architecture)
-
하나의 큰 Application을 여러 개의 작은 Application으로 쪼개어 변경과 조합이 가능하도록 만든 Architecture
-
독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크
Monolithic Architecture
-
소프트웨어의 모든 구성 요소가 한 프로젝트에 통합되어 있는 형태
-
소규모 프로젝트에는 Monolithic Architecture가 합리적
-
하지만 일정 규모 이상의 서비스 또는 많은 개발자가 투입되는 프로젝트에는 Monolithic Architecture로는 한계가 있음.
-
빌드 시간 및 테스트 시간, 배포 시간이 기하급수적으로 증가
-
부분의 장애가 전체 서비스의 장애로 이어지는 경우 발생
-
서비스를 변경하기 어렵고, 수정 시 장애의 영향도 파악하기 힘듦
-
부분적인 Scale-out(여러 서버로 나누어 일을 처리하는 방식)이 어려움
-
한 프레임워크와 언어에 종속적
-
-
이러한 단점들을 극복하기 위해 MSA 등장
MSA의 특징
-
각각의 서비스 자체는 하나의 Monolithic Architecture와 유사한 구조를 가짐
-
각각의 서비스는 독립적으로 배포 가능
-
각 서비스의 다른 서비스에 대한 의존성은 최소화
-
각각의 서비스는 개별 프로세스로 구동되며 API를 통해 상호작용
MSA의 장점
-
팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있음
-
각 서비스별로 독립적으로 배포 가능
-
각 서비스의 부하에 따라 개별적 scale-out 가능
-
신기술 적용 유연
-
장애가 전체 서비스로 확장될 위험 적음
MSA의 단점
-
서비스 간 호출시 API를 사용하기 때문에 통신 비용, 지연 시간 증가
-
서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도, 비용 증가
-
데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어렵고 데이터의 정합성 관리 또한 쉽지 않음
-
실제 운영 환경에 대해서 배포하는 것이 쉽지 않음