MicroService는 애플리케이션을 느슨한게 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이다.
- 애플리케이션을 더 조그마한 여러 서비스로 분해할 때의 장점
- 모듈성을 개선할 수 있다.
- 애플리케이션의 이해, 개발, 테스트를 더 쉽게 할 수 있다.
- 애플리케이션의 침식에 더 탄력적으로 만들어 준다.
MicroService의 특징
- 빠르게 개발해 지속적으로 배포할 수 있다.
- 수동 혹은 자동으로 쉽게 스케일링 할 수 있다.
- 명확한 인터페이스를 통해서만 통신한다.
- 개별적인 런타임 프로세스로 배포할 수 있다.
- 성능(대기 시간)이나 데이터 일관성을 저해하지 않을 정도의 규모를 가진다.
Spring Cloud를 사용한 MicroService Architecture
MicroService 적용 시 문제점
- 동기적 통신을 사용하는 다수의 소형 컴포넌트는 연쇄 장애를 일으킬 수 있다.
- 다수의 소형 컴포넌트를 최신 상태로 유지하는 것은 어렵다.
- 많은 컴포넌트 처리에 관여하는 요청은 추적하기 어렵다.
- 컴포넌트 수준의 하드웨어 자원 사용량 분석이 어렵다.
- 다수의 소형 컴포넌트를 수동으로 구성하고 관리할 때 비용이 많이 들고 오류가 발생하기 쉽다.
MicroService 디자인 패턴
- 서비스 디스커버리
- 마이크로서비스를 자동으로 등록 및 해지
- 요청을 마이크로서비스 엔드포인트에 보내면 여러 개 중 1개로 라우팅
- Edge 서버
- 외부 마이크로 서비스로만 연결, 내부 서비스는 외부에 공개되지 않음
- 외부로 공개 시 표준 프로토콜 및 OAuth, API Key 등 보안을 적용한 후 연결
- Reactive 마이크로서비스
- 비동기 형태로 메시지를 처리
- 동기식 형태로 처리가 요구되면, 논블로킹 I/O를 사용
- Config 중앙화
- 마이크로서비스의 설정 정보를 중앙 서버에 저장 및 관리
- 마이크로서비스의 설정 정보를 중앙 서버에 저장 및 관리
- Logging 중앙화
- 로그 이벤트 수집 및 처리 후, 검색이 가능하도록 중앙 서버에서 저장 및 관리
- 로그 이벤트를 조회 및 분석하기 위한 API 및 GUI 제공
- Distrubuted Tracing
- 모든 요청 및 메시지, 로그 이벤트에 고유의 ID 적용
- 사전에 정의된 ID가 적용되고, 로그 이벤트에서 ID로 검색 및 분산 추적
- Circuit Breaker
- 대상 서비스에서 문제를 감지하면, 새로운 요청을 보내지 않도록 차단
- Circuit을 Open해서 장애 확산을 방지하고, 조치가 완료되면 Closed로 원복
- Control loop
- 원하는 상태와 현재 상태를 비교 및 관찰
- 두 상태가 다른 경우에는 GitOps 기반으로 상태가 일치하도록 Sync 수행
- Monitoring 및 Alarm 중앙화
- 자원 사용량의 메트릭 수집 및 새로운 서비스에 대한 메트릭 자동 등록
- 수집한 메트릭을 조회 및 분석하기 위한 API와 GUI 제공
관련 오픈 소스
디자인 패턴 | Spring | Kubernetes |
서비스 디스커버리 | Eureka 및 Ribbon | CoreDNS 및 Service |
Edge 서버 | Zuul | Ingress |
Reactive 마이크로서비스 | Reactor 및 WebFlux | |
Config 중앙화 | Config Server | Configmap 및 Secret |
Logging 중앙화 | Elasticsearch, Fluentd | |
Distributed Tracing | Sleuth 및 Zipkin | |
Circuit Breaker | Resilience4j | |
Control loop | Controller manager | |
Monitoring 및 Alarm 중앙화 | Prometheus, Grafana |
'정리' 카테고리의 다른 글
[Naver] Cloud Outbound Mailer (0) | 2022.09.16 |
---|