MSA란?
MicroService Architecture
모든 시스템의 구성요소가 한 프로젝트에 통합되어 있는 monolithic Architecture의 한계점을 극복하고자 등장.
작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크.
MSA는 1개의 시스템을 완전한 독립적으로 배포 가능한 각각의 서비스로 분할한다.
각각의 서비스는 RESTful API를 통해 데이터를 주고 받으며, 1개의 큰 서비스를 구성한다.
다른 기술 스택 (개발 언어, DB)이 사용 가능한 단일 사업 영역에 초점을 둔다.
MSA 특징
API를 통해서만 상호작용 할 수 있다.
서비스의 end-point(접근점)을 API 형태로 외부에 노출한다.
실질적인 세부 사항은 모두 추상화한다.
내부의 구현 로직, 아키텍쳐와 프로그램 언어, DB, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다.
MSA 장점
각각의 서비스는 모듈화가 되어 있으며 이러한 모듈끼리는 RPC 또는 Message-driven API 등을 이용해서 통신한다.
각각의 개별의 서비스 개발을 빠르게 하고, 유지 보수도 쉽게 할 수 있도록 한다.
적절한 수준의 기술 스택을 다르게 가져갈 수 있다.
서비스별로 독립적 배포가 가능하다 > 지속적인 배포 (CD)도 모놀로식에 비해서 가볍게 할 수 있다.
각각 서비스의 부하에 따라 개별적인 Scale-Out이 가능하다. > 이는 메모리, CPU 입장에서 상당히 이득이다.
일부 서비스에 장애가 발생하여도 전체 서비스에 장애가 발생하지 않는다.
각각의 서비스들은 다른 언어와 프레임워크로 구성될 수 있다.
서비스의 확장이 용이하다.
MSA 단점
모놀리식에 비해 상대적으로 많이 복잡하다.
서비스 간에 RESTful API로 통신하기 때문에 그에 대한 비용이 발생한다.
서비스가 분리되어 있어, 테스팅이나 트랜잭션 처리 등이 어렵다. > 통신 장애와 서버의 부하 등이 있을 경우 어떻게 트랜잭션을 유지해야할지 결정하고 구현해야 한다.
서비스 간에 호출이 연속적이기 떄문에 디버깅 및 통합 테스트가 어렵다.
실제 운영 환경에 대해서 배포하는 것이 쉽지 않다.
MSA 서버 구성
서비스 디스커버리 서버
웹 서비스 클라이언트
클라이언트 사이드 로드 밸런서
서킷 브레이커 : 클라이언트에서 원격 서버로 전송한 요청의 실패율이 특정 임계치를 넘어서면, 이를 서버가 문제가 있다고 판단하여 더 이상 무의미한 요청을 전송하지 않고 빠르게 에러를 발생시키는 방법(fail test)이다.
API Gateway : 리버스 프록시 서버
확장
사용자가 몰리면 서비스를 안정적으로 유지하기 위해 확장이 필요하죠. 스케일 방법에는 다음과 같은 세 가지 방법이 있습니다.
- X 축 : 같은 서비스를 여러개로 복제
- Y 축 : 서비스를 작게 나누기
- Z 축 : 데이터 나눠서 저장
주로 위 세 가지 방법을 함께 사용하게 됩니다. 먼저 마이크로서비스에서는 같은 서비스를 여러개로 분리해놨습니다(Y축). 그리고 각 서비스마다 요청의 부하가 다른데, 모놀리스에서는 특정 서비스가 아니라 전체를 스케일할 수 밖에 없습니다. 이에 반해 마이크로서비스에서는 서비스가 나뉘어져 있기 때문에 부하가 몰리는 서비스 별로 복제해 스케일 아웃을 할 수 있습니다(X축).
아래 그림은 특정 서비스에서 요청이 많아졌을 때, 로드 밸런서가 해당 부하를 감지하고 해당 서비스를 EC2 인스턴스에 도커 컨테이너를 이용해 배포하는 모습입니다.
- X 축 : 같은 서비스를 여러개로 복제
- Y 축 : 서비스를 작게 나누기
- Z 축 : 데이터 나눠서 저장
주로 위 세 가지 방법을 함께 사용하게 됩니다. 먼저 마이크로서비스에서는 같은 서비스를 여러개로 분리해놨습니다(Y축). 그리고 각 서비스마다 요청의 부하가 다른데, 모놀리스에서는 특정 서비스가 아니라 전체를 스케일할 수 밖에 없습니다. 이에 반해 마이크로서비스에서는 서비스가 나뉘어져 있기 때문에 부하가 몰리는 서비스 별로 복제해 스케일 아웃을 할 수 있습니다(X축).
아래 그림은 특정 서비스에서 요청이 많아졌을 때, 로드 밸런서가 해당 부하를 감지하고 해당 서비스를 EC2 인스턴스에 도커 컨테이너를 이용해 배포하는 모습입니다.
출처
https://www.devkuma.com/docs/msa/
MSA (Microservices Architecture) 마이크로소프트 아키텍처
MSA이란? Micoroservices Architecture 모든 시스템의 구성요소가 한 프로젝트에 통합되어 있는 Monolithic Architecture(모놀리식 아키텍처)의 한계점을 극복하고자 등장하였다. 작고, 독립적으로 배포 가능한
www.devkuma.com
https://futurecreator.github.io/2018/09/14/what-is-microservices-architecture/
마이크로서비스 Microservices (1) 아키텍처 소개
주변에서 마이크로서비스 아키텍처(Microservices architecture; MSA)에 대한 이야기가 많이 들려옵니다. 마이크로서비스가 모든 것을 해결해줄 것처럼 이야기하는 사람이 있는가하면, 서비스 지향 아키
futurecreator.github.io
'백엔드 > 개발과 설계 원칙' 카테고리의 다른 글
TDD - 테스트 주도 개발의 진행 방식 (0) | 2023.04.25 |
---|---|
TDD 개요 (0) | 2022.10.18 |
객체지향 설계 5원칙 (0) | 2022.06.12 |
객체지향이란 (0) | 2022.06.12 |
Impl 분류하는 이유 (0) | 2022.04.10 |