Выбор между осмысленными и бессмысленными именами хостов [закрыто]

79

Представьте себе среду с кластером марионеток, управляемым марионетками, с различными аппаратными, программными, операционными системами, виртуальными / выделенными и т. Д.

Вы бы выбрали значимые имена хостов (mysqlmaster01..99, mysqlslave001..999, vpnprimary, vpnbackup и т. Д.) Или предпочли бы бессмысленные имена хостов, такие как символы из книги или фильма?

Проблема, которую я вижу со значимыми именами хостов, состоит в том, что имена обычно представляют один сервис, и если у сервера более чем одна цель, он становится действительно грязным (особенно, если роли сервера часто меняются).

Разве сопоставление имени службы с IP-адресом и поддержание того сопоставления, что должен делать DNS?

Каковы преимущества и недостатки обоих подходов и с какими реальными проблемами вам пришлось столкнуться с выбранным вами подходом?

keymone
источник
10
Если вы контролируете DNS, вы всегда можете сделать и то, и другое.
Jscott
16
Я просто оставлю это здесь: RFC 1178
gelraen
Хотя это поверхностный вопрос, основанный на мнении, фактические ответы основаны на эмпирическом опросе и основаны на когнитивной функции человека (как человеческий мозг запоминает вещи). На мой взгляд, этот вопрос должен быть вновь открыт.
Dotancohen

Ответы:

98

Когда-то у меня была возможность выбрать схему именования. Поэтому я обошел вокруг и спросил своих разработчиков, которые, в конце концов, были людьми, которые должны были работать с этими именами на ежедневной основе, предпочитали ли они функциональные имена (то есть имена, которые представляют в некоторой закодированной форме назначение машины) или мнемонические имена (то есть имена, взятые из некоторой ранее существовавшей схемы именования человека, которая не содержала неявного содержания о назначении машины).

Из 38 разработчиков 37 предпочитали мнемонические имена; только одно предпочтительное функциональное имя. Таким образом, я назвал их все в честь рек (есть очень большой пул возможных имен, и многие из них короткие, легко запоминающиеся и быстро набираемые).

Человеческий мозг довольно хорошо спроектирован для придания значения именам. Если вы предоставите имена, которые запоминаются, люди довольно быстро запомнят, для чего используются эти имена, и используют их. Если вы используете имена, взятые из некоторого общего фона (например, реки, стихии, звезды, графства, напитки, вы поймете, что идея), это помогает людям сразу же узнать имя хоста компании, когда они сталкиваются с ним; в противном случае утверждения типа «все письма закончились betelgeuse» могут быть немного запутанными).

С другой стороны, мои разработчики чувствовали, что им на предыдущих работах было действительно трудно вспомнить, что именно pr1ms001.

Но я должен добавить, что мы использовали CNAME во внутреннем DNS для предоставления функционального имени для мнемонического сопоставления имен, поэтому, если вам действительно будет проще запомнить, что основным почтовым сервером в первом кластере на сайте PR был pr1ms001DNS, тогда DNS будет сообщить, что это было в настоящее время orwell. Кроме того, это позволяет нам иметь много функциональных имен для каждой машины, так что, пока вы всегда используете функциональное имя, относящееся к функции, над которой работали, вы можете быть уверены, что pr1imap001она всегда будет указывать на сервер IMAP, даже если мы переместили эту функциональность от orwellдо rhine. А после hudsonсмерти мы могли бы изменить название замены, не затрагивая эксплуатационные функции, чтобы у нас никогда не было «Вы имеете в виду новое hudsonили старое hudson?» спутанность сознания.

Безумный Шляпник
источник
7
Вы можете подумать об этом, но мои разработчики сказали, что мнемоническая схема была лучше, независимо от того, было ли передано что-то еще, потому что все они построили свои собственные внутренние таблицы состояний того, что было где, и такой тип памяти легче построить на именах, которые человеческий мозг любит вспоминать.
MadHatter
11
Вы должны были назвать их в честь вулканов в Исландии.
Хлоя
1
+1 за "бассейн рек";)
Конерак
2
Это потрясающая идея, и я краду ее.
SpacemanSpiff
1
Я согласен с тем, что именование серверов таким способом лучше работает с системой автоматического построения, но я отмечаю, что смысл их построения - это использование их другими людьми, а приведенные выше данные получены от людей, которые должны были их использовать . Может быть, то, что они хотят, изменилось, но я думаю, что наши решения по администрированию сервера должны основываться больше на том, что облегчает нашу работу.
MadHatter
93

