Cloud 13

Spring Cloud Bus

개요 Spring Cloud Bus 는 분산 시스템에 존재하는 노드를 경량 메세지 브로커인 RabbitMQ , Kafka 등과 연결시키는 역할을 합니다. 변경점과 관리사항들을 브로드캐스트할 수 있습니다. AMQP 브로커를 사용하나 Kafka, Redis 도 사용가능합니다. Spring Cloud Config Server 를 구축하면 각 App의 설정정보를 한곳으로 모아서 관리할 수 있습니다. @RefreshScope 와 /refresh 엔드포인트를 주어 재기동 없이 변경사항을 적용할 수 있으나, 분산 App이 많으면 많을 수록 해당 작업은 어려워집니다. 이러한 문제를 해결하기위해 Spring Cloud Bus 가 있습니다. Spring Cloud Bus 설정 기본적으로 경량 메세지 브로커를 사용하므로 R..

Cloud 2020.12.15

Config Server

Spring Cloud Config 는 분산 시스템 환경에서 환경설정을 외부로 분리시켜 관리하는 기능을 제공함. Config Server 를 사용하게 되면 개발, 테스트, 프로덕션 등에 대한 App 의 속성을 한 장소에서 관리하게 됨. 장점 설정 관리가 분산되지 않는다. 추가 설정으로 운영 중 서버를 빌드하거나 배포하지 않고 환경설정 변경가능함. 기능 Spring Cloud Config Server => 설정파일 배달 properties , yml 파일 을 위한 HTTP Resource 기반 API 속성 값 암호화와 복호화 @EnableConfigServer 로 Boot App 에 적용가능 Config Client => 설정파일 사용 Config Server 에 묶여 원격 속성 소스로 Spring 환경 ..

Cloud 2020.12.14

Sleuth & ZipKin

MSA 에서 분산 컴퓨팅 환경을 가짐으로서 클라이언트의 Request -> Response 까지 다양한 MS 를 거치게 된다. 이 과정을 하나의 트랜젝션으로 보았을 때에 , 작업 단위의 세부내용을 추적하는 것은 어려운 일이다. 이는 분산 추적 Trace Id / 구간별 => Span Id 의 로그를 추적한다. 트위터가 제공하는 Zipkin , 구글의 Dapper 등의 UI 툴을 이용해 분산 추적을 쉽게 할 수 있다. 서비스 Request 시 API GateWay < (Ex : Zuul) 에서 gTxId (Global Transaction ID) 를 만든다. 각 서비스의 Logging 시에 gTxId 를 함께 Logging 한다. 다른 서비스로 넘어갈 때 Header 에 gTxId 를 포함한다. 기록되는 ..

Cloud 2020.12.14

Hystrix

MS 와 같은 분산환경에서는 에러가 발생하거나 실패할 시점이 다양하다. MSA 에서는 빠른 실패와 장애 적응, 회복력을 중점으로 바라보며 실패를 수용하는 태도를 보인다. 치명적인 부분은 장애 전파 시의 경우이며, 이는 대부분 의존성 발생 지점에서 나타나는 일이다. Hystrix 가 하는 일은 회로 차단기와 같다. 의존성이 발생하는 포인트를 분리하고, 장애 발생시 끊음으로서 장애 전파가 일어나지 않게한다. FallBack 기능으로 미리 정의된 값을 Return 시킨다. 특정 서비스나 REST API 호출 결과가 비정상일 경우, 장애 전이 방지를 위해 Zuul 같은 Gateway API , 각 서비스에 있는 Hystrix 에서 호출을 자동으로 차단합니다. 기능 장애 전파 방지 빠른 실패와 빠른 복구 실시간 ..

Cloud 2020.12.08

Feign

REST API 기반 Eureka client 서비스를 쉽게 호출하기 위해 구성 다른 Eureka Service 의 REST API 호출을 간단하게 진행 에러처리 간단 Eureka에 등록된 Service를 바로 사용함 Ribbon을 통한 LoadBalancing 가능 API Unit TEST 구현 용이 형태 필요의존 org.springframework.cloud:spring-cloud-starter-openfeign 리포지토리 url https://repo.spring.io/milestone springCloudVersion 에 변수 대입 의존 관리 : org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion} plugins { i..

