MSA 아키텍처

jingyu·2022년 7월 30일
0

MSA

목록 보기
4/5
post-thumbnail

MSA 아키텍처에 대해 설명한다.

개념

하나의 큰 어플리케이션을 여러 개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처

각 서비스는 하나의 Monolith 아키텍처와 유사한 구조
각 서비스는 독립적인 배포가 가능해야 함
다른 서비스와의 의존성이 최소화 되어야 함
각 서비스는 개별 프로세스로 구동되어야 하고 REST 같은 가벼운 방식으로 통신해야 함

장점

전체 서비스 중단없이 서비스 개별 배포가 가능
특정 서비스에 대한 확장성이 용이
장애가 전체 서비스로 확산될 가능성이 적고 장애에 대한 격리가 수월함

단점

서비스 간 호출시 API를 사용하기에 통신 비용이나 Latency가 증가
서비스가 분리되어있기에 테스트 및 트랜잭션 처리가 복잡하고 많은 자원이 필요함
테이터가 여러 서비스에 걸쳐 분산되어 있기에 정합성 관리가 어려움

아키텍처

크게 Inner, Outer 아키텍처로 구분한다.

Inner 아키텍처

내부 서비스와 관련된 아키텍처
서비스를 어떻게 정의할 것인가?
DB Access 구조를 어떻게 설계할 것인가?
성능과 안정성을 확보하면서 서비스 분리 방안 필요

Output 아키텍처

마이크로 서비스가 개발, 배포, 실행되는 운영환경과 분산된 마이크로 서비스의 관리 기능을 제공

  • External Gateway
  • Service Mesh
  • Container Management
  • Backing Services
  • Telemetry
  • CI/CD Automation

1) External Gateway

전체 서비스 외부로부터 들어오는 접근을 내부 구조를 드러내지 않고 처리하기 위한 요소
사용자 인증, 권한 정책관리, API Gateway가 여기서 핵심적인 역할을 담당
API Gateway는 서버 최앞단에 위치하여 모든 API 호출을 받는다.
API 호출을 인증한 후 적절한 서비스들에 메세지를 전달될 수 있도록 routing한다.(REST/JSON 기반)

  • API Gateway 주요 기능
    a) 인증 및 인가
    요청 절차의 단순화
    서비스에 대한 요청을 클라이언트가 직접하지 않아도 됨
    여러 클라이언트의 요청을 단일 클라이언트의 요청으로 대체 가능하도록 함
    클라이언트와 백엔드 간의 API 통신량을 줄여주어 대기시간을 줄이고 효율성을 높일 수 있음
    b) 라우팅 및 로드밸런싱
    c) 서비스 디스커버리
    서비스마다 Ip와 Port를 알고 있어야 하나 클라우드 환경은 동적인 환경이므로 서비스의 위치를 찾는게 어려움
    이러 서비스의 위치를 찾는것을 서비스 디스커버리라고 함

2) Service Mesh

마이크로서비스 구성 요소간의 네트워크를 제어하는 역할을 한다.
서비스간 통신을 위해 서비스 디스커버리(Service Discovery), Service Routing, Failure Recovery, 로드 밸런싱, 보안을 담당
서비스 메쉬는 통신 및 네트워크 기능을 비즈니스 로직과 분리한 네트워크 통신 인프라이다.

3) Container Management

대표적인 컨테이너 관리 환경이 Kubernetes
AWS의 EKS, Google cloud platform의 GKE등이 있다

4) Backing Service

어플리케이션이 실행되는 가운데 네트워크를 통해 사용할 수 있는 모든 서비스를 말하며
MySQL, 캐쉬 시스템, SMTP 서비스등 어플리케이션과 통신하는 Attached Resource들을 지칭하는 포괄적인 개념
서비스를 위한 백업 서비스 개념
백엔드 서비스를 리소스로 취급
MSA에서는 Backing Service들 중 하나인 Message Queue(ex. Kafka)를 활용한 비동기 패턴을 많이 사용
서비스 신규 생성, 재생성, 인스턴스 삭제, 서비스 장애등의 작업 시 서비스 요청을 보존할 수 있음

5) Telemetry

각 서비스들을 모니터링하고 서비스별로 발생하는 이슈들에 대응할 수 있도록 환경을 구성하는 역할
Grafana, Prometheus, EFK와 같은 오픈소스를 사용하거나 Datadog 같은 상용 솔루션을 이용
주요 기능

  • Monitoring

  • Logging
    실행중인 프로세스에서 발생하는 이벤트를 수집해서 보여줌
    Monolithic 어플리케이션보다 실행하는 프로세스의 수가 훨씬 많기때문에 장애 발생시에 Root Cause를 파악하기 힘듬
    Elasticsearch-FluentD-Kibana가 대표적임
    로그 저장소는 외부에 둬야 함
    로그 파일은 ACL을 통해 로그 관리자만 확인할 수 이어야 함

  • Tracing
    Event를 발생한 순서대로 나열하여 추적할 수 있게 해줌
    Zipkin, Jaeger등이 있음

6) CI/CD Automation

어플리케이션 개발 단계를 자동화
지속적인 통합, 지속적인 배포는 배포가 잦은 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

profile
내일을 향해 쏴라!

0개의 댓글