-
기존의 모놀리식 아키텍처의 방식이나 패러다임을 상당 수 바꿔야함
-
독립적으로 배포 가능한 형태의 작은 서비스로 이루어짐
-
각각의 도메인 구성에 따라 서비스 경계를 잘 구성해야함
-
서로 상태에 대해서 RestAPI 방식으로 통신해야함
-
환경 설정 정보(Config)는 코드 내에 가지고 있지 않고 외부 시스템으로 관리
-
클라우드 네이티브 기술을 활용
-
부하, 분산, 스케일업, 스케일 다운
-
CI / CD (A 서비스엔 호스트 2개, B 서비스엔 호스트 3개 등 무중단 배포를 위한 CI / CD 필요)
-
시각화 관리 필요
-
어느정도 변화가 생길 것인가? (시간과 비용을 생각하더라도 이득인가?)
-
독립 라이프 사이클 (서비스의 경계가 잘 분리되어 이루어져있는가?)
-
독립적인 확장성 (유지보수 및 확장성 가능한가? 스케일링이 쉽게 되어있는가?)
-
격리된 오류 (오류 사항이 독립적인가?)
-
외부 종속성과의 상호 작용을 단순화시켜야함 (서비스간의 종속성을 최소화함, 응집력은 높여야함)
-
Polyglot(여러가지 프로그램 언어, 스토리지 기술)을 지원하는가? (독립적인 언어와, 데이터 베이스로 개발할 수 있다)
ㅇ 서비스 공유 지향점
- SOA : 재사용을 통한 비용 절감
- MSA : 서비스 간의 결합도를 낮추어 변화에 능동적으로 대응
ㅇ 차이점 (기술방식)
- SOA : 공통의 서비스를 ESB(Enterprise Service Bus : 간단하게 표현하면 비즈니스 내에서 서비스, 애플리케이션, 자원을 연결하고 통합하는 미들웨어)에
모아 사업 측면에서 공통 서비스 형식으로 서비스 제공
- MSA : 각 독립된 서비스가 노출된 REST API를 사용
독립적으로 배포,확장될 수 있는 서비스를 조합해서 거대한 서비스를 구성하는 아키텍처 패턴
-
구성
- API GateWay
- Service Discovery
- Orchestration
- 등등등
-
사용처
- 넷플릭스
- 트위터
- 아마존
- 나이키
- Service Discovery, Load Blancer, Service Router, Config Store 등 포함
- 서비스간의 통신을 추상화하고 안전하고 빠르고 신뢰성있게 만들어주는 인프라 컨스트럭쳐 레이어
- 특징
- URI 경로, HOST 헤더, API 버전 등 응용 프로그램 규칙을 기반으로 하는 네트워크 레이어
- 경량 아키텍처를 통해 라우팅, 공통 기능 설정 가능
- 서비스 배포 전략에도 도움이 된다.
- 인증 관련, 암호화
- MSA 인프라 -> 미들웨어
- 프록시 역할, 인증, 권한 부여, 암호화, 서비스 검색, 요청 라우팅, 로드밸런싱
- 자가 치유 복구 서비스
- 서비스 간의 통신과 관련된 기능을 자동화
- CNCF(Cloud Native Computing Foundation)
- 클라우드 환경으로 구성하면 상호 작용을 하면서 구성