Amazon OpenSearch Service에 대한 배압 및 허용 제어로 탄력성 향상 | 아마존 웹 서비스

Amazon OpenSearch Service에 대한 배압 및 허용 제어로 탄력성 향상 | 아마존 웹 서비스

소스 노드 : 2723961

아마존 오픈서치 서비스 AWS 클라우드에서 규모에 맞게 OpenSearch 클러스터를 간단하게 보호, 배포 및 운영할 수 있게 해주는 관리형 서비스입니다. 작년에 소개한 샤드 인덱싱 배압입학 통제, 클러스터 리소스와 들어오는 트래픽을 모니터링하여 메모리 부족과 같은 안정성 위험을 초래하고 메모리 경합, CPU 포화 및 GC 오버헤드 등으로 인해 클러스터 성능에 영향을 미칠 수 있는 요청을 선택적으로 거부합니다.

우리는 이제 클러스터의 복원력을 더욱 향상시키는 OpenSearch 서비스를 위한 Search Backpressure 및 CPU 기반 허용 제어를 도입하게 되어 기쁩니다. 이러한 개선 사항은 모든 OpenSearch 버전 1.3 이상에서 사용할 수 있습니다.

배압 검색

배압은 시스템이 작업에 압도되는 것을 방지합니다. 충돌 및 데이터 손실을 방지하고 성능을 개선하며 시스템의 전체 오류를 방지하기 위해 트래픽 속도를 제어하거나 과도한 부하를 차단함으로써 그렇게 합니다.

Search Backpressure는 노드가 압박을 받고 있을 때 진행 중인 리소스 집약적인 검색 요청을 식별하고 취소하는 메커니즘입니다. 노드 충돌을 일으키고 클러스터의 상태에 영향을 미칠 수 있는 비정상적으로 높은 리소스 사용량(예: 복잡한 쿼리, 느린 쿼리, 많은 적중 또는 과도한 집계)이 있는 검색 워크로드에 효과적입니다.

Search Backpressure는 작업 리소스 추적 프레임워크 위에 구축되어 각 작업의 리소스 사용량을 모니터링하는 사용하기 쉬운 API를 제공합니다. Search Backpressure는 노드의 리소스 사용량을 주기적으로 측정하고 CPU 시간, 힙 할당 및 경과 시간과 같은 요소를 기반으로 각 진행 중인 검색 작업에 취소 점수를 할당하는 백그라운드 스레드를 사용합니다. 취소 점수가 높을수록 리소스 집약적인 검색 요청에 해당합니다. 검색 요청은 노드를 빠르게 복구하기 위해 취소 점수 내림차순으로 취소되지만 낭비되는 작업을 피하기 위해 취소 횟수가 제한됩니다.

다음 다이어그램은 검색 배압 워크플로를 보여줍니다.

검색 요청은 취소 시 HTTP 429 "너무 많은 요청" 상태 코드를 반환합니다. OpenSearch는 일부 샤드만 실패하고 부분 결과가 허용되는 경우 부분 결과를 반환합니다. 다음 코드를 참조하십시오.

{ "error": { "root_cause": [ { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } ], "type": "search_phase_execution_exception", "reason": "SearchTask was cancelled", "phase": "fetch", "grouped": true, "failed_shards": [ { "shard": 0, "index": "nyc_taxis", "node": "9gB3PDp6Speu61KvOheDXA", "reason": { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } } ], "caused_by": { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } }, "status": 429
}

검색 배압 모니터링

노드 통계 API를 사용하여 자세한 Search Backpressure 상태를 모니터링할 수 있습니다.

curl -X GET "https://{endpoint}/_nodes/stats/search_backpressure"

다음을 사용하여 클러스터 전체의 취소 요약을 볼 수도 있습니다. 아마존 클라우드 워치. 이제 다음 메트릭을 사용할 수 있습니다. ES/OpenSearch 서비스 네임 스페이스 :

  • 검색작업이 취소되었습니다. – 코디네이터 노드 취소 횟수
  • 검색샤드작업이 취소되었습니다. – 데이터 노드 취소 횟수

다음 스크린샷은 CloudWatch 콘솔에서 이러한 지표를 추적하는 예를 보여줍니다.

CPU 기반 승인 제어

승인 제어는 트래픽의 유기적 증가 및 스파이크 모두에 대해 현재 용량을 기반으로 노드에 대한 요청 수를 사전에 제한하는 게이트키핑 메커니즘입니다.

JVM 메모리 압력 및 요청 크기 임계값 외에도 이제 각 노드의 롤링 평균 CPU 사용량을 모니터링하여 수신을 거부합니다. _search_bulk 요청합니다. 핫스팟, 성능 문제, 요청 시간 초과 및 기타 계단식 오류로 이어지는 너무 많은 요청으로 노드가 압도되는 것을 방지합니다. 과도한 요청은 거부 시 HTTP 429 "너무 많은 요청" 상태 코드를 반환합니다.

HTTP 429 오류 처리

과도한 트래픽을 노드로 보내면 HTTP 429 오류가 발생합니다. 클러스터 리소스 부족, 리소스 집약적인 검색 요청 또는 의도하지 않은 워크로드 급증을 나타냅니다.

검색 배압은 거부 이유를 제공하여 리소스 집약적인 검색 요청을 미세 조정하는 데 도움이 될 수 있습니다. 트래픽 급증의 경우 지수 백오프 및 지터를 사용하여 클라이언트 측 재시도를 권장합니다.

다음 문제 해결 가이드를 따라 과도한 거부를 디버깅할 수도 있습니다.

결론

검색 백프레셔는 과도한 로드를 줄이기 위한 사후 대응 메커니즘인 반면 승인 제어는 노드에 대한 요청 수를 용량 이상으로 제한하는 능동적 메커니즘입니다. 둘 다 함께 작동하여 OpenSearch 클러스터의 전반적인 복원력을 향상시킵니다.

검색 배압은 다음에서 사용할 수 있습니다. 오픈 검색, 그리고 우리는 항상 찾고 있습니다 외부 기여. 다음을 참조할 수 있습니다. RFC 시작하는.


저자 소개

케탄 베르마 Amazon OpenSearch Service에서 작업하는 선임 SDE입니다. 그는 대규모 분산 시스템 구축, 성능 향상, 단순한 추상화로 복잡한 아이디어 단순화에 열정적입니다. 직장 밖에서 그는 집에서 바리스타 기술을 읽고 향상시키는 것을 좋아합니다.

수레시 NS Amazon OpenSearch Service에서 작업하는 선임 SDE입니다. 그는 대규모 분산 시스템의 문제를 해결하는 데 열정적입니다.

프리트쿠마르 라다니 Amazon OpenSearch Service에서 작동하는 SDE-2입니다. 그는 오픈 소스 소프트웨어 개발에 기여하는 것을 좋아하고 분산 시스템에 열정적입니다. 그는 아마추어 배드민턴 선수이며 트레킹을 즐깁니다.

북타와르 칸 Amazon OpenSearch Service에서 일하는 수석 엔지니어입니다. 그는 분산 및 자율 시스템 구축에 관심이 있습니다. 그는 OpenSearch의 관리자이자 적극적인 기여자입니다.

타임 스탬프 :

더보기 AWS 빅 데이터