2019.06.10
Chapter 6.
스프링클라우드와 주울로 서비스 라우팅
6.1 서비스 게이트웨이란
서비스 클라이언트와 호출될 서비스 사이에서 중개 역할, 전체 서비스 호출이 서비스 게이트웨이를 통한다
서비스 게이트웨이에서 구현할 수 있는 횡단 관심사
6.2 스프링 클라우드와 넷플릭스 주울 소개
주울(Zuul): 넷플릭스의 오픈 소스 프로젝트로 스프링 클라우드 애너테이션으로 설정하고, 사용하기 쉬운 서비스 게이트웨이
주울의 기능
6.3 주울에서 경로 구성
6.3.1 서비스 디스커버리를 이용한 자동 경로 매핑
application.yml에 경로를 정의해서 모든 경로 매핑
유레카 서비스 ID를 사용해 하위 서비스 인스턴스에 매핑
6.3.2 서비스 디스커버리를 이용한 수동 경로 매핑
주울을 사용하면 서비스의 유레카 서비스 ID로 자동 생성된 경로에 의존하지 않고 명시적으로 매핑 경로를 정의할 수 있으므로 더욱 세분화 가능
application.yml
zuul:
ignored-service: 'organizationservice'
routes:
organizationservice: /organization/**
/organizationservice/v1/organizations/{organization-id}
--> /organization/v1/organizations/{organization-id}
6.3.3 정적 URL을 이용한 수동 경로 매핑
유레카로 관리하지 않는 서비스를 라우팅하는데 고정 URL에 직접 라우팅하도록 설정 가능
application.yml
zuul:
routes:
licensetatic:
path: /licensestatic/**
url: http://licenseservice-static:8081
6.3.3 정적 URL을 이용한 수동 경로 매핑
라이선싱 서비스를 여러 경로에 정적으로 매핑
application.yml
zuul:
routes:
licensetatic:
path: /licensestatic/**
serviceId: licensestatic
ribbon:
eureka:
enabled: false
licensestatic:
ribon:
listOfServers: http://licenseservice-static1:8081,
http://licenseservice-static2:8082
6.3.4 경로 구성을 동적으로 로딩
경로를 동적으로 재로딩하면 주울 서버를 재활용하지 않고도 경로 매핑을 변경할 수 있다 -> 컨피그 서버와 동일한 방식
6.3.5 주울과 서비스 타임아웃
요청을 처리하는 데 1초 이상 걸리는 모든 호출을 종료하고 HTTP 500 에러 반환 - 히스트릭스 default
히스트릭스 timeout 설정
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 2500
특정 서비스 timeout 설정
hystrix.command.licensingservice.execution.isolation.thread.timeoutInMilliseconds: 2500
넷플릭스 리본 timeout 설정(5초 이상은 히스트릭스, 리본 모두 설정 필요)
hystrix.command.licensingservice.execution.isolation.thread.timeoutInMilliseconds: 7000
licensingservice.ribbon.ReadTimeout: 7000
6.4 주울의 진정한 힘! 필터
필터 타입
일관된 메시지 형식 검사, 인증 및 인가를 확인하는 게이트키퍼 역할
6.4 주울의 진정한 힘! 필터
필터 종류
6.5 상관관계 ID를 생성하는 주울의 사전 필터 작성
HystrixConcurrencyStrategy
히스트릭스와 스프링 클라우드는 부모 스레드의 컨텍스트를 히스트릭스 스레드 풀이 관리하는 스레드에 전달하는 메커니즘
5.9 스레드 컨텍스트와 히스트릭스
HystrixConcurrencyStrategy 동작