MSA란? 정의와 구조적 이해

lin·2022년 11월 10일
0

인턴을 진행중입니다.
회사에서 향후 개발 프로젝트에 있어서 MSA를 기반으로 하는 프로젝트를 진행한다고 하셨기때문에, 스터디가 필요했습니다.

이미 기존에 열심히 공부해놨던건데, 글로 안적어놔서 정리합니다.

🍐 MSA


MicroService Architecture의 줄임말
독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크이다.
각 서비스들은 독립적으로 배포가 가능하고, 여러 기술 스택으로 개발이 되어도 사용이 가능하다.

Monolithic Architecture


기존 개발 방식에서는 여러 서비스를 한 플랫폼 내에서 개발하여 단일 소프트웨어 산출물로 전달이 된다.
이 때 일정 규모 이상의 서비스, 많은 개발자가 투입되는 프로젝트에서는 한계가 발생한다.

  • 부분 장애가 전체 서비스의 장애로 확대될 수 있다.
  • 부분적인 Scale-out이 어렵다.
  • 서비스의 변경이 어렵고, 수정 시 장애의 영향도 파악이 힘들다.
  • 배포 시간이 오래 걸린다.
  • 한 Framework에 종속적이다.

해당 문제를 겪었던 좋은 예시로...배달의 민족이 있다.
재미있는 이야기라서 심심할 때 유튜브로 보거나 요약글 읽어보는 걸 추천!

https://www.youtube.com/watch?v=BnS6343GTkY

🍋 MSA의 특징

  • 애플리케이션 로직을 각자 책임이 명확한 작은 컴포넌트들로 분해하고 이들을 조합해서 솔루션을 제공한다.
  • 각 컴포넌트들은 작은 책임 영역을 담당하고 완전히 상호독립적으로 배포된다.
  • 애플리케이션은 항상 기술 중립적 프로토콜을 사용해 통신하므로 서비스 구현 기술과는 무관하다.
  • MSA는 API를 통해서 상호작용한다. 내부의 구현 로직들은 서비스 API에 의해 가려진다.

🍋 Service Mesh

처음엔 MSA..? 마이크로 서비스...?
뭐야뭐야하지만 사실 각 서비스를 쪼갠다는 것 외에 생각보다 엄청난 건 없었다.
그런데 제일 중요한 점은 MSA를 적용한 시스템이 커질수록 마이크로서비스의 인스턴스 수가 증가하며, 런타임 복잡성 문제가 발생한다는 점이다.

각 인스턴스 사이간 통신에서 발생하는 보안, 로드 밸런싱, 모니터링 등의 문제에 있어서 전체 서비스를 관리하기 위한 Outer Architecture가 필요하고 이것이 Service Mesh이다!

🍒 Service Mesh 주요 기능

  • Configuration Management
    설정변경 시 서비스의 재빌드와 재부팅 없이 즉시 반영
  • Service Discovery
    API Gateway 가 서비스를 검색하는 매커니즘
  • Load Balancing
    서비스간 부하 분산
  • API Gateway
    API 서버 앞단에서 API 엔드포인트 단일화 및 인증, 인가, 라우팅 기능 담당
  • Centralized Logging
    서비스별 로그의 중앙집중화
  • Centralized Metrics
    서비스별 메트릭 정보의 중앙집중화
  • Distributed Tracing
    서비스간 호출 추적과 성능, 분석 관리
  • Resilience & Fault Tolerance
    서비스간 장애 전파 차단
  • Auto Scaling & Self Healing
    자동 스케일아웃과 복구 자동화
  • Packaging, Deployment & Scheduling
    패키징, 빌드 및 배포 자동화
  • Test Automation
    서비스 테스트 자동화

🍒 Service Mesh 적용 방법

  1. K8s의 Istio 솔루션 사용

    Istio는 애플리케이션 네트워크 기능을 유연하고 쉽게 자동화할 수 있는 투명한 언어 독립적 방법을 제공하는 현대화된 서비스 네트워킹 레이어인 서비스 메시입니다.
    (출처 : https://cloud.google.com/learn/what-is-istio?hl=ko)

  2. Spring Cloud 기반 Service Mesh 구축

    Spring Cloud는 개발자가 분산 시스템 구성에 필요한 다양한 기능(설정 관리 및 공유, 서비스 등록 및 관리, 서비스 요청 라우팅 등)을 제공한다. 분산 시스템을 구성하기 위한 복잡한 설정 및 서비스들을 효율적이고 신속하게 구현할 수 있도록 지원한다.

🍋 Spring Cloud 컴포넌트

🍒 Config 서비스

별도의 통합된 설정 관리 서비스 제공을 통해 환경 독립적 서비스 제공

MS의 설정 등이 변경되었을 때 서버 재시작 없이 동적으로 적용 가능하다.
MS를 stateless 하게 개발하기 위해 사용한다.
설정 파일을 분리하여 git 또는 파일 서버에서 관리한다.

원래는 Config 변경시 최신값을 얻기 위해 Refresh가 필요하지만 Spring Cloud Bus를 통해 효율적으로 관리 가능하다.

🍒 Service Discovery 서비스

각 마이크로 서비스의 IP/FQDN과 PORT 정보를 저장하고 제공하는 기능 필요
여러 마이크로 서비스를 등록, 관리하고 요청 시 해당 서비스를 찾아 호출

=> Eureka
MicroService는 구동 시 Eureka에 자신의 정보 등록하며
Eureka는 주기적으로 서비스 실행 여부 체크, 정지되면 삭제한다.
각 마이크로서비스는 다른 서비스를 연결할 때 Eureka를 이용한다.

🍒 Evenet Bus 서비스

분산 메세징 지원을 위한 서비스 연계 지원
-> Spring Cloud Bus (AMQP & RabbitMQ)

🍒 Circuit Breaker 서비스

서킷 브레이커는 개별 모듈 장애로 인한 서비스 장애를 방지하기 위해 나온 패턴이다.
문제가 생기면 흐름을 차단해서 특정 모듈 장애로 인해 서비스가 종료되는 문제를 방지하기 위해 도입되었다.
-> Spring Cloud Netflix (Hystrix)

🍒 Service Router & API Gateway


서비스 호출 시 routing을 통해 실제 서비스에 위치 제공
& Micro Service 에 대한 API 관리 및 모니터링 서비스
=> Zuul, Spring Cloud Gateway

🍒 Cluster

Service Level의 Cluster를 지원하기 위한 서비스 제공

참고 자료 :: [표준프레임워크]MSA적용개발_가이드_v1.2.0

profile
BE

0개의 댓글