Это в основном сводится к тому, являются ли ваши серверы petsили livestock.

Домашние животные получают индивидуальные имена. Они отличаются друг от друга, и мы заботимся об этих различиях. Когда кто-то заболевает, мы обычно стараемся вернуть его к здоровью. Традиционно серверы были домашними животными.

Скот получает номера. Они в основном идентичны, и какие есть различия, мы не заботимся и обычно стараемся свести к минимуму. Когда кто-то заболевает, мы откладываем его и получаем другой. Полностью виртуализированные серверы, особенно серверы IaaS, такие как AWS, являются домашним скотом.

В самых сложных средах у вас есть смесь. Например, ваши веб-серверы почти наверняка являются домашним скотом. Если вам нужно больше, вы раскрутите еще несколько с помощью стандартного конфига; если вам не нужно столько, вы выключаете. Ваши серверы баз данных, в некоторых конфигурациях, являются домашними животными. Там может быть много специальных настроек на каждом; Вы можете даже запустить их на голом железе вместо виртуализации.

Конечно, в любой среде вы можете назвать УСЛУГИ и обратиться к ним напрямую. В любом случае это лучшая практика; ваши разработчики не должны знать или заботиться о том, каково фактическое имя хоста сервиса. Имя хоста должно быть чисто рабочей деталью. Подумайте о кодировании информации, которая будет полезна вашему операционному персоналу в именах хостов - например, часто полезно указать, в каком центре данных находится сервер.

Thaeli
источник
22
Домашние животные или домашний скот - это хороший способ выразить это.
Майкл Хэмптон
5
Недавно я вновь нашел статью, в которой впервые увидел эту концепцию: gregarnette.com/blog/2012/05/cloud-servers-are-not-our-pets
Таэли,
Спасибо @Ian Я охотился в течение последнего дня за эту статью, SEO провал хе
Рудольф Олах
18

Это было рассмотрено здесь раньше ...

Моя рекомендация - это сочетание функциональных имен и мнемонических имен ...

Если вы пишете приложение, и оно должно быть адресовано ccts-logserver1, используйте это имя повсюду, но сделайте его CNAME или псевдонимом. Настоящее имя хоста может быть любым, каким вы хотите: фрукт или овощ, греческая мифология или персонаж Сейнфельда ... но это дает вам некоторую гибкость, когда вам нужно связать реальные функциональные имена, но при этом сохранить то, что люди могут запомнить.

Вспомните пример mango, когда сервер БД выходит из строя ... но заменяется, скажем, чем-то другим peach. Возможно существующие процессы и приложения нужно увидеть cmt-prod-db1. Вы можете менять системы, создавать их без конфликтов имен и поддерживать приложения (и разработчиков) счастливыми.

ewwhite
источник
4

Там, где я работаю, мы управляем несколькими сайтами, несколькими компаниями в разных городах. Для нас мнемонические имена не могут работать. Вместо этого мы используем сокращенную форму, которая описывает наши серверы. В нашем случае это хорошо работает, поскольку у нас есть клиенты, которые могут иметь несколько офисов в разных доменах (или один офис в нескольких доменах, или несколько офисов в одном домене, или все вышеперечисленное!)

Для нас информация содержит компанию / домен, город, функцию, номер. Так что для контроллера домена для компании, скажем, Cypress в Чикаго, это будет:

CYPRCHDOM001 (мы будем называть это главным DOM Cypress в разговоре)

CYPRCHSQL001 - это SQL-сервер, CYPRCHMGM001 - его управление (т. Е. Антивирус, резервные копии и т. Д.), А CYPRCHAPP001 - сервер смешанных приложений. Легко запомнить, легко сортировать, легко учить.

