Nginx-`nodelay` 옵션이있는 경우`burst`를 정의하는 의미는 무엇입니까


14

Nginx 구성에서 limit_req_zone/ 를 사용하여 요청 처리 속도를 제한하려는 limit_req instructions경우 nodelay옵션 의 사용을 실제로 이해하지 못합니다 .
내 이해에 따르면, 요청을 지연시키지 않고 정의 된 속도보다 높은 요청을 종료합니다. 따라서와 같습니다 burst=0. 그래서 다음 예제를 이해하지 못합니다.

limit_req zone=one burst=5 nodelay;

burst지연 될 수있는 요청 수를 정의 burst하므로 nodelay옵션 이 있는지 정의하는 의미는 무엇 입니까?

답변:


28

내가 찾는 limit_req문서 분명 충분히.

burst 그런 식으로 문서화됩니다.

그들의 요청이 최대 버스트 크기를 초과 할 때까지 과도한 요청이 지연됩니다 [...]

nodelay 그런 식으로 문서화됩니다.

요청이 제한되는 동안 과도한 요청 지연이 바람직하지 않은 경우 매개 변수 nodelay를 사용해야합니다.

요청은 정의 된 요율에 맞게 제한됩니다. 요청이 더 높은 속도로 수신되는 경우 시간당 정의 된 수의 요청 단위 만 제공됩니다. 그런 다음 다른 요청으로 수행 할 작업을 결정해야합니다.

  • 기본적으로 (no burst, no nodelay), 요청은 HTTP 503 오류와 함께 거부됩니다.
  • 을 사용하면 burst대기 큐에 정의 된 요청 수를 쌓을 수 있지만 시간 단위 속도 정의 된 요청 보다 빠르게 처리하지는 않습니다 .
  • burst하고 nodelay, 대기 큐가되지 않으며 요청 버스트를 즉시 처리 얻을 것이다 .

3
설명해 주셔서 감사합니다. 설명서가 충분하지 않습니다.
Nicolas

1
나는 문서를 인용하여 문서를 반영하도록 답변을 편집했습니다. 모든 단어는 간결하게하기 위해 nginx 문서에서 신중하게 가중치를 부여받습니다. 그것이 좋은 점입니다.
Bernard Rosset

3
그렇다면 limit_req_zone $binary_remote_addr zone=flood:10m rate=6r/s; limit_req zone=flood burst=0;초당 6 개의 요청을 허용하고 초당 6 개의 요청을 허용 하는 차이점은 무엇 limit_req_zone $binary_remote_addr zone=flood:10m rate=1r/s; limit_req zone=flood burst=5 nodelay;입니까?
Nicolas

2
Bernard 's anwser에 대해 확인하고 싶습니다. Bernard가 말한 내용이 올 바르면 버스트 및 노드 레이로 웹 서버의 r / s 적중률이 때때로 정의 된 요청보다 많을 것입니다.
Jcyrss

2
@BernardRosset "queue는 기다리지 않을 것"을 명확히 해줄 수 있습니까? 그게 무슨 뜻입니까?
데니스 고르바초프

8

원래 답변에 대한 의견이 잘못되었습니다.

문제는 rate = 6r / s burst = 0과 rate = 1r / s burst = 5 nodelay의 차이점입니다.

nodelay 옵션이 없을 때의 차이점을 설명하는 데 대한 대답은 훌륭합니다.이 경우 요청은 버스트와 함께 대기하며 버스트없이 503입니다.

원래의 대답은 노드 레이와 함께 버스트 요청이 즉시 처리되는 것처럼 보입니다. 따라서 버스트 + nodelay 지정과 busrt = 0으로 더 높은 한계를 지정하는 것 사이에는 아무런 차이가 없다는 것입니다.

따라서 OP 질문에 더 간결하게 대답하기 위해 : nodelay가 지정되었을 때 버스트의 의미는 버스트없이 더 큰 속도를 지정하는 것과 같습니다.


이 점을 분명히 해주셔서 감사합니다. 이것이 실제로 제 질문의 이유였습니다.
Nicolas

이것은 잘못이다. 내 답변 + 댓글을 다시 읽으십시오. 그래도 보이지 않는다면 Nicolas가 제공 한 두 가지 구성에 대한 스케치 : 6r / s를 내 대답에 대한 의견으로 만들어 봅시다. 첫 번째-> 두 시나리오 모두 6r을 제공하지만 conf # 2는 5를 버스트에 저장합니다. 2 초 이상 계속 conf # 1 (모두 6r 제공)과 동일하지만 conf # 2는 속도 제한에 맞는 소비량에 따라 버스트 버킷에서 1을 제거하여 대기열에 1r 공간을 남겨 둡니다. 다른 5r은 버려집니다.
Bernard Rosset

@BernardRosset :으로 nodelay, 그 요청이 대기열 대신 즉시 처리되는 것을 의미하지 않습니까?
siride

4

사용 burst하고 nodelay지정 하면 다음 과 같은 메커니즘을 이해하는 것이 더 쉽다는 것을 알 수 있습니다 (일반적으로 이해되는 것과 다른 방법).

  1. 최대 burst요청을 허용 합니다. 로 $binary_remote_addr그 주어진 주소에서 받아 들일 것을 요청의 최대 수입니다. 모든 요청은 내부 카운터를 증가시킵니다. 카운터가 도달하면 burst모든 추가 요청이 거부되고 카운터는 burst값을 초과하여 증가하지 않습니다 .
  2. 이 카운터는를 사용하여 지정된 속도로 계속 감소합니다 rate.

이 논리는 높은 burst값 (예 : 100 이상)과 낮은 rate값 (2r / s와 같은 것 ) 을 지정하는 것이 완벽하다는 것을 의미합니다 . 이는 지속적인 봇 요청 스트림으로부터 보호하면서 정상적인 브라우징 (병렬 요청 후 조용한 기간)을보다 잘 처리합니다.


1

나는 nginx 웹 사이트에서 아래 게시물을 작성한 사람에게 Nicolas의 질문을했습니다. NGINX Rate limiting. 답변은 다음과 같습니다.

전자 속도 제한에서 nginx는 1/6 초 간격으로 연속 요청을 수락합니다. 최소 시간 간격을 만족하지 않는 요청의 버스트는 수락하지 않습니다. 반면에 후자의 정의에서 nginx는 요청 간 시간 간격에 관계없이 최대 6 개의 요청을 처리합니다. 답변 링크


@Gardener 님, Server Fault에 오신 것을 환영합니다. 잘 만들어진 기여에 감사드립니다. 소스 링크는 매우 높이 평가됩니다.
Marco

0

탁월한 Dan의 답변nginx의 소스 코드를 기반으로 nodelay동작에 대한 간결한 요약 은 다음과 같습니다.

  • burst몇 개의 새로운 동시 요청이 허용되는지입니다.
  • rate많은 어떻게 새로운 동시 요청하게 단위 시간당. 이 업데이트는 점진적으로 발생합니다 (요청 당 한 번이지만 초당 아님).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.