본문 바로가기
정보관리기술사&컴퓨터응용시스템기술사/SW공학과 프로젝트관리

[MSA(Micro Service Architecture) 독립된 서비스로 시스템을 분할하는 아키텍처

by 별프로 2021. 1. 13.
반응형

I. 독립된 서비스로 시스템을 분할하는 아키텍처, MSA의 개요

. MSA(Micro Service Architecture)의 정의

  - 대규모 소프트웨어 구축을 위해 동작이 가능한 기능단위로 서비스를 분할하고, 각 서비스들이 API형태로 제공되는 아키텍처

. MSA의 등장배경

구분

설명

개발환경의 변화

소프트웨어 경쟁력 확보를 위해 고객 요구에 대한 신속한 대응 중요

기존 아키텍처

Monolithic 아키텍처는 모듈 간 결합도가 높고, 배포 시간이 길어 신속한 대응 한계

 

II. MSA의 구성도 및 구성요소

. MSA의 구성도

  - Rest API를 통해 마이크로 서비스간 통신으로 서비스를 개발하고, 서비스별 최적의 DB 선택 가능

. 마이크로 서비스 아키텍처의 구성요소

문서종류

문서내용

세부내용

Client

Layer

Rest API

- HTTP 기반의 경량 프로토콜 Rest API 사용

Orchestration

- 이미 구축된 API를 재활용하여 서비스 구축

Application

Layer

API Gateway

- 사용자에게 단일 엔드 포인트 제공

- Traffic 제어, 인증 및 허가 공통 로직 처리, API 라우팅

Containerization

- 서비스 별 컨테이너화 및 Auto Scaling 지원

Persistence

Layer

Polyglot 구조

- RDB, No-SQL 등 최적의 DB 선택 가능

대용량 분산 DB

- 성능 및 안정성 극대화 가능한 DB 구조 가능

     - 마이크로 서비스 아키텍처는 기능단위로 점점 세분화되어, FaaS(Functions as a Service)형태로 진화 중이며, Agile, DevOps, 컨테이너 기술과 결합하여 신속한 배포와 생산성 제고에 기여

 

III. MSA 구현패턴 및 고려사항

. 마이크로 서비스 아키텍처의 구현패턴

구분

내용

기술

Communication

- 서비스가 분리되었기 때문에 기존 내부 함수 호출 방식이 아닌 서비스 간 동기(RPC: Remote Procedure Call), 비동기 방식 호출

Rest API,

RabbitMQ

Circuit Breaker

- 서비스 간 장애 전파 방지를 위한 회로 차단기

- 특정 서비스 호출에 대한 에러 발생 임계치 초과 시 호출 차단

Netflix Hystrix

API Gateway

- 클라이언트와 마이크로 서비스 사이에 위치하여 프록시 역할

- Traffic 제어, 인증 및 허가 공통 로직 처리, 프로토콜 변환

Netflix Zuul,

K8S Service

Service Discovery

- 서비스들의 호스트, 포트 정보 등록 레지스트리

- 클라우드 환경에서 Auto-Scaling으로 인한 유동IP 자동 관리

Netflix Eureka,

K8S DNS

Log Aggregation

- 분산된 서비스에서 전송하는 로그를 통합/가공/시각화/분석

Elasticsearch,

Fluentd, Kibana

. MSA 구축을 위한 고려사항

구분

내용

설명

비즈니스 관점

도메인 기반 업무 분리

DDD(Domain Driven Design)을 통한 마이크로 서비스 분리

조직적 관점

콘웨이 법칙 활용

마이크로 서비스 단위의 조직을 구성하여 운영

기술적 관점

컨테이너 기술 적용

Docker, K8S 기술로 SW기반 자동 배포/확장 구조적용

  - 마이크로 서비스 단위로 최적화 팀 구성, DevOps기반 애자일 방법론 적용, 신속한 배포로 Time-to-Market 달성, 안정적 서비스 운영

 

 

IV. MSAMonolithic Architecture 비교 (참고)

 

  - 마이크로 서비스 아키텍처 등장으로 이전까지의 단일 아케텍처를 Monolith로 분류

구분

MSA

Monolithic Architecture

개념

하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 구현하여 조합하는 방법

하나의 서비스 또는 애플리케이션이 하나의 아키텍처로 구현된 방법

목적

애플리케이션을 개별서비스 단위로 개발, 배포

전체 애플리케이션을 하나의 통합된 패키지로 개발, 배포

개발

서비스 단위의 신속한 개발, 확장 용이

배포, 테스트, 표준화된 방식으로 관리용이

특징

-특정 서비스의 오류가 다른 서비스에 영향 주지 않음

-서비스별 다른 언어로 개발 가능

-분산시스템에 따른 추가적인 복잡도 증가

-서비스 복잡도, 규모 증가에 따른 문제점 증가

-배포 시간 증가

-부분적 스케일 아웃의 어려움

-안정성의 감소

배포/구동

DevOps 자동화, 고속

배포/서버 가동시간 소요

개발 독립성

상호의존성 낮아짐

전체 서비스간 영향 높음

유지보수

유지보수 용이, 단순

전체 코드이해 필요

확장성

부분적 물리확장 가능

확장성/유연성 낮음

생산성

다양한 언어 사용가능

선택된 특정 언어에 의존

 

반응형

댓글