내부 AB 테스트를 통해 서버가 초당 3k 적중에서 1k 동시성을 처리 할 수 있다고 잘못 가정했습니다.
현재 나의 이론은 네트워크가 병목 현상이라는 것입니다. 서버가 충분한 데이터를 충분히 빨리 보낼 수 없습니다.
1k 동시성에서 blitz.io의 외부 테스트에 따르면 서버가 초당 180 만 리턴 할 수 있기 때문에 응답 시간이 길어지고 시간이 더 오래 걸리는 내 적중이 180에서 상한값으로 표시됩니다.
nginx에서 빈 파일을 제공하고 벤치에 올렸습니다. 동시성으로 1 : 1로 확장됩니다.
이제 IO / memcached 병목 현상 (nginx는 일반적으로 memcached에서 가져옴)을 배제하기 위해 파일 시스템에서 캐시 된 페이지의 정적 버전을 제공합니다.
결과는 내 원래 테스트와 매우 유사합니다. 나는 약 180 RPS에서 모자를 씌운다.
HTML 페이지를 반으로 나누면 RPS가 두 배가되므로 페이지 크기에 따라 제한됩니다.
로컬 서버에서 내부적으로 ApacheBench를 사용하는 경우 전체 페이지와 1/2 페이지 모두에서 약 4k RPS의 높은 전송률로 일관된 결과를 얻습니다. 전송 속도 : 62586.14 [Kbytes / sec] 수신
외부 서버에서 AB를 검색하면 blitz.io 결과와 동일한 약 180RPS를 얻습니다.
의도적으로 제한되지 않는 것을 어떻게 알 수 있습니까?
여러 외부 서버에서 벤치마킹하면 모든 결과가 나빠져서 벤치마킹 서버 / blitz.io의 다운로드 속도 문제가 아니라 내 서버 아웃 바운드 트래픽에 문제가 있다고 생각합니다.
따라서 서버가 데이터를 충분히 빨리 전송할 수 없다는 결론에 도달했습니다.
내가 맞아? 이 데이터를 해석하는 다른 방법이 있습니까? 솔루션 / 최적화로 초당 180 개의 적중을 처리 할 수있는 다중 서버 +로드 밸런싱을 설정합니까?
나는 서버 최적화에 익숙하지 않으므로이 데이터를 해석하는 확인에 감사드립니다.
아웃 바운드 트래픽
아웃 바운드 대역폭에 대한 자세한 정보는 다음과 같습니다. 네트워크 그래프는 최대 16Mb / s : 초당 16MB의 출력을 보여줍니다. 전혀 들리지 않습니다.
스로틀 링에 대한 제안으로, 나는 이것을 조사하고 linode가 50mbps 캡을 가지고 있음을 발견했습니다 (물론 타격에 가깝지 않습니다). 나는 그것을 100mbps로 올렸다.
linode가 트래픽을 제한하고 적중하지 않기 때문에 서버가 실제로 최대 100mbps를 출력 할 수 있어야하지만 다른 내부 병목 현상으로 인해 제한을 받습니까? 이 대규모 규모의 네트워크가 어떻게 작동하는지 이해하지 못합니다. 문자 그대로 HDD에서 읽을 수있는 한 빨리 데이터를 전송할 수 있습니까? 네트워크 파이프 가 큰가요?
결론적으로
1 : 위의 내용을 바탕으로, LB 뒤 서버 당 정확히 180RPS로 다중 nginx 서버 설정 위에 nginx로드 밸런서를 추가하여 180RPS를 확실히 올릴 수 있다고 생각합니다.
2 : linode에 전혀 맞지 않는 50 / 100mbit 제한이있는 경우 단일 서버 설정으로 해당 제한에 도달하기 위해 수행 할 수있는 작업이 있어야합니다. 로컬에서 충분히 빠르게 데이터를 읽거나 전송할 수 있고 linode가 50mbit / 100mbit 캡을 갖도록 귀찮게하는 경우 감지 방법을 잘 모릅니다. 옳은?
나는 지금 질문이 거대하고 모호하다는 것을 알고 있지만 그것을 어떻게 압축해야할지 모르겠다. 내가 한 결론에 대해 모든 의견을 부탁드립니다.