부하 제어 설정

개요

|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가 다음 순서로 처리합니다:

  1. 대상 제외 경로인지 확인 (제외 대상이면 그대로 통과)

  2. 요청 종류 (웹 / API) 판정

  3. 해당 임계값 가져오기

  4. 임계값이 100 이상이면 제어하지 않음 (그대로 통과)

  5. 현재 CPU 사용률과 임계값 비교

  6. 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 요청

두 기능을 함께 사용하면 더 견고한 시스템 보호가 가능합니다.

문제 해결

부하 제어가 활성화되지 않음

원인: 설정이 올바르게 반영되지 않음

확인 사항:

  1. web.load.control 또는 ``api.load.control``이 100 미만으로 설정되어 있는지

  2. 설정 파일이 올바르게 읽혀지고 있는지

  3. |Fess|를 재시작했는지

정상적인 요청이 거부됨

원인: 임계값이 너무 낮음

해결 방법:

  1. web.load.control``이나 ``api.load.control 값을 올리기

  2. ``load.control.monitor.interval``을 조정하여 모니터링 빈도 변경

  3. OpenSearch 클러스터의 리소스 증강

경고

임계값을 너무 낮게 설정하면 정상적인 부하에서도 요청이 거부될 수 있습니다. OpenSearch 클러스터의 평소 CPU 사용률을 확인한 후 적절한 임계값을 설정하세요.

참고 정보