Spring Cloud

    Resilience4j, Spring Boot 설정 공부

    Core modules Resilience4j는 5개의 Core modules을 제공합니다. CircuitBreaker CircuitBreaker 패턴을 구현한 모듈입니다. 호출의 결과를 저장하고 집계(Aggregate)하기 위한 슬라이딩 윈도를 사용합니다. 요청 실패율(Failure rate)이 몇 퍼센트 이상일 때 서킷의 상태가 CLOSED에서 OPEN으로 바뀔지 그리고 요청 중 지연된 응답(Slow calls)이 몇 퍼센트 이상일 때 서킷의 상태가 CLOSED에서 OPEN으로 바뀔지 설정할 수 있습니다. 슬라이딩 윈도우 크기가 15인 경우에도. 슬라이딩 윈도우가 15개의 요청만 동시에 실행할 수 있다는 것을 의미하지는 않습니다. 동시 스레드 수를 제한하려면 벌크헤드를 사용해야한다.(아래에서 다룸) ..

    6. Spring Cloud Config

    Config server 마이크로서비스의 어떠한 설정(환경변수값, Spring cloud 설정 등)이 변경되었을때 서버 재시작 없이 동적으로 적용 마이크로서비스가 배포될때 제반 설정값들을 배포 대상 환경(개발계, 검증계, 운영계 등)에 맞게 적용 마이크로서비스를 Stateless하게 개발하기 위해서입니다. Stateless하게 만들어야 스케일링(마이크로서비스 인스턴스 서버 - 즉, 컨테이너의 증감)과 부담없는 재시작이 가능 실습 1. 의존성 및 config repository 설정 ... ext['springCloudVersion'] = 'Finchley.SR2' ... dependencies { compile('org.springframework.cloud:spring-cloud-config-serve..

    5. zuul - [Spring Cloud를 활용한 MSA 기초 온라인 강의 실습]

    Zuul - API Gateway API Gateway는 API의 요청자인 Client와 API의 제공자인 backend service를 연결하는 중계자(또는 출입문) API Gateway가 필요한 이유 1. 횡단 관심사 - 인증/인가: 부적절한 요청을 차단하여 Backend service를 보호 - rate limiting: 일정량 이상의 요청 제한 - metering: 계측 - Logging: 유통되는 트래픽 로깅 - proxy 등 2. L/B & Routing: Client의 요청에 따라 적절한 backend service를 로드밸런싱(L/B: Load Balancing)하고 연결(라우팅) 3. Circuit Break: Backend service 장애 감지 및 대처 Zuul Filter는 크게 ..

    4. Feign - [Spring Cloud를 활용한 MSA 기초 온라인 강의 실습]

    Interface 선언을 통해 자동으로 Http Client를 생성 기존 RestTemplate은 concreate 클래스라 테스트가 어려움 관심사 분리 - 서비스의 관심: 다른 리소스, 외부 서비스 호출과 리턴값 - 관심x : 어떤 URL, 어떻게 파싱할 것인가 참조하면 좋은 사이트 우형 기술 블로그 https://woowabros.github.io/experience/2019/05/29/feign.html 공식 문서 https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html#_creating_feign_clients_manually 실습 1. 의존성 ext['springCloudVersion'] = 'Finchley..

    3. Eureka - [Spring Cloud를 활용한 MSA 기초 온라인 강의 실습]

    앞선 리본 예제에서 서버 목록을 yml에 직접 넣었는데 이를 자동화 할 방법으로 유레카를 사용하게된다. 서버가 새롭게 시작되면 그것을 감지하여 목록에 자동으로 추가되고 서버가 종료되면 자동으로 목록에서 삭제하는 기능을 유레카가 제공한다고 생각하면된다. 유레카에는 유레카 서버와 유레카 클라이언트가 있습니다. 유레카 서버는 registry로 유레카에 등록된 서비스들을 관리한다 보시면 됩니다. 유레카 클라이언트는 각각의 서버 혹은 인스턴스의 시작시 유레카 서버에 자동으로 자신의 상태를 등록(설정으로 컨트롤 가능) 주기적 heartBeat를 통해서 유레카 서버에 자신이 살아 있음을 알리게 됩니다. 서버 측 설정 eureka.server.enable-self-preservation 일시적인 네트워크 장애로 인한 ..

    2. Ribbon - [Spring Cloud를 활용한 MSA 기초 온라인 강의 실습]

    리본을 설명하기 앞서 로드 밸런싱에 대해서 이해하고 가겠습니다. 어떤 어플리케이션이 다른 어플리케이션을 호출할 때 대상 어플리케이션 인스턴스가 하나밖에 없다면 어떻게 될까요 ? 그 대상앱 인스턴스가 죽거나 HTTP hang이 걸리면 서비스에 장애가 발생합니다. 그래서 보통 어플리케이션 인스턴스는 1개가 아니라 최소 2개 이상을 띄웁니다. 2개의 인스턴스에 요청을 나눠주는 친구가 로드밸런서, 요청을 나눠주는 행위를 로드 밸런싱이라고 합니다. Client LoadBalancer - Ribbon Ribbon은 Load balancing을 요청 어플리케이션 단에서 수행해주는 Client-side Load balancer Ribbon과 같은 L/B가 필요한 이유는 부하 분산을 적절하게 하여 서비스의 가용성을 최대..

    1. hystrix - [Spring Cloud를 활용한 MSA 기초 온라인 강의 실습]

    Netflix에서 Circuit Breaker Pattern을 구현한 라이브러리이다. Micro Service Architecture에서 장애 전파 방지를 할 수 있다. 마이크로 서비스 아키텍처에서 분산된 서비스간 통신이 원활하지 않은 경우에 각 서비스가 장애 내성과 지연 내성을 갖게하도록 도와주는 라이브러리다. 장애 연쇄 위 그림에서 supplier 서버에 장애가 생겨 항상 Timeout이 발생하는 경우, supplier 서버를 호출한 client 서버는 Timeout이 발생할 때까지 응답이 밀리게 된다. 응답이 밀리는 동안 요청이 계속 쌓여 결국 client 서버까지 요청이 과하게 밀려 장애가 발생할 수 있다. 이러한 상황이 발생하지 않도록 circuit breaker를 두어 장애 전파를 막을 수 있..