내 잡다한 노트

Throttling과 API Throttling 본문

엔지니어링(TA,AA,SA)/성능&최적화

Throttling과 API Throttling

peanutwalnut 2024. 11. 29. 22:48

**Throttling(쓰로틀링)**은 시스템, 네트워크, 애플리케이션 또는 API에서 과도한 요청이나 작업을 제한하여 성능을 유지하고 리소스 사용을 최적화하는 기술 또는 메커니즘을 말합니다.

 

또는 PC, 노트북의 CPU, GPU 등이 지나치게 과열될 때 기기의 손상을 막고자 클럭과 전압을 강제적으로 낮추거나 강제로 전원을 꺼서 발열을 줄이는 기능으로 불리기도 한다. 

 

API Throttling은 주로 API를 사용하는 환경에서 적용되며, 클라이언트가 일정 시간 동안 보낼 수 있는 요청 수를 제한하여 API 서버가 과부하에 걸리지 않도록 보호합니다. 

 

1. Throttling의 일반 개념

  • 목적
    • 리소스 보호: 서버, 네트워크, 데이터베이스 등의 과부하를 방지.
    • 공정한 리소스 분배: 여러 사용자 간에 리소스를 공평하게 사용하도록 제어.
    • 비용 절감: 과도한 리소스 사용으로 인한 추가 비용을 방지.
    • 서비스 안정성: 과도한 트래픽 상황에서도 안정적인 서비스 제공.
  • 동작 방식
    • Rate Limiting(속도 제한): 특정 기간 동안 허용되는 최대 요청 수를 제한.
    • Queueing(큐잉): 요청이 과도할 경우 큐에 쌓아두고 처리.
    • Reject or Delay: 초과된 요청을 거부하거나 지연시킴.

 

 

2. API Throttling

  • 정의
    • API 서버가 특정 클라이언트 또는 모든 클라이언트에 대해 일정 시간 동안 허용하는 요청 수를 제한하는 메커니즘.
  • 주요 목적
    • API 서버 보호: 초당 많은 요청이 서버에 도달하면 성능 저하가 발생할 수 있으므로 이를 방지.
    • QoS(서비스 품질 보장): 모든 사용자가 공평하게 서비스를 이용할 수 있도록 보장.
    • 비용 관리: 서버의 리소스 소모를 제한하여 추가 비용 발생 방지.

 

3. API Throttling 주요 구성 요소

  1. Rate Limits(속도 제한)
    • API에 대해 설정된 시간당, 분당, 또는 초당 요청 횟수 제한.
    • 예: "100 requests per second" 또는 "10,000 requests per day".
  2. Burst Handling
    • 갑작스러운 요청 급증(버스트)에 대응하여 짧은 시간 동안 추가 요청을 허용.
    • 일정량을 초과하면 요청을 제한하거나 대기열로 전환.
  3. Quota(할당량)
    • 특정 기간 동안 각 클라이언트가 사용할 수 있는 API 요청의 총량.
    • 예: "하루에 5,000개의 요청".
  4. Throttling Policy
    • 사용자, 애플리케이션, API 키별로 다른 제한 정책 적용 가능.
    • VIP 사용자에게 높은 한도를 제공하거나 일반 사용자에게 낮은 한도를 적용.
  5. HTTP 상태 코드
    • 요청이 제한되었을 경우 서버는 보통 다음 상태 코드를 반환:
      • 429 Too Many Requests: 요청 제한 초과.
      • 503 Service Unavailable: 서버 과부하.

 

 

4. Throttling 구현 방식

  1. Token Bucket Algorithm(토큰 버킷 알고리즘)
    • 미리 설정된 속도에 따라 "토큰"을 추가하고, 요청 시 토큰을 소모.
    • 토큰이 없는 경우 요청이 거부되거나 지연됨.
  2. Leaky Bucket Algorithm(누수 버킷 알고리즘)
    • 요청을 버킷에 저장하고, 일정한 속도로 처리.
    • 버킷이 가득 차면 초과 요청은 거부.
  3. Fixed Window Counter(고정 윈도우 카운터)
    • 일정 시간 동안 요청 횟수를 카운팅.
    • 한도를 초과하면 추가 요청을 거부.
  4. Sliding Window Log(슬라이딩 윈도우 로그)
    • 요청 타임스탬프를 기록하고 일정 시간 동안의 요청만 카운팅.

 

 

5. Throttling 사례

  1. 클라우드 서비스
    • AWS API Gateway: API 호출에 대해 초당 호출 수 및 초당 데이터 전송량 제한.
    • Azure: API 요청량과 데이터 처리 속도 제한을 설정 가능.
  2. 소셜 미디어 API
    • Twitter API: 개발자가 15분 단위로 사용할 수 있는 요청 수 제한.
    • Instagram API: 사용자당 시간당 요청 제한.
  3. 웹 애플리케이션
    • 로그인 시스템: 반복적인 로그인 시도를 제한하여 보안 강화.

6. Throttling의 장점과 단점

  • 장점
    • 서비스 안정성 유지.
    • 시스템 과부하 방지.
    • 악의적인 사용(DoS 공격 등) 방지.
    • 공정한 리소스 분배.
  • 단점
    • Legitimate(정당한) 요청도 제한될 수 있음.
    • 높은 트래픽이 예상되는 경우 사용자 경험 저하.
    • 잘못된 설정 시 성능 저하 또는 서비스 중단.

7. Throttling 최적화

  • 클라이언트별 적합한 한도 설정.
  • 실시간 모니터링을 통한 적응형 Throttling 구현.
  • 중요한 요청 우선 처리 (예: 인증 요청).
  • 요청 대기열 관리로 사용자 경험 개선.