Tech 블로그

Netflix는 load shedding을 어떻게 사용하는 가

diligentdev 2024. 6. 5. 22:35
728x90

서버의 트래픽이 많아지면, gateway에서 모든 requests들을 다 처리하지 못한다.

문제가 되는 건, 트래픽이 많아 별로 중요하지 않은 것들을 처리하다가 서비스에 중요하고 치명적인 request들을 처리하지 못한다는 것이다. 그래서 별로 중요하지 않은 것을 나중에 처리하는 방법이 필요한데 이를 load shedding(흘리기) 라고 한다.

 

 

그럼 netflix는 이를 어떻게 사용하고 있는 가?

netflix는 자체적으로 api gateway를 만들어서 관리하고 있다. Zuul 이라고 불리는 것인데,

AWS Re:Invent 2021에서 Zuul을 어떻게 디자인하고 test 했는 지에 대해 이야기 했다.

그래서 이에 관해 살펴보려 한다.

 

우선 넷플릭스에서 사용자들에게 중요하지 않은 request란 무엇일까?

넷플릭스 사이트에서는 스크롤을 내리다 멈추면 특정 동영상이 play되는 걸 볼 수 있는 데,

넷플릭스는 바로 이걸 중요하지 않다고 여긴다.

그래서 traffic이 많아질 때, 해당 request는 무시되어 동영상들을 그냥 이미지만 나오고 멈춰있다.

 

그럼 이런 load shedding을 netflix는 어떻게 진행할까?

 

다음과 같은 3가지 step에 의해 진행된다.

  1.  request들을 분류하고 점수매기기
  2. Load shedding 알고리즘을 적용
  3. Fault injection을 통해 가설을 검증

이제 하나하나 자세히 살펴보자

 

Request 점수 매기기

Netflix는 4가지 측면에 따라 들어오는 request들을 0~100으로 점수를 매긴다.

여기서 0은 critical, 100이 제일 priority가 낮은 점수이다.

 

4가지 측면은 아래와 같다.

  • 기능성
    • 성능에 영향을 주는 지
    • 유저 experience에 중요한가
  • 데이터 처리 양
    • 다른 데이터들보다 더 많은 처리 양을 가진 것들이 존재
    • log, background request, event data등등 시스템에 많은 양에 load를 줌
    • 이런 데이터들의 load를 줄인다
  • 중요성
    • request가 throttling이 필요하면, throttling이후에도 그 성능이 유저가 받아들일만 한가?
    • 예를들어, 원래는 영화를 클릭하면 영화 트레일러가 나왔지만, throttling하여 영화 이미지만 나와도 되는 가? 된다.
  • 요청의 근원지
    • request가 유저한테서 온 것인가? 아님 넷플릭스 앱에서 온 것인가?

 

 

load shedding 알고리즘

netflix는 api gateway인, Zuul에 알고리즘을 적용한다.

request가 처음 Zuul에 들어오면, filter들을 만나게 되는 데.

filter에서는 request에 정보들을 추가한다.

이때, priority score 정보가 각 request에 추가된다.

이 정보를 가지고 Zuul은 request가 특정 threshold 아래로 내려가면 throttle해버린다.

threshold 측정 metric은 request수, connection count, CPU 사용량이다.

 

priority level을 측정하기 위해, netflix는 cubic function을 사용한다.

overload 퍼센트가 35% 가 되면, Netflix는 Priority 가 95% 넘는 요청들을 모두 sheding한다.

overload 퍼센트가 80%에 도달하면, 50%가 넘는 요청들을 모두 sheding한다.

priority가 클수록 우선순위가 낮은 것이다.

Chaos Testing으로 가설을 검증

Fault Injection Test는 의도적으로 Fault(트래픽의 spike, latency 증가 등등) 를 Production 환경에 주입시키는 것이다.

Netflix는 주기적으로 production에서 이러한 테스트를 진행한다.

Chaos Monkey, ChAP(Chaos Automation Platform)을 만들어서 이러한 테스트를 쉽게 진행한다.

Zuul에서도 priority에 기반해 모든 request들을 shed 할 수 있는 failure injection만들었다.

실제로 load shedding을 경험해보고, 거기서 아이디어들도 얻는 다.

또한 user에게 끼치는 impact들도 측정할 수 있다.

이로써, netflix가 여러 device, version, 지역등에서 load shedding이 어떻게 동작하는 지 확인해 볼 수 있다.

728x90