MSA(MicroService Architecture) (+ Spring Cloud)

개발자·2022년 3월 25일
1

MSA

목록 보기
1/7

MSA란 애플리케이션을 느슨히 결합된 작은 여러 서비스로 구조화하는 서비스 지향 아키텍쳐 스타일의 일종인 소프트웨어 개발 기법이다.
한 시스템에 여러 서비스가 통합되어 있는 모놀리식 아키텍처는 서비스의 변경이 어렵고, 배포에도 오랜 시간이 소요되었다. 이러한 문제점을 보완하기 위해 MSA가 등장하게 되었다.
MSA는 애플리케이션의 이해, 개발, 테스트를 더 쉽게하며 서비스마다 독립적으로 개발, 배포할 수 있다. 마이크로 서비스들은 각각 비즈니스 계층과 데이터베이스를 가지고 있어 서로 영향을 주지 않으며 각 서비스들은 API를 통해 상호작용한다.

장점

  • 서비스마다 독립적으로 구축 및 운영할 수 있다.
  • 한 서비스에서 발생한 오류가 다른 서비스에 영향을 주지 않는다.
  • 개발 속도가 향상되며 서비스 확장 및 유지보수가 편리해진다.
  • 각 서비스에 맞게 Scale-out이 가능하다.
  • 지속적인 배포가 가능해진다.

단점

  • 모놀리식 아키텍처에 비해 복잡하다.
  • 서비스가 분리되어 있기때문에 트랜잭션을 유지하기 어렵다.
  • 테스트가 어렵다.


Spring Cloud

분산 시스템 구성에 필요한 다양한 기능을 제공하는 Spring Boot 기반 프레임워크로 MSA를 지원한다.

컴포넌트

  • Spring Config
    별도의 통합된 설정 관리 서비스 제공을 통해 환경 독립적 서비스 제공
    분산시스템에서 애플리케이션의 환경설정 정보를 분리해 외부에서 관리하도록 한 환경설정 서버

  • Eureka(Spring Clud Netflix)
    서비스의 논리적 위치 정보 제공
    필요한 서비스의 자가 등록, 탐색 및 부하 분산에 사용될 수 있는 라이브러리
    마이크로 서비스들의 정보를 레지스트리 서버에 등록할 수 있도록 한다.
    - Eureka Server : 마이크로 서비스들의 상태 정보가 등록되어 있는 레지스트리 서버
    - Eureka Client : 서비스가 시작될 때 Eureka 서버에 등록하고 이후 주기적으로 자신의 상태를 알리며, 일정 횟수 이상의 ping이 확인되지 않으면 Eureka 서버에서 해당 서비스를 제외시킨다.

  • Spring Cloud Bus(AMQP & RabbitMQ)
    분산 메세징 지원을 위한 서비스 연계 지원
    Config 서버의 설정 값이 변경될 경우, 마이크로서비스들이 변경된 설정 값을 갱신하기 위해서는 서비스를 재시작하거나 /actuator/refresh를 호출해주어야 한다. 하지만 서비스가 많을 경우 각각을 해주기 쉽지 않으므로 마이크로서비스들에게 refresh를 수행하라는 메시지를 Config 서버에 전송해야한다. 이 메시지를 전송해주는 컴포넌트를 메시지브로커라고 하며 RabbitMQ, Kafka가 대표적이다.

  • Hystrix(Spring Cloud Netflix)
    서비스 간 호출 시, 문제가 있는 서비스에 대한 차단 지원 서비스
    MSA 사용 시 App의 장애 전파를 방지할 수 있다.

  • Ribbon(Spring Cloud Netflix)
    서비스 호출 시, 분산 형태로 호출할 수 있는 client 적용 서비스 라이브러리
    MSA에서 Client에 탑재할 수 있는 Load Balancer이다.
    분산 처리 방법으로 여러 서버를 라운드 로빈 방식(기본 설정)으로 부하 분산 기능을 제공한다.

  • API Gateway - Zuul(Spring Cloud Netflix)
    모든 클라이언트 요청에 대한 end-point를 통합하는 서비스
    인증 및 권한 ,모니터링, logging 등의 기능도 지원한다.
    서비스 호출 시, routing을 통해 실제 서비스에 위치 제공
    ex) port 하나로 catalog, customer 둘 다 접속 가능

  • Spring Cloud Cluster
    서비스 레벨의 Cluster를 지원하기 위한 서비스 제공

  • Spring Cloud Security
    Load balanced 환경에서의 OAuth2.0 인증 지원 서비스

  • Spring Cloud Sidecar
    non-JVM 프로그래밍 언어 지원을 위한 서비스

  • Spring Cloud Kubernetes
    Spring Cloud 애플리케이션을 위한 쿠버네티스 Discovery와 ConfigMaps 지원 서비스

Ref.

https://wooaoe.tistory.com/57

profile
log.info("공부 기록 블로9")

0개의 댓글