Я неправильно предположил, что мое внутреннее тестирование AB означает, что мой сервер может обрабатывать 1k одновременных обращений при 3k в секунду.
Моя теория на данный момент заключается в том, что сеть является узким местом. Сервер не может отправить достаточно данных достаточно быстро.
Внешнее тестирование от blitz.io при 1k одновременности показывает, что мои хиты / с ограничены на 180, а страницы реагируют все дольше и дольше, поскольку сервер может возвращать только 180 в секунду.

Я подал пустой файл из nginx и протестировал его: он масштабируется 1: 1 с параллелизмом.

Теперь, чтобы исключить узкие места IO / memcached (nginx обычно извлекает данные из memcached), я использую статическую версию кэшированной страницы из файловой системы.

Результаты очень похожи на мой оригинальный тест; Я ограничен на 180 RPS.
Разделение HTML-страницы пополам дает мне удвоенное число запросов в секунду, поэтому оно определенно ограничено размером страницы.

Если я внутренне использую ApacheBench с локального сервера, я получаю непротиворечивые результаты около 4 тыс. Запросов в секунду как на полной, так и на полстранице при высоких скоростях передачи. Скорость передачи: 62586,14 [Кбайт / с] получено
Если я AB с внешнего сервера, я получаю около 180RPS - так же, как результаты blitz.io.
Как я знаю, что это не намеренное регулирование?
Если я сравниваю результаты с нескольких внешних серверов, все результаты становятся неудовлетворительными, что наводит меня на мысль, что проблема в исходящем трафике МОИХ серверов, а не в скорости загрузки с моими контрольными серверами / blitz.io.
Итак, я вернулся к своему выводу, что мой сервер не может отправлять данные достаточно быстро.
Я прав? Есть ли другие способы интерпретации этих данных? Является ли решение / оптимизация для настройки нескольких серверов + балансировка нагрузки, каждый из которых может обслуживать 180 обращений в секунду?
Я довольно новичок в оптимизации серверов, поэтому я был бы признателен за любое подтверждение интерпретации этих данных.
Исходящий трафик
Вот дополнительная информация о исходящей полосе пропускания. На графике сети показана максимальная производительность 16 Мбит / с: 16 мегабит в секунду. Звучит совсем не так.
Из-за предположения о дросселировании я посмотрел на это и обнаружил, что у линода есть ограничение 50 Мбит / с (что я даже не близок к удару, очевидно). Я поднял его до 100 Мбит / с.
Поскольку линод ограничивает мой трафик, а я его даже не бью, означает ли это, что мой сервер действительно должен быть способен выводить до 100 Мбит / с, но ограничен каким-то другим внутренним узким местом? Я просто не понимаю, как работают сети такого масштаба; Могут ли они буквально отправлять данные так быстро, как они могут читать с жесткого диска? Сетевой канал такой большой?

В заключение
1: Исходя из вышеизложенного, я думаю, что я определенно могу повысить свои 180RPS, добавив балансировщик нагрузки nginx поверх конфигурации с несколькими серверами nginx со скоростью точно 180RPS на сервер за LB.
2: Если у linode есть предел 50/100 Мбит, который я вообще не бью, должно быть что-то, что я могу сделать, чтобы достичь этого предела с помощью настройки моего единственного сервера. Если я могу читать / передавать данные достаточно быстро локально, а линоде даже надоедает иметь ограничение 50 Мбит / 100 Мбит, должно быть внутреннее узкое место, которое не позволяет мне попасть в те ограничения, которые я не знаю, как обнаружить. Верный?
Я понимаю, что вопрос сейчас огромен и неопределен, но я не уверен, как его сжать. Любой вклад приветствуется на любом заключении, которое я сделал.


