Сколько серверных блоков я могу добавить в Nginx Conf
Любая идея о том, сколько серверных блоков я могу добавить в конфигурации Nginx? Мне нужно использовать его для обратного прокси с несколькими поддоменами (один поддомен для каждого клиента). Может ли он успешно поддерживать 10000 серверных блоков? Есть ли какие-либо эталонные исследования по нему?
1 ответ
Вопрос не в том, сколько у вас может быть, а в том, сколько вас.мог справиться прилично
То, сколько вы сможете эффективно обработать, будет в значительной степени зависеть от вашего оборудования (не от оборудования, питающего контейнеры, а от фактического блока, на котором работает nginx), так как Nginx будет в большинстве случаев пытаться разместить хеш-таблицы в Cache (предпочтительно в кэше L1, так как это быстрее, хотя и небольшой или, если не удается, в кэш-памяти L2) Это основная теория.
Согласно документации nginx, каждый блок сервера будет занимать 32/64/128 байт для хэша в зависимости от вашей конфигурации, поэтому даже при отметке 1000 серверных блоков вы, вероятно, больше не находитесь на L1, что означает, что вы, вероятно, двигаетесь от времени поиска 1-2 наносекунды до, возможно, 10-15 наносекунд или больше (не могу вспомнить точные текущие цифры... Это приблизительный показатель). Продолжайте расти, и вы можете даже исчерпать кэш L2 (опять же, это будет зависеть от того, какое у вас аппаратное обеспечение), так что теперь вы находитесь в кеше L3 или даже в оперативной памяти, которая еще медленнее. Даже при том, что все кэши могут показывать частоту обращений 99% или выше, время поиска станет проблемой, поскольку трафик растет, так как больше ЦП будет выделено только для определения, куда каждый посетитель намеревается пойти. И это только при условии, что все серверные блоки имеют точные доменные имена, а не подстановочные знаки или регулярные выражения, которые еще больше повлияют на производительность.
Это можно сделать? Конечно... Просто получите надежный процессор с самым большим кешем L1, который вы можете, и с большим кешем L2. И если вы абсолютно обязаны это сделать, держитесь подальше от групповых символов и регулярных выражений. Будьте готовы к настройке server_names_hash_max_size
а также server_names_hash_bucket_size
директивы config (вы будете знать, что вам нужно сделать это после добавления серверных блоков... Nginx может занять необычно / неприемлемо больше времени для перезапуска или может вообще не перезапуститься: это ваш сигнал к изменению этих директив, как показано здесь:
http://nginx.org/en/docs/hash.html
И здесь:
http://nginx.org/en/docs/http/ngx_http_core_module.html
Даже если nginx перезагружается, вам необходимо внимательно следить за оборудованием, поскольку трафик начинает увеличиваться, чтобы определить, насколько серьезным может стать ваше узкое место под нагрузкой. В лучшем случае вы добавите долю секунды к каждому запросу... В худшем случае вы можете поставить всю коробку на колени (но это действительно доводит ее до крайности)
Сказав все это... Вы исследовали другие варианты? Возможно, через DNS или переходите на корпоративные вещи, такие как устройства F5 или другие низкоуровневые решения?