MicroService Architecture
Monolithic & Micro
모놀릭 서비스 아키텍처 (Monolithic Service Architecture)
- 모든 비지니스 로직이 App 안에 포함되어 있는 시스템 구조
마이크로 서비스 아키텍처 (Micro Service Architecture)
- 각각의 비지니스 로직이 분할되어 각자 실행되는 시스템 구조
API Gateway 를 이용한 서비스 외부 노출을 방지하는 MSA
🎛️ MSA란 서비스를 비지니스 경계에 맞게 세분화하고, 서비스 간 통신은 네트워크 호출을 통해 진행하여,
확장가능하며 회복적이며 유연한 어플리케이션을 구성하는 것
왜 ? MSA ?
1. 모놀릭 방식은 소프트웨어 구성요소가 한 프로젝트에 합쳐져있어,
큰 변화에 대한 대응이 어려우며, ‘새로운 기능 추가’ 및 ‘업데이트’에 어려움이 있음
2. 여러 역할을 하는 시스템이 하나의 소프트웨어로 집합,
‘특정 부분에 문제 발생시’ ‘큰 장애’ 로 이어질 수 있음
3. 여러역할을 하는 시스템이 하나의 서버에 올라가 있기에,
Scale-Out 시 필요 없는 자원이 함께 증가
4. 민첩하고 손쉬운 배포 및 업데이트 가능
MSA를 구성하는 Component
$ Config Management (환경변수)
- 서비스의 리빌드, 리부팅 없이 설정사항을 반영 (Netflix Archaius, k8s ConfigMap)
Service Discovery (서비스의 위치정보 확인)
- MSA기반 서비스 배포시 서비스 검색 및 등록 (Netflix Eureka, Istio, k8s Service )
API Management (허용된 API 분별)
- 클라이언트 접근 요청을 일원화 (Netflix Zuul, k8s Ingress)
Centralized Logging
- 서비스별 로그의 중앙집중화 (EKL Stack)
Distributed Tracing
- MSA 간의 호출 추적 (Spring Cloud Sleuth, Zipkin)
Centralized Monitorring
- 서비스별 Metric 정보의 중앙집중화 (Netflix Spectater, Heapster)
Resilience & Fault Tolerance (모든 서비스 Dash Board 집중화)
- MSA 구조에서 하나의 실패한 서비스가 체인에 연결된 전체 서비스들에 파급효과는 발생시키지 않도록 하기 위한 ‘계단식 실패 방지’ 구조 (Netflix Hystrix, k8s Health Check)
Auto - Scaling & Self Healing
- 자동 스케일링, 복구 자동화를 통한 서비스 관리 효율화
MSA 기반 기술 및 서비스
Service Mesh Architecture
마이크로 서비스간 통신을 위해 각 서비스를 식별(Discovery)하고, 경로를 파악(Routing) 하며,
로드밸런싱(Load-Balancing)을 하고
전체 서비스의 장애 전파를 차단(Circuit Break)하여, Telemetry와 통합되어 로깅, 모니터링, 트래이싱 기능을 담당하는 Service Mesh에 대한 이해가 필요
Connect
- 지능형 라우팅을 통해 서비스 / 엔드포인트 간의 트래픽과 API 호출 흐름을 제어함
- Service Mesh는 서비스간 통신을 추상화하여 안전하고, 빠르고, 신뢰할 수 있게 만드는 아키텍처
Secure
- Service Mesh를 통해 서비스간 안전한 통신이 가능
- 커뮤니케이션을 허용하거나 거부하도록 정책을 적용 가능
Monitor
- Service Mesh를 사용하면 분산 마이크로 서비스 시스템을 쉽게 모니터링 가능해짐
- k8s 경우 ‘프로메테우스’, ‘Jaeger’와 같은 시각화 도구들과 증식 통합되므로 서비스, 트래픽흐름, API 지연 시간 및 추적 간의 종속성을 발견하고 시각화 할 수 있음