Бессонница
источник
1
Итак, как вы помните, какие приложения работают на CYPRCHAPP001, а не на CYPRCHAPP003? Я признаю, что это также проблема с многоэлементными именами, но если вы собираетесь использовать какие-то функциональные имена, они могут быть и конкретными.
CVn
2
@ MichaelKjörling Мелкие особенности того, что находится на сервере, не принадлежат ни одному имени, они принадлежат какой-то документации. Если кто-то должен знать, что работает на CYPRCHAPP001, он читает документацию. Помимо перемещения приложений, CYPRCHAPP001_PointofSale_Payroll_HRSoftware-etc и т. Д. Будут ошибочными, когда компания переместит свое программное обеспечение для расчета заработной платы в размещенное решение.
Вульфхарт
2
@Wulfhart Я согласен с вашей точкой, но что плохого в записи CNAME для pointofsale, payrollи т.д.? Таким образом, никому, кроме системных администраторов, не нужно заботиться о том, где именно работает программа расчета заработной платы; для всех остальных это просто работает. Хотите переместить что-то в другой центр обработки данных? Совершенно никаких проблем. Хотите переместить базу данных системы торговой точки на собственный выделенный сервер? Просто обновите pointofsale-databaseCNAME, чтобы указать новое местоположение. И так далее.
CVn
1
Предположим, вам нужно заменить компьютер: после того, как вы построили CYPRCHSQL002 и протестировали его, вы просто удалите имя CYPRCHSQL001 (не подлежит замене), или вы переименуете 002 в 001 после удаления старого 001 или чего-то еще еще?
Никгрим
@ MichaelKjörling Мне кажется, это отличная идея. Под «спецификой нет имени» я подразумевал не имя хоста машины.
Вульфхарт
2

Единственное требование к именам хостов - они должны быть уникальными в сети.

Смысл не должен быть связан только с функцией сервера. Местоположение может быть очень полезным, если вам приходится иметь дело с физическими устройствами. Знание, является ли устройство виртуальным или физическим, также может быть полезным. Возможность определить разницу между сетевым устройством, сервером Linux или Windows-боксом может быть очень полезна, когда нужно выяснить, какой инструмент использовать для входа в систему.

То, как мы справляемся с этим, состоит в том, чтобы попытаться вставить эту информацию в имя устройства следующим образом:

L или T - Live или тест P или V - физический или виртуальный S или N - сервер или сеть (у нас нет серверов Linux) последовательный номер для обеспечения уникальности Трехбуквенный код страны ISO 3166-1, указывающий, где находится устройство расположен.

Затем мы используем CNAMES в DNS для сопоставления различных имен сервисов с именем хоста.

У меня смешанные чувства по этому поводу. Это, безусловно, экономит время на поиск нужного устройства. С другой стороны, гораздо сложнее вспомнить, что делает данный сервер при представлении его имени хоста, по сравнению с нашей предыдущей системой, которая использовала драгоценные камни. Драгоценные камни не имели никакого значения, но их было легко запомнить, потому что каждый мог создавать свои собственные связи.

Я полагаю, что единственным советом было бы остановиться на одной схеме, поскольку наибольшая путаница возникла, когда мы перешли от одной системы к другой.

dunxd
источник
Я не согласен с этим: «Знание, является ли устройство виртуальным или физическим, также может быть полезным» в контексте обсуждения имен . Конечно, это полезная информация, но это не первое, что вам нужно знать о сервере, читая его имя. Кроме того, P2V или V2P либо нарушают вашу схему, либо требуют переименования сервера, что может нарушить другие функции.
mfinni
1
По моему опыту, P2V или V2P ломает целую кучу вещей, и их следует избегать, где это возможно - мы делаем, поэтому это не проблема с нашим соглашением об именах. Соглашение об именах должно соответствовать требованиям того, кто его разработал - в организации, в которой я работаю, его разработала команда, которая управляет всеми серверами и сетевым оборудованием, и они хотят иметь возможность рассказать о вышеперечисленных вещах. Это может быть неправильно для вас, но тогда все открыто для обсуждения. Единственное техническое требование - это уникальность.
dunxd