본문 바로가기

MicroService Architecture/Microservice Design Pattern

(10)
마이크로서비스 구성을 위한 필수 소프트웨어 마이크로서비스에 필요한 기능을 제공하고 관련된 문제 해결에 도움을 주는 다양한 오픈 소스 도구가 있다. - 스프링부트 - 스프링 클라우드/넷플릭스 OSS - 도커 - 쿠버네티스 - 이스티오(서비스메시) 각 디자인패턴과 디자인패턴을 구현한 오픈 소스 도구를 정리한 표 디자인 패턴 스프링 부트 스프링 클라우드 쿠버네티스 이스티오 서비스 검색 넷플릭스 유레카(Eureka)와 넷플릭스 리본(Ribbon) 쿠버네티스의 kube-proxy와 서비스(Service)리소스 에지 서버 스프링 클라우드와 스프링 시큐리티 OAuth (Spring Security OAuth) 쿠버네티스의 인그레스 컨트롤러 (Ingress Controller) 이스티오의 인그레스 게이트웨이 리액티브 마이크로서비스 스프링 리액터 (Spring ..
모니터링 및 경고 중앙화 모니터링 및 경고 중앙화 패턴은 다음과 같은 문제점, 솔루션, 해결책의 필요 조건이 있다. 문제점 응답시간이나 하드웨어 자원 사용량이 지나치게 높은 경우 문제의 근본원인을 찾는게 매우 어렵다. 마이크로서비스별 하드웨어 자원 사용량을 분석할 수 있어야 한다. 해결책 마이크로서비스 인스턴스가 사용하는 하드웨어 자원 사용량에 대한 메트릭(metric)을 수집하는 새 컴포넌트(모니터 서비스monitor service)를 시스템 환경에 추가한다. 해결책의 필요 조건 - 오토스케일링(auto-scaling)된 서버를 포함해 시스템 환경에서 사용하는 모든 서버의 메트릭을 수집해야 한다. - 서버에서 새로 시작된 마이크로 서비스 인스턴스를 감지해 메트릭을 수집해야 한다. - 수집한 메트릭을 조회 및 분석하기 위한 AP..
제어 루프 (Control loop) 제어 루프 패턴은 다음과 같은 문제점, 솔루션, 해결책의 필요 조건이 있다. 문제점 다수의 마이크로서비스 인스턴스가 여러 서버에 분산돼 있는 시스템 환경에선 중단되거나 지연된 마이크로서비스 인스턴스를 수동으로 감지하고 대처하는 것이 어렵다. 해결책 시스템 환경의 상태를 관찰하는 새 컴포넌트(제어 루프Control loop))를 시스템 환경에 추가한다. 이 컴포넌트는 운영자가 지정한 상태와 실제 상태를 지속적으로 관찰하며, 두 상태가 다른 경우에는 현재 상태가 지정된 상태와 일치하도록 조치를 취한다. 해결책의 필요 조건 구현참고: 컨테이너를 기반으로 하는 환경에선 쿠버네티스와 같은 컨테이너 오케스트레이터로 이 패턴을 구현한다.
서킷 브레이커 (Circuit Breaker) 서킷 브레이커 패턴은 다음과 같은 문제점, 솔루션, 해결책의 필요 조건이 있다. 문제점 동기 방식으로 상호 통신하는 마이크로 서비스 시스템 환경은 연쇄 장애가 발생할 여지가 있다. 하나의 마이크로서비스가 응답하지 않으면 이 마이크로서비스의 클라이언트 또한 클라이언트의 요청에 응답하지 않게 된다. 이 문제는 시스템 환경 전체에 재귀적으로 전파돼 중요한 부분까지 중단시킬 수 있다. 해결책 대상 서비스에 문제가 있다는 것을 감지해 새 요청을 보내지 않도록 차단하는 서킷 브레이커를 추가한다. 해결책의 필요조건 해결책의 필요조건은 다음과 같다. - 서비스에 문제가 감지되면 시간 초과(timeout)를 무시하고 바로 실패하도록 서킷을 연다. - 반열림 서킷(half-open circuit)이라고도 하는 장애 복구용..
분산 추적 분산 추적 패턴은 다음과 같은 문제점, 솔루션, 해결책의 필요 조건이 있다. 문제점 시스템 환경에 대한 외부 호출을 처리하는 동안 마이크로서비스 사이에서 흐르는 요청 및 메시지를 추적할 수 있어야 한다. 다음은 장애 시나리오의 예다. - 최종 사용자가 특정 자앵에 대한 해결을 요청했을 때 문제를 일으킨 마이크로서비스를 찾고 근본원인을 찾으려면 어떻게 해야 하는가? - 특정 엔티티와 관련된 문제를 지원하고자 이와 관련된 모든 로그 메시지를 찾고 싶다. 예를 들어, 어떤 주문 번호에 대한 문제가 발생했을 때 해당 주문의 처리에 관여한 모든 마이크로서비스의 로그 메시지를 찾으려면 어떻게 해야 하는가? 다음 다이어그램을 참고한다. 해결책 공조 마이크로서비스 사이의 처리 과정을 추적하려면 관련된 모든 요청 및 메..
로그 분석 중앙화 로그 분석 중앙화 패턴은 다음과 같은 문제점, 솔루션, 해결책의 필요 조건이 있다. 문제점 보통 애플리케이션을 실행하고 있는 로컬 머신에 애플리케이션 로그 이벤트를 기록하는데, 여러 개의 소규모 서버에 다수의 마이크로서비스 인스턴스를 배포하는 마이크로서비스 아키텍처 기반의 시스템 환경에선 다음과 같은 문제가 있다. - 각 마이크로서비스 인스턴스가 로컬에 로그 파일을 기록하는 상황에서 전체 시스템 환경에서 발생하는 사건을 개괄하려면 어떻게 해야 하는가? - 문제가 발생한 마이크로서비스 인스턴스를 찾아서 로그 파일에 오류 메시지를 쓰게 하려면 어떻게 해야 하는가? - 최종 사용자가 문제를 보고했을 때 이와 관련된 로그 메시지를 찾으려면 어떻게 해야 하는가? 문제의 근본 원인이 되는 마이크로서비스 인스턴스를 ..
구성 중앙화 구성 중앙화 패턴은 다음과 같은 문제점, 솔루션, 해결책의 필요 조건이 있다. 문제점 일반적으로 애플리케이션은 여러 환경 변수나 파일에 담긴 구성 정보와 함께 배포되는데, 다수의 마이크로서비스 인스턴스가 배포된 마이크로서비스 아키텍처 기반의 시스템 환경에선 문제가 조금 있다. - 실행 중인 모든 마이크로서비스 인스턴스의 구성 정보를 한눈에 보려면 어떻게 해야 하는가? - 구성을 업데이트하고 관련된 모든 마이크로 서비스 인스턴스가 올바르게 업데이트 되게 하려면 어떻게 해야 하는가. 해결책 시스템 환경에 모든 마이크로서비스의 구성 정보를 저장하는 새 컴포넌트(구성 서버)를 추가한다. 해결책의 필요조건 마이크로서비스 집합에 대한 구성 정보를 한 곳에 저장하고 환경별(예: dev, test, qa, prod) ..
리액티브 마이크로서비스(Reactive Microservice) 리액티브 마이크로 서비스 패턴은 다음과 같은 문제점, 솔루션, 해결책의 필요 조건이 있다. 문제점 관례적으로 자바 개발자는 HTTP 기반의 RESTful JSON API와 같은 블로킹 I/O 모델을 사용해 동기식 통신을 구현해 왔다. 블로킹 I/O를 사용하면 요청을 처리하는 동안 운영체제의 스레드를 점유하게 된다. 동시 요청 수가 증가하거나 요청과 관련된 컴포넌트가 증가하면 운영체제의 가용 스레드가 부족해 응답 시간이 늦어지거나 서버가 중단되는 문제가 발생 할 수 있다. 또한 앞에서 언급했듯이 블로킹 I/O를 과도하게 사용하면 마이크로서비스 시스템에 오류가 발생하기 쉽다. 예를 들어, 어떤 서비스의 지연 시간이 증가하면 가용 스레드가 부족해져서 클라이언트가 실패 할 수 있다. 이런 상황은 결국 클라이언트..