본문 바로가기

정리

MicroService 정리

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