MSA 아키텍처에 대해 설명한다.
하나의 큰 어플리케이션을 여러 개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처
각 서비스는 하나의 Monolith 아키텍처와 유사한 구조
각 서비스는 독립적인 배포가 가능해야 함
다른 서비스와의 의존성이 최소화 되어야 함
각 서비스는 개별 프로세스로 구동되어야 하고 REST 같은 가벼운 방식으로 통신해야 함
전체 서비스 중단없이 서비스 개별 배포가 가능
특정 서비스에 대한 확장성이 용이
장애가 전체 서비스로 확산될 가능성이 적고 장애에 대한 격리가 수월함
서비스 간 호출시 API를 사용하기에 통신 비용이나 Latency가 증가
서비스가 분리되어있기에 테스트 및 트랜잭션 처리가 복잡하고 많은 자원이 필요함
테이터가 여러 서비스에 걸쳐 분산되어 있기에 정합성 관리가 어려움
크게 Inner, Outer 아키텍처로 구분한다.
내부 서비스와 관련된 아키텍처
서비스를 어떻게 정의할 것인가?
DB Access 구조를 어떻게 설계할 것인가?
성능과 안정성을 확보하면서 서비스 분리 방안 필요
마이크로 서비스가 개발, 배포, 실행되는 운영환경과 분산된 마이크로 서비스의 관리 기능을 제공
전체 서비스 외부로부터 들어오는 접근을 내부 구조를 드러내지 않고 처리하기 위한 요소
사용자 인증, 권한 정책관리, API Gateway가 여기서 핵심적인 역할을 담당
API Gateway는 서버 최앞단에 위치하여 모든 API 호출을 받는다.
API 호출을 인증한 후 적절한 서비스들에 메세지를 전달될 수 있도록 routing한다.(REST/JSON 기반)
마이크로서비스 구성 요소간의 네트워크를 제어하는 역할을 한다.
서비스간 통신을 위해 서비스 디스커버리(Service Discovery), Service Routing, Failure Recovery, 로드 밸런싱, 보안을 담당
서비스 메쉬는 통신 및 네트워크 기능을 비즈니스 로직과 분리한 네트워크 통신 인프라이다.
대표적인 컨테이너 관리 환경이 Kubernetes
AWS의 EKS, Google cloud platform의 GKE등이 있다
어플리케이션이 실행되는 가운데 네트워크를 통해 사용할 수 있는 모든 서비스를 말하며
MySQL, 캐쉬 시스템, SMTP 서비스등 어플리케이션과 통신하는 Attached Resource들을 지칭하는 포괄적인 개념
서비스를 위한 백업 서비스 개념
백엔드 서비스를 리소스로 취급
MSA에서는 Backing Service들 중 하나인 Message Queue(ex. Kafka)를 활용한 비동기 패턴을 많이 사용
서비스 신규 생성, 재생성, 인스턴스 삭제, 서비스 장애등의 작업 시 서비스 요청을 보존할 수 있음
각 서비스들을 모니터링하고 서비스별로 발생하는 이슈들에 대응할 수 있도록 환경을 구성하는 역할
Grafana, Prometheus, EFK와 같은 오픈소스를 사용하거나 Datadog 같은 상용 솔루션을 이용
주요 기능
Monitoring
Logging
실행중인 프로세스에서 발생하는 이벤트를 수집해서 보여줌
Monolithic 어플리케이션보다 실행하는 프로세스의 수가 훨씬 많기때문에 장애 발생시에 Root Cause를 파악하기 힘듬
Elasticsearch-FluentD-Kibana가 대표적임
로그 저장소는 외부에 둬야 함
로그 파일은 ACL을 통해 로그 관리자만 확인할 수 이어야 함
Tracing
Event를 발생한 순서대로 나열하여 추적할 수 있게 해줌
Zipkin, Jaeger등이 있음
어플리케이션 개발 단계를 자동화
지속적인 통합, 지속적인 배포는 배포가 잦은 MSA 시스템에 필수 요소
a) Image Repo
코드 저장소, Docker Image Registry, Binary Artifact 저장소, BLOB 기반 저장소가 될 수도 있다.
b) Platform Automation
마이크로 서비스의 런타임 확장성과 적응성의 이점을 위해 플랫폼과 관련된 자동화 기능이 있어야 한다.
여기에는 VM 또는 컨테이너의 Provisioning 및 실행중인 인스턴스 관리가 포함된다.
참고
https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1-MSA%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-3sk28yrv0e
https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-2-MSA-Outer-Architecure
https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-3API-Gateway-nvk2kf0zbj
https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-4Service-Mesh-f8k317qn1b
https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-5Backing-Service-lqk3b7560w
https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-6Telemetry