본문 바로가기

소프트웨어-이야기/인프라

(Istio) Traffic Management - Network resilience

Istio의 Traffic Management 기능은 네트워크의 탄력성 (resilience)을 높이는 역할을 담당하고 있다. 이를 위해 failure recovery 기능과  fault injection feature 기능을 지원한다.

특정 노드에서 네트워크 오류가 발생하면, Istio는 의도적으로 결함을 일으킨다. 그리고 그동안 서버가 복구될 수 있는 시간을 확보한다. 이러한 방식은 특정 노드의 장애가 전체 노드에 전파되는 것을 막는다. 

이는 Fault tolerant 시스템을 가능하게 해준다. 덕분에, 일부 서비스에서 결함이 발생하더도, 전체 서비스는 잘 운영될 수 있다.

Timeouts

Envoy proxy가 서비스 노드에서 응답받아야하는 최대 시간을 의미한다. 이 시간내에 응답하지 않으면, HTTP request 처리에 실패하게 된다. timeout은 VirtualService 별로 다르게 지정할 수 있다. Timeout 기본값은 15초이다.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - route:
    - destination:
        host: ratings
        subset: v1
    timeout: 60s

Retries

Envoy proxy에서 HTTP 요청 처리에 실패한 경우, 얼마나 재시도를 할지를 지정하는 값이다. 

네트워크 같은 일시적인 문제, 혹은 서버 과부하 상태에서도 서비스 요청 처리에 실패하지 않도록 할때 사용된다.

기본적으로 Istio는 첫번째 요청에 실패하면, 재시도를 하지 않는다. Retries 설정을 해야만, 재시도를 한다.

Retry 옵션도 서비스별로 설정할 수 있다.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - route:
    - destination:
        host: ratings
        subset: v1
    retries:
      attempts: 3
      perTryTimeout: 2s

Circuit breakers

Circuit breakers는 개별 호스트에 요청을 제한할 때 유용하게 사용할 수 있다.

특정 호스트에 요청이 너무 많이 몰리거나, 오류가 발생했을 때, 더이상 요청이 들어오는 것을 막을 수 있다.

그래서 클라이언트에서 오류가 발생하기 전에 빠르게 에러를 발생시켜서, 호스트에 과도한 부하가 발생하는 것을 막을 수 있다.

 

reviews 서비스에서 최대 100개의 커넥션을 가질 수 있게 설정하는 샘플은 다음과 같다.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1
    labels:
      version: v1
    trafficPolicy:
      connectionPool:
        tcp:
          maxConnections: 100

 

참고

https://istio.io/docs/concepts/traffic-management/#retries