Atlas 의Intelligent Workload Management(IWM) 정책은 로드 쉐딩(load-shedding) 정책으로, 과부하 시 클러스터 정상 상태로 유지하기 위해 작업을 거부하거나 종료합니다. 이러한 정책이 작동하면 서버 서버 과부하로 인해 거부하거나 종료한 작업에 대해 애플리케이션 새로운 오류가 표시될 수 있습니다. 이러한 과부하 오류에는 SystemOverloadedError 레이블이 있습니다.
다음 부하 분산 IWM 정책은 작업을 거부하거나 종료할 때 오류를 반환합니다.
적응형 작업 속도 제한기가 작업을 거부하면 서버 IngressOperationRateLimitExceeded 코드와 함께 오류를 반환합니다. 예시 들면 다음과 같습니다.
{ "ok": 0.0, "errmsg": "Request rejected: ingress operation rate limit exceeded", "code": 463, "codeName": "IngressOperationRateLimitExceeded", "errorLabels": ["SystemOverloadedError", "RetryableError", "NoWritesPerformed"] }
IngressOperationRateLimitExceeded 오류에는 서버 가 오버로드되어 로드가 분산되었음을 나타내는 SystemOverloadedError 레이블이 있습니다. 이 레이블 자체가 작업을 안전하게 다시 시도할 수 있음을 MEAN 하지는 않습니다.
오류를 재시도할 수 있는지 확인하려면 다음 레이블을 확인하세요.
RetryableError- 작업이 실행되지 않았으며 다시 시도하는 것이 안전합니다.NoWritesPerformed- 서버 쓰기를 수행하기 전에 수신 시 작업을 거부했습니다.
오버로드 오류에 대한 재시도 로직을 구현 방법을 학습 보려면 오버로드 오류 처리를 참조하세요.
Query Sentinel이 비효율적이고 오래 실행되는 쿼리 작업을 종료하면 서버 InterruptedDueToOverload 코드와 함께 오류를 반환합니다. 예시 들면 다음과 같습니다.
{ "ok": 0, "errmsg": "operation was interrupted", "code": 473, "codeName": "InterruptedDueToOverload", "errorLabels": ["SystemOverloadedError"] }
InterruptedDueToOverload 오류에는 서버 가 오버로드되어 로드가 분산되었음을 나타내는 SystemOverloadedError 레이블이 있습니다.
InterruptedDueToOverload 오류는 클러스터 안정성을 보호하기 위해 서버 작업을 종료했음을 의미합니다. 이 오류는 RetryableError 재시도 가능으로 지정되지 않았으며 레이블을 포함하지 않습니다. 작업을 다시 시도하는 경우 작업이 멱등 있는지 확인하고 과부하가 발생하지 않도록 재시도하기 전에 기다립니다. 재시도 로직에 지수 백오프 및 지터를 사용합니다. 자세히 학습 과부하 오류 처리를 참조하세요.
역압 인식 클라이언트 라이브러리 버전
역압 인식 드라이버 및 기타 클라이언트 라이브러리는 SystemOverloadedError 레이블이 있는 과부하 오류를 자동으로 인식하고 과부하 신호로 처리합니다. 오류에 RetryableError 레이블을 포함하여 재시도를 유도하는 레이블이 있는 경우 역압 인식 클라이언트 라이브러리는 지수 백오프 및 지터를 사용하여 작업을 자동으로 재시도합니다.
다음 표에는 역압을 인식하는 가장 오래된 클라이언트 라이브러리 버전이 나열되어 있습니다.
클라이언트 라이브러리 | 가장 이른 배압 인식 버전 |
|---|---|
C 드라이버 | 2.3 |
C++ 드라이버 | 4.3 |
.NET/C# 드라이버 | 3.8 |
Go 드라이버 | 2.6 |
Java 동기화 드라이버 | 5.7 |
Java Reactive Streams 드라이버 | 5.7 |
코틀린 코루틴 드라이버 | 5.7 |
Kotlin Sync 드라이버 | 5.7 |
Node.js 드라이버 | 7.2 |
PHP 라이브러리 | 2.3 |
PyMongo | 4.17 |
Scala드라이버 | 5.7 |
역압 인식 클라이언트 라이브러리를 사용하는 경우 IWM 정책의 과부하 오류를 처리하다 위해 추가 재시도 로직을 구현 필요가 없습니다. 역압 인식 클라이언트 라이브러리를 사용하지 않는 경우 오버로드 오류 처리에서 지침 을 확인하세요.
과부하 오류 처리
역압 인식 클라이언트 라이브러리를 사용하지 않는 경우, 과부하 오류를 처리하다 위해 지수 백오프를 사용하여 오류 감지 및 재시도 로직을 구현 방법에 대한 예를 보려면 다음 절차를 참조하세요.
다음 절차에 따라 과부하 오류를 감지하고 지수 백오프로 재시도하는 유틸리티를 구현 .
안전한 과부하 재시도를 위한 지침
과부하 오류로 인해 실패한 작업을 다시 시도할 때 과부하가 발생하지 않도록 하고 성공적인 재시도 가능성을 높이려면 다음 지침을 따르세요.
재시도 시도 제한: 작업당 최대 번의 2 재시도를 사용합니다. 제한이 높으면 오류 비율이 줄어들지만 과부하 시 서버 부하가 증가하며, 재시도 횟수를 줄이면 서버 부하를 줄일 수 있지만 오류 비율이 증가할 수 있습니다.
선택적으로 적용: 지연 시간에 민감하거나 비즈니스에 중요한 작업에만 이 패턴 사용하세요. 배경 워크로드의 경우 오류를 로그 하고 더 긴 지연으로 더 높은 수준에서 다시 시도합니다.