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