MSA
Last updated
Last updated
소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 서비스
장점
단순한 아키텍쳐로 개발이 편리
배포 방법이 간단함
로드밸런서를 통해 요청을 분산시켜 확장하기 쉬움
디버깅이 쉬움
단점
부분 장애가 전체 서비스의 장애로 확대될 수 있음
서비스의 특정 부분만 스케일 아웃(Scale-Out)하기 어려움
전체 시스템 구조 파악의 어려움
서비스 변경의 어려움과 수정 시 영향도 파악이 힘듦
빌드 시간 및 테스트, 배포 시간의 급증
단일 프로그램을 각 컴포넌트
별로 나누어 작은 서비스
의 조합으로 구축하는 방법
컴포넌트
각 컴포넌트는 서비스 형태로 구현
API를 이용해 타 서비스와 통신
서비스
각 서비스는 독립된 서버로 타 컴포넌트와 의존성을 가지지 않음
독립된 배포 진행
느슨하게 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA)
스타일의 일종인 소프트웨어 개발 기법
서비스지향 아키텍쳐 (SOA)
대규모 컴퓨터 시스템 구축 시, 애플리케이션의 기능을 비즈니스 적인 의미를 가지는 기능 단위로 묶어서 표준화된 호출 인터페이스(Rest API 등)를 통해 서비스로 구현하고, 이 서비스들을 업무에 따라 어플리케이션을 구성하는 소프트웨어 개발 아키텍처
특징
API를 통해서만 상호작용 가능
접근점(end-point)를 API형태로 외부에 노출하고, 실질적인 세부사항은 모두 추상화
내부 구현로직, 아키텍처, 프로그래밍 언어와 같은 기술적인 사항들은 API에 의해 가려짐
하나의 기능만 수행
마이크로 서비스는 하나의 비즈니스 범위에 맞춰 만들어짐
다양한 언어와 기술로 구축 가능
SOA에서 사용되는 집중화된 관리체계 사용하지 않음
REST등 가벼운 통신 아키텍쳐, Kafka등을 이용한 message stream 주로 사용
데이터 분리
서비스 별 별도의 데이터베이스 사용
DB 종류 별도로 가져 가거나, 같은 DB를 사용하더라도 나누어서 사용
데이터 분산으로 다른 서비스와 의존성 없음
서비스 독립 개발, 배포, 운영 가능
장점
배포
시스템 전체의 중단 없이 필요한 부분만 업데이트 및 배포 가능
실시간으로 요구사항을 반영하는 유연한 대응 가능
확장
특정 서비스에 대한 확장성 유리
클라우드 기반 서비스 사용에 적합
장애
일부 장애가 전체 서비스로 확장될 가능성 적음
부분적으로 발생하는 장애에 대한 격리 수월
단점
모놀리틱 아키텍쳐에 비해 느린 속도
서비스간 호출을 API통신을 이용함으로 속도 느림
통신에 사용하기 위한 값을 데이터 모델로 변환시켜주는 오버헤드 발생
데이터 분리로 인한 문제
다른 컴포넌트의 데이터는 API를 통해 가져와야하므로 성능상 문제 발생
트랜잭션으로 묶을 수 없음
데이터 관리의 어려움
설계의 어려움
MSA는 모놀리식에 비해 상대적으로 많이 복잡함
서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 정해야 함
Api Gateway를 구현하는 라이브러리
'API Gateway'는 분리되어 있는 서버들의 End-Point를 단일화하여 클라이언트에게 동일한 base url제공
라우팅, 로드밸런싱, 인증 역할 등을 수행
디스커버리 서비스 서버와 클라이언트를 구현하는 라이브러리
분리되 서비스(클라이언트)의 Ip/Port/InstanceId 정보를 디스커버리 서버에 저장하고, 특정 서비스의 정보가 필요할떄 저장된 서비스 정보를 반환 (e.g Api Gateway에서 서비스에 접근하고자 하는 경우)
타 서비스에 API로 접근을 지원해주는 Http Client 라이브러리
어노테이션만으로 편리하게 구성가능
다른 Spring Cloud 기술들과 통합이 편리
분산된 서비스의 모든 애플리케이션 설정 정보를 한곳에서 관리
설정파일 수정으로 서버를 재가동해야하는 불편함 해소