[4장] 처리율 제한 장치의 설계

2025. 1. 28. 17:26·대규모 시스템 설계 기초
728x90

처리율 제한 장치 (Rate Limiter)

  • 클라이언트 혹은 서비스가 보내는 트래픽의 처리율을 제어하기 위한 장치.
  • ex) HTTP 내에서는 특정 기간 내 전송되는 클라언트 요청 횟수를 제한.
  • 임계치(threshold)를 넘어선 요청은 중단(block)됨
    • ex) 사용자는 초당 2회 이상 새 글을 올릴 수 없다.
    • ex) 같은 IP 주소로 하루에 10개 이상 계정 생성을 할 수 없다.
    • ex) 같은 디바이스로 주 5회 이상 리워드를 요청할 수 없다.
  • 장점
    • DoS 공격에 의한 자원 고갈 방지.
    • 처리 제한을 통해 비용 절감 가능.
    • 써드파티 API 호출에 따라 사용료를 지불하고 있을 땐 더더욱 횟수를 제한해야 한다.

 

처리율 제한 장치의 요구사항

  • 낮은 응답시간 : 처리율 제한 장치로 인해 API 성능 (HTTP 응답시간) 에 영향을 주어서는 안된다.
  • 메모리를 적게 사용하자.
  • 분산형 처리율 제한 : 하나의 처리율 제한장치를 여러 서버에서 사용할 수 있으면 좋다.
  • 높은 결함 감내성 : 제한 장치의 장애가 SPOF가 되어서는 안된다.

 

처리율 제한 장치는 어디에 둘 것인가?

 

  • API 서버 측에 제한장치를 둘 수 있고, 미들웨어를 만들어 API 서버로 가는 요청 자체를 통제할 수 있다.
  • MSA 에서는 API 게이트웨이에 처리율 제한 장치를 구현함.
    • 역할 : 처리율 제한, SSL 종단, 인증&인가, IP 화이트리스트 관리

 

처리율 제한 알고리즘


1. 토큰 버킷 알고리즘 (token bucket)

가장 보편적인 알고리즘

  • 지정된 용량을 갖는 토큰 버킷(컨테이너)에 토큰이 주기적으로 채워진다. 토큰이 꽉 차면 추가되지 않는다.
  • 토큰 공급기가 주기적으로 토큰을 버킷에 추가한다.
  • 각 요청이 처리될때마다 토큰을 사용
  • 요청이 도착하면 버킷에 토큰이 있는지 검사
    • 토큰이 있다면 토큰을 사용하여 요청을 처리
    • 토큰이 없다면 요청은 버려진다.
  • 토큰 버킷 알고리즘의 인자
    • 버킷 크기 : 버킷에 담을 토큰의 최대 개수
    • 토큰 공급률 (refill rate) : 초당 몇개의 토큰을 버킷에 공급하는가
  • 장점
    • 구현이 쉽고 메모리 사용측면에서 효율적이다.
    • 짧은 시간에 집중되는 트래픽도 처리 가능하다.,
  • 단점
    • 버킷 크기 & 토큰 공급률의 튜닝이 까다롭다.

2. 누출 버킷 알고리즘 (leaky bucket)

토큰 버킷 알고리즘과 유사하나, 요청 처리율이 고정되어 있다. FIFO (Queue) 로 구현됨.

  1. 요청이 도착하면 Queue 에 요청을 추가
  2. Queue 가 가득차있으면 새 요청은 버린다.,
  3. 지정된 시간마다 큐에서 요청을 꺼내 처리
  • 누출 버킷 알고리즘의 인자
    • 버킷 크기 : 큐 사이즈
    • 처리율 (outflow rate) : 지정된 시간당 몇개의 항목을 처리할 지 지정하는 값.
  • 장점
    • 큐 크기가 제한되어 있어 메모리 사용량 측면에서 효율적이다. 안정적인 출력이 가능하다.
  • 단점
    • 단시간에 많은 트래픽이 몰리는 경우 Queue 가 가득차면 최신 요청들이 버려진다.
    • 튜닝이 까다롭다.


3. 고정 윈도우 카운터 알고리즘 (fixed window counter)

  1. 타임라인을 고정된 간격의 window 로 나누고, 각 window 마다 카운터를 붙인다.
  2. 요청이 접수될때마다 카운터의 값이 1 증가한다.
  3. 카운터 값이 임계치에 도달하면 새로운 요청은 새로운 window 가 열릴때까지 버려진다.
  • 장점
    • 이해하기 쉽다.
  • 단점
    • 윈도우의 경계부분에 많은 트래픽이 집중될 경우 순간적으로 많은 요청이 처리될 수 있다.

4. 슬라이딩 윈도우 로그 알고리즘 (sliding window log)

  1. 요청의 타임스탬프 데이터를 캐시에 담아 추적.
  2. 새 요청의 타임스탬프를 로깅
  3. 로그의 크기가 허용치보다 큰 경우 처리를 거부
  • 장점
    • 어느 순간의 window 를 보더라도 허용되는 요청의 개수는 처리율 한도를 넘지 않는다.
  • 단점
    • 요청이 거부된 타임스탬프도 보관해야 하기 때문에 메모리를 많이 사용한다.

 


5. 슬라이딩 윈도우 카운터 알고리즘 (sliding window counter)

고정 윈도 카운터 알고리즘과 이동 윈도 로그 알고리즘을 결합한 것이다. 이

알고리즘에서는 현재 윈도에 들어온 요청의 개수를 다음과 같이 구한다.

 

(현재 1분간의 요청 수) + (직전 1분간의 요청 수 * 이동 윈도와 직전 1분이 겹치는 비율)

  • 장점
    • 이전 시간대의 평균 처리율에 따라 현재 윈도우 상태를 계산하므로, 짧은 시간에 몰리는 트래픽에도 대응 가능
    • 메모리 효율이 좋다.

 

728x90
저작자표시 (새창열림)

'대규모 시스템 설계 기초' 카테고리의 다른 글

[3장] 시스템 설계 면접 공략법  (0) 2025.01.25
[2장] 개략적인 규모 추정  (0) 2025.01.18
[1장] 사용자 수에 따른 규모 확장성  (0) 2025.01.18
'대규모 시스템 설계 기초' 카테고리의 다른 글
  • [3장] 시스템 설계 면접 공략법
  • [2장] 개략적인 규모 추정
  • [1장] 사용자 수에 따른 규모 확장성
gudwnsgur
gudwnsgur
IT
    250x250
  • gudwnsgur
    gudwnsgur
    gudwnsgur
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 개발이야기
      • Spring N
        • 이슈 해결
      • JPA
        • spring data jpa
      • Java
        • Java의 정석
      • Kotlin
        • Kotlin In Action
        • Kotlin 정리
      • 대규모 시스템 설계 기초
      • JavaScript
        • JS ES6+
      • 면접
        • CS
      • SQLD
      • BE 개발
        • spring webflux
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    HTTP
    session
    cookie
    대규모 시스템 설계 기초
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gudwnsgur
[4장] 처리율 제한 장치의 설계
상단으로

티스토리툴바