본문 바로가기

Business/API NetFUNNEL

[API 넷퍼넬 노트] 유량제어 측면에서 Rate Limiting이 가지는 문제점을 고찰해보자

유량제어 측면에서 Rate Limiting이 가지는 문제점을 고찰해보자
유량제어 측면에서 Rate Limiting이 가지는 문제점을 고찰해보자

 

요청이 너무 많습니다!

온라인 서비스를 자주 이용하다보면 요청이 너무 많아 잠시 후 다시 이용해달라는 화면을 종종 볼 수 있습니다. 이러한 화면이 노출되는 이유로 우리는 두 가지를 생각해볼 수 있습니다. 

 

API 트래픽, 요청이 너무 많습니다.
API 트래픽, 요청이 너무 많습니다.

 

첫째, 사이트가 매우 Busy하기 때문에

둘째, 내가 너무 많은 요청을 했기 때문에

 

어떤 이유가 되었건, 이는 해당 사이트에서 Rate Limiting 방식으로 유량 제어 중이라는 것을 의미합니다. 

 

Rate Limiting이란? 

Rate Limiting이란, 단위 시간 내 처리할 요청 수를 제한하는 것을 말합니다. 예를 들어, 매 초 100건의 요청만 처리하게 Rate Limit을 설정해 놓은 환경에서 클라이언트가 1초간 101회를 요청하면 마지막 요청은 설정된 수치를 초과한 요청으로 간주되어, 일반적으로 429 Too Many Requests 응답을 하게 됩니다. 

 

Rate Limiting 처리 방식에는 고객 경험 및 운영 관점에서 한계가 존재합니다.
Rate Limiting 처리 방식에는 고객 경험 및 운영 관점에서 한계가 존재합니다.

 

자원은 한정적이기 때문에, 안정적인 서비스를 위해서는 임의로 처리량을 제어해야 합니다. 실제로 규모가 큰 서비스(Github, Meta, Linkedin 등)에서는 대부분 Rate Limiting을 사용하고 있을 만큼 필수적입니다. 

 

Rate Limiting의 한계

필수적이라고 표현할 만큼 Rate Limit는 주요 기능으로 많이 쓰이고 있지만, 몇 가지 치명적인 문제를 가지고 있습니다.

 

1) Rate Limit 값 설정의 어려움

Rate Limit 값을 잘 설정하는 것이 상당히 어렵습니다. 초당 100건의 요청을 초과하면 더 이상 처리하지 않는다고 했지만, 여기서 초당 100건이라고 값을 설정할 수 있는 합당한 근거는 무엇일까요? 

 

Rate Limit 값을 기준을 초과하여 크게 가져가만 서버 자원을 초과하는 요청을 처리해야 하기 때문에 안정적인 서비스라는 소기의 목적을 이룰 수 없게 되고, 이 값을 기준 미만으로 작게 가져가면 서버의 자원이 남게 되어 비효율이 발생하게 됩니다. 명확한 Rate Limit 값을 찾기 위해서는 많은 서비스 운영 경험과 시행착오가 수반되어야 하겠지만, 예측 불가능한 트래픽과 복잡한 시스템 환경에서는 이마저도 보장하기 어렵습니다. 

 

2) 단순 차단으로 인한 사용자 경험 감소

두 번째 문제점은, 요청을 거부(Deny)하는 방식에서 기인하는 것으로 서비스 이용자의 사용자 경험을 떨어뜨린다는 것입니다. Rate Limit를 통해 차단된 이용자는 HTTP 429 Too many requests 응답을 받고 서비스를 이용할 수 없게 됩니다. 이로 인해 사용자 경험이 하락하는 것은 자명한 일이며, 이 때 이용자는 일반적으로 새로 고침을 통한 요청 시도(Retry)로 귀결됩니다. 특히, 과도한 트래픽 상황에서는 반복적인 거부를 당하게 될 수 있는데, 이때 불필요한 네트워크 트래픽이 과도한 운영 비용으로 돌아올 수 있다는 점도 고려해볼 필요가 있습니다. 

 

3) 중요도에 따른 요청 처리 불가

세 번째는, 이용자 및 서비스 중요도에 따른 요청 처리가 어렵다는 점입니다. 운영자는 서비스의 성격에 따라 VIP, 우수 회원과 같이 상대적으로 중요한 이용자나 비용 결재와 같은 중요한 서비스를 분류할 수 있을 것입니다. 서비스 운영 측면에서는 해당 분류 중 더 중요한 요청을 더 먼저, 더 많이 처리해야 할 필요가 있을 수 있습니다. 

 

안타깝게도 Rate Limiting은 우선순위(Priority)를 고려한 유량 제어를 제공하지 않습니다. 단순히 양적(Quantity-based) 제한을 통해 중요도가 높은 요청을, 그렇지 않은 요청보다 많이 처리하도록 설정하는 것에 그치고 있습니다.

 

API 넷퍼넬(API NetFUNNEL)의 유량 제어

API 넷퍼넬은 이러한 Rate Limiting의 한계점을 뛰어 넘어, 유량 제어의 새로운 패러다임을 제시하는 솔루션입니다. Rate Limiting이 가지는 문제점을 해결하는 것에서 출발한 API 넷퍼넬이 써낸 답은 아래와 같습니다. 

 

API NetFUNNEL, API 트래픽 유량 제어의 새로운 패러다임을 제시합니다.
API 넷퍼넬(API NetFUNNEL), API 트래픽 유량 제어의 새로운 패러다임을 제시합니다.

 

API 넷퍼넬은 실시간 서버의 자원을 확인하고 이 값을 유량 제어에 활용한다면 서버 자원에 맞춰 적정량의 요청을 처리할 수 있다는 생각에서 출발했습니다. 대규모 트래픽이 발생하는 서비스라면 APM, DBPM과 같은 모니터링 솔루션을 대부분 가지고 있을 것이며, 자원 데이터를 수집하는 것에도 문제가 없을 것입니다. 서버의 자원을 참조하여 유량을 제어하는 API 넷퍼넬은 효율적인 서버 운영과 안정적인 서비스라는 두 마리 토끼를 모두 잡을 수 있습니다. 

 

또한, API 넷퍼넬은 부하 상황에서 즉시 응답을 하지 않고, 요청을 대기열에 넣은 후 부하가 해소되면 처리하는 방식으로 동작합니다. 따라서 이용자의 Retry가 발생하지 않게 되어 이로 인한 비용 문제를 회피할 수 있습니다. 또한, 사전 정의된 우선순위 정책에 따라 중요한 요청을 먼저 처리할 수 있어, 서비스 운영 측면에서의 QoS를 달성할 수 있습니다. 

 

API 넷퍼넬의 주요 기능과 효과, 그리고 다양한 고객 환경과 서비스에서의 사례는 앞으로 더 자세히 전달해드릴 수 있도록 하겠습니다. 항상 관심 가지고 지켜봐주시기 바랍니다. 감사합니다. 

 

 

문의)

솔루션 관련 문의 작성하기[클릭]

https://www.stclab.com/product/api-netfunnel

 

API넷퍼넬 | API 운영 환경에서 트래픽 제어하기

API-NetFUNNEL은 우선순위 반영으로 최적의 API 트래픽 처리를 결정하고 안정적인 서비스를 제공합니다.

www.stclab.com