Конфигурация сервера / важный параметр для 500Req/Second
Я настраиваю сервер для использования в качестве сервера nginx для сайта с очень интенсивным трафиком. Ожидается, что он будет получать трафик с большого количества IP-адресов одновременно. Ожидается, что он получит 500Req/Second, по крайней мере, 20 миллионов уникальных IP-адресов, соединяющих его.
Одна из проблем, которые я заметил на моем предыдущем сервере, была связана с iptables / ipconntrack. Я не знаю об этом поведении и был бы рад узнать, какие параметры бита-машины ubuntu / debian (32/64) мне следует настроить, чтобы получить максимальную производительность от сервера. Я могу поставить много оперативной памяти на сервер, но критической задачей является время отклика. В идеале мы не хотим, чтобы какое-либо соединение зависало / отключалось / ожидалось, а общее время отклика должно быть как можно меньше.
3 ответа
Вы действительно нуждаетесь в iptables? Если вы хотите получить такую высокую производительность из одной коробки, я бы посоветовал просто полностью ее удалить. Если вы тщательно настроите машину, удалив все службы, кроме nginx, настроив SSH для прослушивания через непубличный интерфейс (VPN, LAN и т. Д.), Вы сможете обойтись без брандмауэра. Это, по крайней мере, избавит вас от одной проблемы.
Вы пытаетесь сделать это на одном веб-сервере или на нескольких из них? Даже простой циклический DNS-запрос поможет вам распределить нагрузку на несколько разных компьютеров. Вы также определенно хотели бы иметь несколько серверов для надежности.
500 запросов в секунду на самом деле не так уж много, если все, что вы делаете, это обслуживаете относительно небольшие статические файлы. С другой стороны, если они большие или сложные - например, основанные на сеансах или зависящие от БД, - это довольно большая нагрузка.
Рассмотрите возможность создания обратного прокси-сервера, такого как Varnish, перед этим решением, настроенного на использование пула malloc в качестве кэша. Правильно настроенный VCL позволит вам буферизовать большую часть сайта в памяти, а это означает, что nginx будет обслуживать только несколько выбранных битов. Также не забудьте установить noatime в файловой системе.
Этот вопрос довольно широкий. Мой лучший совет для вас - сделать шаг назад и подумать, как вы собираетесь масштабировать свое приложение. Вы хотите увеличить (несколько больших серверов) или уменьшить (много маленьких серверов) или, возможно, комбинацию. Как только вы определитесь со своей стратегией масштабирования, вы также можете разработать стратегию высокой доступности.
Я очень сомневаюсь, что вы увидите 20MM уникальных в секунду, когда сайт запускается (просто, чтобы дать вам некоторую перспективу, это сделало бы его топ-по крайней мере 200 лучших сайтов).
Имейте хороший план для масштабирования с вашим трафиком и не ограничивайте возможности своих серверов, предоставьте себе некоторый запас для всплесков и установите новое оборудование по мере роста вашего трафика.
Мы получаем эти вопросы время от времени. Хорошо думать о будущем, но не планируйте иметь инфраструктуру, которая будет способна обрабатывать 20MM/60MM/100MM уникальных устройств, вы будете тратить свои деньги и будете иметь инфраструктуру, которая в основном находится там. простаивает.
Теперь, чтобы ответить на ваш вопрос, мы в Stack Overflow (в настоящее время) используем iptable и без проблем запускаем модули conntrack на наших интерфейсных маршрутизаторах. Я бы предложил опубликовать новый вопрос с подробным описанием проблемы, с которой вы сталкиваетесь при запуске iptables/*conntrack* под нагрузкой.
И, наконец, хорошее чтение
Как мы запускаем S[OFU]/Stack Exchange
Блог о высокой масштабируемости