API Gateway
- 클라이언트와 백엔드 서버 사이의 출입문(front door)
- 라우팅(라우팅, 필터링, API변환, 클라이언트 어댑터 API, 서비스 프록시)
- 횡단 관심사 cross-service concerns
- 보안. 인증(authentication) , 인가(authorization)
- 일정량 이상의 요청 제한(rate limiting)
- 계측(metering)
Image Added
Netflix Zuul
- 마이크로 프록시
- 50개 이상의 AWS ELB 의 앞단에 위치해 3개의 AWS 리전에 걸쳐 하루 백억 이상의 요청을 처리(2015년 기준)
Image Added
출처: https://www.slideshare.net/MikeyCohen1/rethinking-cloud-proxies-54923218
API Gateway - Zuul
Image Added
- 1. Zuul의 모든 API 요청은 HystrixCommand로 구성되어 전달된다.
- 각 API 경로 (서버군) 별로 Circuit Breaker 생성
- 하나의 서버군이 장애를 일으켜도 다른 서버군의 서비스에는 영향이 없다.
- CircuitBreaker / ThreadPool의 다양한 속성을 통해 서비스 별 속성에 맞는 설정 가능
- 2. API를 전달할 서버의 목록을 갖고 Ribbon을 통해 Load-Balancing을 수행한다.
- 주어진 서버 목록들을 Round-Robin으로 호출
- Coding을 통해 Load Balancing 방식 Customize 가능
- 3. Eureka Client를 사용하여 주어진 URL의 호출을 전달할 “서버 리스트”를 찾는다.
- Zuul에는 Eureka Client가 내장
- 각 URL에 Mapping된 서비스 명을 찾아서 Eureka Server를 통해 목록을 조회 한다.
- 조회된 서버 목록을 `Ribbon` 클라이언트에게 전달한다.
- 4. Eureka + Ribbon에 의해서 결정된 Server 주소로 HTTP 요청
- Apache Http Client가 기본 사용
- OKHttp Client 사용 가능
- 5. 선택된 첫 서버로의 호출이 실패할 경우 Ribbon에 의해서 자동으로 Retry 수행
- Retry 수행 조건
- Http Client에서 Exception 발생 (IOException)
- 설정된 HTTP 응답코드 반환 (ex 503)
- 정리
- Zuul의 모든 호출은....
- HystrixCommand로 실행되므로 Circuit Breaker를 통해
- 장애시 Fail Fast 및 Fallback 수행 가능
- Ribbon + Eureka 조합을 통해
- 현재 서비스가 가능한 서버의 목록을 자동으로 수신
- Ribbon의 Retry 기능을 통해
Image Added