Ограничение размера / etc / hosts (Linux)

11

Кто-нибудь знает, каков теоретический предел размера / etc / hosts в системе Linux, прежде чем вы начнете видеть снижение производительности?

Кроме того, может ли кто-нибудь указать мне на какой-либо официальный источник, в котором говорится, каков ожидаемый предел?

MikeP90
источник
8
Это заставляет меня думать, что вы делаете что-то сумасшедшее или ПУТЬ за пределами лучших практик. Какие детали?
ewwhite
3
Конечно, кажется, что развертывание облегченного преобразователя DNS может быть лучшим решением.
Zoredache
1
У меня есть клиент, который запрашивает это. Я надеялся найти какую-то документацию, чтобы показать им, почему это вызовет проблемы; вместо того, чтобы попробовать его на тестовой машине и продемонстрировать это.
MikeP90
1
Файл hosts является пережитком дней до DNS 1970-х и начала 1980-х годов. Наличие сотен записей в файле hosts было признано плохой идеей в далеком прошлом . Если у вас есть более 10 записей в вашей, вы, вероятно, не на том пути.
Майкл Хэмптон

Ответы:

9

Используйте источник , Майк.

Средство распознавания использует линейный поиск по текстовому файлу для поиска записей. Это база данных без индексов. Таким образом, при отсутствии возможности дополнительного кэширования стоимость поиска составит O (n). Относительно того, когда это приведет к снижению производительности, на этот вопрос невозможно ответить - он становится медленнее с каждой записью.

Если вы поговорите с программистом базы данных или администратором, вы получите разные цифры для точки, в которой поиск индекса (O (log2 (n)) дешевле, чем полное сканирование таблицы, но обычно ответ будет в районе 20 до 100 записей.

Любая система Linux, требующая разрешения большого количества имен (не только имен хостов). Должен быть запущен nscd или аналогичный. Большинство таких кешей сами индексируют данные, что сводит на нет вопрос о производительности, однако ...

Он не предоставляет никаких средств для управления сложными / большими наборами данных - если у вас есть хост с более чем одним IP-адресом, поиск через файл hosts всегда будет возвращать первую запись.

symcbean
источник
1
Чтобы закрыть цикл, мы добавили 1,7 миллиона записей в файл hosts и оценили, что он добавляет 0,5 секунды к каждому поиску. В этой среде 0,5 секунды незначительны. Я думаю, что DNS-сервер все еще является лучшим решением, но клиент хочет то, что хочет клиент.
MikeP90
5

Немного истории Интернета - до того, как DNS был развернут в 1984 году, файл hosts был единственным средством разрешения имен, и в сети было не так много хостов - 325 в феврале 1983 года (RFC 847) . В архиве журнала истории Интернета есть копии HOSTS.TXT (но не машиночитаемые) 1982 года . Был даже альтернативный HOSTS.TXT (Geoff Goodfellow's) .

sendmoreinfo
источник
3

Технически нет верхней границы. Тем не менее, каждый поиск DNS будет попадать в этот файл, так почему же оставить себя открытым к этому?

Что бы это ни стоило, самый большой /etc/hostsфайл, который я распространил в моей среде, был 1200 строк. И это хорошо работало для приложения, которым я управлял. DNS не был вариантом в этой конкретной среде.

ewwhite
источник
Скажем по-другому. Если в ядре нет индексации, каждое попадание будет выполнять линейный поиск, который будет зависеть от размера кэша в зависимости от времени.
Охотник на оленей
4
Я использую популярный файл hosts, найденный в интернете, в нем 15430 строк, и я не замечаю реального снижения производительности веб-серфинга.
Берт
@DeerHunter Я не думаю, что в ядре Unix есть что-то, что выполняет поиск по имени хоста.
Бармар
+1 к записке Берта. Я просто использовал пользовательский файл с 22 000 строк, и это не повлияло на производительность. Это полезно для тестирования!
Джош Кениг