Cloud 2020.12.08

Ribbon

MS 구성에서 서로 다른 서비스를 쉽게 호출할 수 있게 함. 기능 LoadBalancing 해당 Service 의 instance가 여럿 실행 중인 경우, Ribbon 의 LoadBalancing 기능을 사용함 LoadBalancer 의 구성요소 Rule : Round Robin 방식이 Default, Instance 마다 가중치를 줄 수도 있음 Ping : 서버 리스트의 서비스 상태를 주기적으로 확인 Server List : 정적으로 대상 서비스를 지정, Eureka 를 통해 동적으로도 지정 가능. Service Discovery 자체 Discovery 기능으로 Eureka Registry 에 등록된 서비스 탐색 가능 Eureka Server Registry 정보를 local에 Cache 한다. Fau..

Cloud 2020.12.08

Zuul

일체형이 아닌 마이크로 서비스 환경에서 많은 API 들이 연계되어 Client의 요청을 처리한다. 발생하는 이슈는 이와 같다. UI에서 여러가지 서비스를 직접 호출 Auto scaling 으로 host, port 동적변화 API 서비스 들이 각자 인증 CORS 이슈에 엮임 API 프로토콜이 일치하지 않을 수 있음 API 들이 언제든 합쳐지거나 쪼개질 수 있음. Zuul Filter, Zuul Routing Service 를 이용하면 해당 이슈들을 해결할 수 있게 된다. Zuul 은 API GateWay 또는 Edge Service 이다. Front End 로 부터 모든 Request 를 받아 내부 Ms 에게 전달하게 되어 똑같은 종단 점을 가지게 한다. CORS , 인증, 보안 등의 공통 설정은 Zuul..

Cloud 2020.12.07

Eureka

정의 Middle-tier load balancer 목적 로드밸런싱과 장애복구(failover)가 가능한 Middle-tier 서비스 환경을 구성 했을 때 클라이언트(API Gateway 또는 다른 서비스)에게 가용한 서비스 인스턴스들의 위치 정보를 동적으로 제공할 수 있어야 한다. 용어 Service Registration : 서비스가 자신을 Eureka 에 등록 Service Registry : 등록된 서비스 목록 , 서비스 위치정보로 갱신 Service Discovery : 클라이언트가 요청을 보내고자 하는 서비스를 Service Registry 에서 찾아오는 것 구성요소 Eureka Client : 서비스의 위치정보를 얻고자 Eureka Server에 질의하는 서비스 Eureka Service :..

Cloud 2020.12.07

Netflix Component 설명

Eureka Server 와 Java 기반 클라이언트 구성요소인 Eureka Client로 제공 됨 Eureka Client 에는 로드 밸런서 내장 Eureka 를 감싸는 로드밸런서는 트래픽,리소스,오류조건 과 같은 요소를 기반으로 로드밸런싱을 제공 클라우드의 본질적 문제인 포트 및 주소 동적할당으로 클라이언트가 호출할 서비스 주소를 알수가 없음 이를 해결하고 로드밸런싱을 하기위해서는 서비스 정보를 가진 Registry 가 필요했고 그 것이 Eureka 통신 Eureka Client 를 내장한 ApplicationService 와 Client 가 Eureka Service 에 등록을 요청 30 초 마다 HeartBeat 를 보냄 Eureka Client 의 등록정보, 갱신정보는 클러스터의 모든 유레카 노..

Cloud 2020.12.07

Netflix Components

Service Discovery Service 를 Eureka 에 등록하고 ServiceId 기반으로 endpoint 탐색이 가능하다. LoadBalancing 서비스들 ( instances ) 에게 작업을 할당하여 줄세우는 것 Ribbon 이 담당한다. Gateway 모든 요청을 받아 관련 서비스에게 Routing 한다. Zuul 이 담당. InnerService Call 한 서비스에서 다른 서비스를 호출 함. Feign 이 담당 Circuit Breaker 하위 서비스 장애 발생 시 장애가 상위로 전파되는 것을 방지 Fallback 을 지정하여 장애 상황시 값을 정의 가능 Hystrix 담당 Distributed Log Tracking 분산 환경의 로그 추적을 용이하게 함 Sleuth 담당 Confi..

Cloud 2020.12.07