API Gateway

  • 클라이언트와 백엔드 서버 사이의 출입문(front door)
  • 라우팅(라우팅, 필터링, API변환, 클라이언트 어댑터 API, 서비스 프록시)
  • 횡단 관심사 cross-service concerns
    • 보안. 인증(authentication) , 인가(authorization)
    • 일정량 이상의 요청 제한(rate limiting)
    • 계측(metering)

Netflix Zuul

  • 마이크로 프록시
  • 50개 이상의 AWS ELB 의 앞단에 위치해 3개의 AWS 리전에 걸쳐 하루 백억 이상의 요청을 처리(2015년 기준)

출처: https://www.slideshare.net/MikeyCohen1/rethinking-cloud-proxies-54923218

API Gateway - Zuul

  • 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 기능을 통해
        • 동일한 종류의 서버들로의 자동 재시도가 가능


  • No labels

0 Comments

You are not logged in. Any changes you make will be marked as anonymous. You may want to Log In if you already have an account.