본문 바로가기
스프링 부트/MSA

[MSA] MSA란?

by illlilillil 2022. 3. 10.

Clound Native Architecture


  • 확장 가능한 아키텍쳐
    • 수평적 확장에 유연(스케일 아웃)
    • 시스템의 부하 분산, 가용성 보장
    • 서비스 단위 패키지(컨테이너 기반 패키지)
    • 모니터링
  • 탄력적 아키텍쳐
    • 서비스 생성-통합-배포에 따른 환경 변화에 따른 대응 시간  단축
    • 분할된 구조
    • Stateless 통신 프로토콜
    • 서비스 변경 자동 감지
    • 사용자 요청에 따른 동적 처리
  • 장애 격리
    • 특정 서비스에 오류가 발생해도 다른 서비스에 영향을 주지 않음

 

Cloud Native의 구성 요소는?


  • CI/CD
    • CI란: 지속적 통합 통합 서버, 소스 관리,빌드 도구, 테스트 도구
    • 대표적인 CI 도구: 젠킨스, 트래비스
    • CD란: 지속적 배포
    • continuous depoloyment
    • 실행되는 파일을 실행 환경에 자동 반영
    • 카나리 배포: 전체 사용자 95프로가 이전 서비스 이용
    • 블루그린 배포: 점진적으로 새 버전으로 이전
  • Devops
    • 구성 요소: Development, QA, Operations
  • Microservices
  • Containers
    • 전통 시스템은 OS 위에 어플리케이션이 올라가 있다.
    • 그 후엔 가상화 기술을 사용했지만 시스템에 부하가 걸릴 수 밖에 없다.
    • 컨테이너 기술을 사용해 공통 라이브러리나 리소스를 공유한다.
    • 적은 리소스 사용으로 가볍고 빠르다.

 

Cloud 환경 구성을 위한 12가지 요소


  1. 코드 베이스 - 한 개의 코드 베이스(git,svn)을 통해 관리되어야 하고 동일한 코드로 운영/개발 배포해야 한다.
  2. 종속성 - 명시적이고 선언되고 분리된 종속성
  3. 설정 - 환경에 저장된 설정
  4. 백엔드 서비스 - 연결된 데이터베이스, 캐시, 메시지 큐잉 시스템을 리소스로 취급
  5. 빌드,릴리즈,실행 - 철저히 분리된 빌드와 실행
  6. 프로세스 - 애플리케이션을 여러 개의 무상태 프로세스로 실행
  7. 포트 바인딩 - 포트 바인딩으로 서비스를 공개함
  8. 동시성 - 프로세스 모델을 사용한 확장
  9. 폐기 기능 - 빠르게 시작되거나 폐기될 수 있다. 갑작스런 셧다운에도 안정성을 갖춰야 한다.
  10. 개발/프로덕션 환경 일치 - 개발, 프로덕션 환경을 비슷하게 유지해 지속적 배포가 가능하도록 디자인한다.
  11. 로그 - 로그를 이벤트 스트림으로 취급
  12. admin - admin / maintenance 작업을 일회성 프로세스로 실행한다.

 

Monolithic vs MSA


Monolithic Architecture

장점

  • 로컬 환경 개발 편의
  • 통합 시나리오 테스트 수월
  • 배포가 길다.

단점

  • 코드 수정 및 추가가 어려움
  • 효율적인 자원 관리가 힘들다.
  • 자주 업데이트가 어렵다.
  • 새 기술 적용이 힘들다.
  • 부분 장애라도 전체 장애가 발생
  • scale out이 불가능하다.
    • 콘서트 티켓 판매를 예로 들면 로그인, 콘서트 티켓 판매 서버만 스케일 아웃하면 되지만 안되어 있다면 트래픽을 견디기 어렵다.

 

MSA(Micro Service Architecture)

장점

  • 빌드 및 테스트 시간 단축
  • 유연한 기술 적용 가능(스프링과 노드 동시에)
  • scale out 가능
  • 서비스 간 느슨한 결합

단점

  • 성능 이슈 - 모노리틱과 다르게 통신이 필요하다.
  • 트랙잭션이 불편하다. 로직 필수
  • 개발 시간 증가 - 각 서비스에 따른 환경을 구성해야 하기 때문

언제 적용해야 되는가?

아마존의 경우엔 검색 부분이 가장 많은 부분을 차지할 것입니다. 검색이나 조회 로직을 나눠 구현하는 식으로 작성해야 합니다.

 

 

SOA와 MSA 간 차이점


SOA

목적은 재사용을 통한 비용 절감

공통 서비스를 ESB에 모아 공통 서비스 형식으로 제공

 

MSA는 느슨한 결합으로 변화에 능동적인 대응 가능

독립된 서비스가 노출된 REST API를 통해 서비스

 

MSA의 구성 요소


관리 컨테이너 - 도커 컨테이너로 인서턴스 관리 및 조정한다.

외부 게이트웨이 - 서비스 액세스 관리, 트래픽 관리로 MSA 환경을 보호

서비스 메쉬 - 서비스 간 통신을 느슨한 결합으로 구성, 신뢰성 및 유연성을 보장한다.

  • 서비스 라우팅 - 서비스 정책에 따라 올바르게 라우팅한다.
  • 로드 밸런싱 - 로드 밸런싱으로 인스턴스의 트래픽을 관리한다.
  • 서비스 발견 - 느슨하게 결합된 서비스가 검색이 가능해야 한다. DNS와 비슷한 느낌
  • 구성 저장소 - MSA 환경의 설정 저장소 역할을 합니다.

서비스 이미지 레지스트리 - 불변 이미지를 저장하는 레지스트리이다.

메시지 지향 미들웨어 - 메시지 중심 패턴을 위해 비동기 메시징 채널이 필요하다.

배포 자동화 - 개발의 민첩성을 위해 배포 자동화가 필요하다.

플랫폼 자동화 - 외부 아키텍쳐에 자동화 기능 지원이 되야 한다.

모니터링 및 경고 - LogStash 같은 것으로 효율적인 로그 관리가 필요하다.

로깅 및 진단 - 지속적인 진단 및 분석을 지원해 신속하게 해결할 수 있도록 한다

댓글