개요
|Fess|에는 OpenSearch의 CPU 사용률에 따라 요청을 제어하는 부하 제어 기능이 있습니다. 이 기능을 통해 검색 엔진의 고부하 시 요청을 자동으로 제한하여 시스템 안정성을 보호할 수 있습니다.
부하 제어의 특징:
OpenSearch 클러스터의 CPU 사용률을 실시간으로 모니터링
웹 요청과 API 요청에 대해 독립적인 임계값 설정 가능
임계값을 초과하면 HTTP 429 (Too Many Requests)를 반환
관리 화면, 로그인, 정적 리소스는 제어 대상 제외
기본적으로 비활성화 (임계값=100)
설정
``fess_config.properties``에 다음 속성을 설정합니다:
# 웹 요청의 CPU 사용률 임계값(%)
# CPU 사용률이 이 값 이상일 때 요청을 거부
# 100으로 설정하면 비활성화 (기본값: 100)
web.load.control=100
# API 요청의 CPU 사용률 임계값(%)
# CPU 사용률이 이 값 이상일 때 요청을 거부
# 100으로 설정하면 비활성화 (기본값: 100)
api.load.control=100
# CPU 사용률 모니터링 간격(초)
# OpenSearch 클러스터의 CPU 사용률을 가져오는 간격
# 기본값: 1
load.control.monitor.interval=1
참고
web.load.control``과 ``api.load.control 모두 100(기본값)인 경우, 부하 제어 기능은 완전히 비활성화되며 모니터링도 시작되지 않습니다.
동작 원리
모니터링 메커니즘
부하 제어가 활성화된 경우(임계값 중 하나가 100 미만), LoadControlMonitorTarget이 주기적으로 OpenSearch 클러스터의 CPU 사용률을 모니터링합니다.
OpenSearch 클러스터의 모든 노드에서 OS 통계 정보를 가져옴
모든 노드 중 가장 높은 CPU 사용률을 기록
``load.control.monitor.interval``에서 지정한 간격(기본값 1초)마다 모니터링
모니터링은 지연 초기화로 첫 번째 요청 시 시작
참고
모니터링 정보 가져오기에 실패하면 CPU 사용률은 0으로 리셋됩니다. 연속 3회 실패하면 로그 레벨이 WARNING에서 DEBUG로 변경됩니다.
요청 제어
요청이 도착하면 LoadControlFilter가 다음 순서로 처리합니다:
대상 제외 경로인지 확인 (제외 대상이면 그대로 통과)
요청 종류 (웹 / API) 판정
해당 임계값 가져오기
임계값이 100 이상이면 제어하지 않음 (그대로 통과)
현재 CPU 사용률과 임계값 비교
CPU 사용률 >= 임계값인 경우 HTTP 429 반환
제어 대상 제외 요청:
``/admin``으로 시작하는 경로 (관리 화면)
``/error``로 시작하는 경로 (오류 페이지)
``/login``으로 시작하는 경로 (로그인 페이지)
정적 리소스 (
.css,.js,.png,.jpg,.gif,.ico,.svg,.woff,.woff2,.ttf,.eot)
웹 요청의 경우:
HTTP 429 상태 코드를 반환
오류 페이지 (
busy.jsp)를 표시
API 요청의 경우:
HTTP 429 상태 코드를 반환
JSON 응답을 반환:
{
"response": {
"status": 9,
"message": "Server is busy. Please retry after 60 seconds.",
"retry_after": 60
}
}
설정 예시
웹 요청만 제한하기
웹 검색 요청만 제한하고 API는 제한하지 않는 설정:
# 웹: CPU 사용률 80% 이상에서 요청 거부
web.load.control=80
# API: 제한 없음
api.load.control=100
# 모니터링 간격: 1초
load.control.monitor.interval=1
웹과 API 모두 제한하기
웹과 API에 다른 임계값을 설정하는 예:
# 웹: CPU 사용률 70% 이상에서 요청 거부
web.load.control=70
# API: CPU 사용률 80% 이상에서 요청 거부
api.load.control=80
# 모니터링 간격: 2초
load.control.monitor.interval=2
참고
API 임계값을 웹보다 높게 설정하면, 고부하 시 먼저 웹 요청을 제한하고, 부하가 더 높아지면 API 요청도 제한하는 단계적 제어가 가능합니다.
속도 제한과의 차이
|Fess|에는 부하 제어와 별도로 속도 제한 설정 기능이 있습니다. 이 두 기능은 서로 다른 접근 방식으로 시스템을 보호합니다.
| 항목 | 속도 제한 | 부하 제어 |
|---|---|---|
| 제어 기준 | 요청 수 (단위 시간당) | OpenSearch CPU 사용률 |
| 목적 | 과도한 요청 방지 | 검색 엔진의 고부하 보호 |
| 제한 단위 | IP 주소별 | 시스템 전체 |
| 응답 | HTTP 429 | HTTP 429 |
| 적용 대상 | 검색 API / AI 모드 API | 웹 요청 / API 요청 |
두 기능을 함께 사용하면 더 견고한 시스템 보호가 가능합니다.
문제 해결
부하 제어가 활성화되지 않음
원인: 설정이 올바르게 반영되지 않음
확인 사항:
정상적인 요청이 거부됨
원인: 임계값이 너무 낮음
해결 방법:
web.load.control``이나 ``api.load.control값을 올리기``load.control.monitor.interval``을 조정하여 모니터링 빈도 변경
OpenSearch 클러스터의 리소스 증강
경고
임계값을 너무 낮게 설정하면 정상적인 부하에서도 요청이 거부될 수 있습니다. OpenSearch 클러스터의 평소 CPU 사용률을 확인한 후 적절한 임계값을 설정하세요.
참고 정보
속도 제한 설정 - 속도 제한 설정