[CS] 클라우드 네이티브와 마이크로 서비스 아키텍처(MSA)

최지나·2024년 2월 19일
2

CS

목록 보기
50/55

클라우드 네이티브 아키텍처

클라우드 환경을 최대한 활용하여 애플리케이션을 개발, 배포 및 운영하는 접근 방식. 주요 목표는 확장성, 탄력성, 장애 대응력을 강화하는 것

  • 확장 가능한 아키텍처: 자동 확장(auto scaling) 기능을 통해 서버의 수를 수요에 따라 자동으로 조절
  • 탄력적 아키텍처: 서비스 생성, 통합, 배포의 속도를 높여 비지니스 요구사항 변화에 신속하게 대응.
  • 장애 격리: 서비스 중 하나에 문제가 생겨도 시스템 전체에 영향을 미치지 않도록 설계

클라우드 네이티브 애플리케이션의 특징

CI/CD, Devops, MicroService, Container

  • 지속적인 통합 및 배포: 자동화된 테스트와 배포 파이프라인을 통해 코드 변경사항을 신속하게 프로덕션 환경으로 전달
    • Continuous Delivery: 패키지화 되어있는 결과물을 수동 반영
    • Continuous Deployment: 관리자의 개입 없이 자동화되어있는 배포
    • 배포 전략: 카나리 배포(사용자의 일부만 새로운 버전의 서비스 사용), 블루 그린 배포(점진적 새 버전으로의 이동)
  • DevOps 문화: 개발과 운영 팀의 긴밀한 협업을 통해 소프트웨어의 품질과 배포 속도를 높인다
    서비스의 구조를 더 작게 분할함으로써 더 자주 통합, 배포가 가능
  • 컨테이너 가상화: 도커와 같은 컨테이너 기술을 사용하여 애플리케이션과 그 환경을 패키징하고, 클라우드 환경에서 일관된 운영을 보장.
  • 마이크로 서비스

마이크로 서비스 아키텍처 (MSA)

전체 애플리케이션을 작은 서비스 단위로 분할하여 각각 독립적으로 개발, 배포 및 운영할 수 있게 하는 방식. 유지보수에 유리. 지속적 배포 및 빠른 시장 출시 가능

  • 독립적 배포 기능: 독립적으로 배포 할 수 있으며 서비스 간의 결합도는 낮고 응집도는 높다
  • 기술 다양성: 서로 다른 서비스에서 다양한 프로그래밍 언어 및 데이터 스토리지 사용 가능
  • 지속적 통합 및 지속적 배포 (CI/CD): 개별 서비스의 변경 사항을 자주, 안정적으로 배포

  • 클라이언트와 서로 다른 마이크로 서비스들이 API Gateway를 통해 필요한 서비스의 요청
  • 라우터가 받은 요청들의 도착지를 정해줌
  • 필요한 마이크로 서비스가 어디에 저장되어 있는지 Service Discovery의 등록 서비스에서 위치 검색
  • 로드 밸런서가 어느 서비스로 요청 보낼 지 결정
  • 마이크로 서비스의 config 정보는 마이크로 서비스 외부에 저장 (Config. Store)
  • Service Mesh: 마이크로 서비스를 적용한 시스템의 내부 통신. 마이크로 서비스의 운영 지원
  • 완성된 애플리케이션의 배포를 위해 CI/CD Automation 기술을 사용
  • Backing Service: 마이크로 서비스에 저장된 다양한 스토리지들을 모아서 사용, 메세징 처리 시스템(MOM)을 사용하여 데이터 동기화
  • Telementary: 마이크로 서비스의 모니터링, 진단

Monolithic VS MSA

Monolithic

  • 모든 업무 로직이 하나의 애플리케이션 형태로 패키지 되어 서비스.
  • DB 관련 로직, 비지니스 로직 뿐만 아니라 프론트엔드까지 하나의 어플리케이션 내에서 동작
  • 문제점: 시스템의 일부만 수정해도 전체 애플리케이션을 다시 빌드, 테스트, 패키징 해야 한다

마이크로 서비스

  • 애플리케이션을 구성하는 각각의 구성 요소 및 서비스의 내용을 분리하여 개발하고 운영. 유지보수나 변경 사항 적용에 유리하다
  • HTTP 통신을 이용해서 리소스 API에 통신할 수 있는 작은 규모의 여러 서비스들의 묶음이 모여 하나의 어플리케이션을 구성
  • 각각의 서비스들은 서로 다른 프로그래밍 언어와 서로 다른 저장 기술 사용 가능
  • 서비스들은 Restful API를 통해 서로의 데이터를 제공해서 사용
  • 클라우드 네이티브 기술을 활용하여 서비스를 제공
  • CI/CD

SOA(Service Oriented Architecture) VS MSA

SOAMSA
서비스의 재사용을 통한 비용 절감서비스 간의 결합도를 낮추어 변화에 능동적 대응
공통의 서비스를 ESB(Enterprise Service Bus)에 모아 공통 서비스 형식으로 서비스 제공각각의 독립된 서비스가 노출된 REST API를 사용, 이벤트 스트림(메세징 시스템)을 사용하여 서비스 간 필요한 데이터 동기화. 특정 서비스 데이터 변경 시, 데이터 구독 중인 다른 서비스들한테 변경된 데이터 정보 전달

CNCF

cloud native computing foundation

  • 클라우드 네이티브 기술의 채택을 촉진하는 오픈 소스 소프트웨어 재단

Spring cloud란?

마이크로서비스 아키텍처를 지원하기 위한 프레임워크

  • Spring boot와 버전을 맞춰주어야 한다
  • config, security, gateway 등의 다양한 서비스를 제공

예시

  • Spring Cloud Config Server : 외부에 한번에 설정 정보를 저장
  • Naming Server(Eureka) : 서비스의 등록과 위치 정보 확인, 검색
  • Ribbon(client side), Spring cloud gateway: 요청 정보 분산, 게이트웨이, 로드밸런싱
  • FeignClient: 서비스간 Rest 통신
  • Zipkin Distributed Tracing, Netflix API gateway: 시각화와 모니터링, 로그 추적
  • Hystrix: 장애 복구

REF

profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글