MSA의 정의를 알기 위해서는 그와 반대되는 모노리스 시스템에 대해서 이해해야한다.
모노리스(Monoliths)
- 프로젝트에 모든 코드가 모여있어, 시스템 구조가 간결하고 빠르게 구축할 수 있다,
- 애플리케이션이 한 덩어리로 구성하며 단일 프로세스로 실행해야한다.
- 한꺼번에 수정, 배포되어야한다. 하나가 실패하면 모두 실패됨을 의미한다.
문제점: 작은 부분을 수정해도 전체 부분에 대해서 영향을 줄 수 있다.
모노리스를 클라우드 인프라에서 활용시에 스케일 아웃의 대상은 모노리스 전체가 된다. 그것만으로 충분히 확장성, 탄력성이 보장가능하나 비용효율적이지 않다.
그에 비해 마이크로 서비스는 애플리케이션이 여러개의 서비스 조각으로 구성된다.
Micro Service Architecture 정의
Micro Service는 작고, 독립적이며, 느슨하게 결합되어 있어 하나의 소규모 개발자 팀이 작성하고 유지 관리할 수 있다.
서비스는 각기 독립적인 기능을 제공한다. 서비스가 사용하는 저장소는 다른 서비스와 완벽히 격리된다. 따라서 독립적으로 수정 가능하며 별도 배포, 확장 가능하다. 따라서, 하나의 서비스 실패는 전체 실패가 아닌 부분적인 실패를 의미한다.
확장시, 특정 기능별 독립적으로 확장 가능하며 특정 서비스의 변경 시 서비스 만 빌드, 배포가 진행된다. 독립적으로 서로 다른 언어로 개발 가능하다.
MSA의 특징
- 하나의 시스템에서 개발 기술 환경이 다르다.
- n개의 인스턴스가 있는데 이를 MSA라 한다.
- 서비스 자체 외에도 관리/오케스트레이션, API 게이트웨이와 같이 몇 가지 다른 구셩 요소가 기존 마이크로 서비스 아키텍쳐에 추가된다.
Reference.