Elegir entre nombres de host significativos y sin sentido [cerrado]

79

Asuma un entorno con un clúster gestionado por títeres de diferentes servidores: hardware, software, sistemas operativos, virtuales / dedicados, etc.

¿Elegiría nombres de host significativos (mysqlmaster01..99, mysqlslave001..999, vpnprimary, vpnbackup, etc.) o preferiría nombres de host sin sentido, como los personajes de un libro o una película?

El problema que veo con nombres de host significativos es que los nombres generalmente representan un solo servicio y si un servidor tiene más de un propósito, se vuelve realmente desordenado (especialmente si los roles del servidor cambian con frecuencia).

¿No está asignando un nombre de servicio a una dirección IP y manteniendo esa asignación lo que se supone que debe hacer DNS?

¿Cuáles son las ventajas y los inconvenientes de ambos enfoques y qué problemas reales ha tenido que abordar con el enfoque que eligió?

Keymone
fuente
10
Si controlas DNS, siempre puedes hacer ambas cosas.
jscott
16
Lo dejaré aquí: RFC 1178
gelraen
Aunque superficialmente es una pregunta basada en la opinión, las respuestas reales están basadas en hechos con encuestas empíricas y en función de la función cognitiva humana (cómo el cerebro humano recuerda las cosas). En mi opinión, esta pregunta debería reabrirse.
dotancohen

Respuestas:

98

Érase una vez tuve la oportunidad de decidir sobre un esquema de nombres. Así que di vueltas y pregunté a mis desarrolladores, quienes, después de todo, eran las personas que tenían que trabajar con estos nombres en el día a día, si preferían los nombres funcionales (es decir, nombres que representan, de alguna forma codificada, el propósito de la máquina) o nombres mnemotécnicos (es decir, nombres extraídos de algún esquema de nombres humanos preexistente, que no contenía contenido implícito sobre el propósito de la máquina).

De 38 desarrolladores, 37 nombres mnemónicos preferidos; solo uno prefiere los nombres funcionales. Así que los nombré a todos después de los ríos (hay una gran cantidad de nombres posibles, y muchos de ellos son cortos, fáciles de recordar y rápidos de escribir).

El cerebro humano está bastante bien diseñado para atribuir significado a los nombres. Si proporciona nombres memorables, las personas recordarán rápidamente para qué se usan esos nombres y los usarán. Si utiliza nombres extraídos de un trasfondo común (por ejemplo, ríos, elementos, estrellas, condados, bebidas, se le ocurre la idea), ayuda a las personas a reconocer de inmediato el nombre de host de una empresa cuando lo encuentran; de lo contrario, declaraciones como "todo el correo electrónico terminó betelgeuse" pueden ser un poco confusas).

Por el contrario, mis desarrolladores sintieron que habían tenido trabajos previos realmente difíciles de recordar exactamente lo que pr1ms001era.

Pero debo agregar que utilizamos CNAME en el DNS interno para proporcionar un nombre funcional a la asignación de nombres mnemotécnicos, por lo que si realmente le resultó más fácil recordar que el servidor de correo principal en el primer clúster en el sitio de relaciones públicas era pr1ms001, entonces el DNS lo haría hacerle saber que eso era actualmente orwell. Además, eso nos permite tener muchos nombres funcionales por máquina, por lo que siempre que use el nombre funcional relevante para la función en la que estaba trabajando, podría estar seguro de que pr1imap001siempre apuntaría al servidor IMAP, incluso si moviéramos esa funcionalidad de orwella rhine. Y cuando hudsonmurió, podríamos cambiar el nombre del reemplazo sin afectar las funciones operativas, de modo que nunca tuviéramos el "¿quieres decir nuevo hudsono viejo hudson?" Confusión.

MadHatter
fuente
77
Puede pensar eso, pero mis desarrolladores dijeron que el esquema mnemónico era mejor independientemente de si se comunicaba o no mucho más, porque todos construyeron sus propias tablas de estado interno de lo que era dónde, y ese tipo de memoria es más fácil de construir sobre nombres que Al cerebro humano le gusta recordar.
MadHatter
11
Deberías haberles puesto el nombre de volcanes en Islandia.
Chloe
1
+1 para "charco de ríos";)
Konerak
2
Esta es una idea increíble, y la estoy robando.
SpacemanSpiff
1
Estoy de acuerdo en que nombrar servidores de esta manera es más trabajo con un sistema de autocompilación, pero noto que el punto de construirlos es que otras personas los usen, y los datos anteriores son de las personas que tuvieron que usarlos . Puede ser que lo que quieren ha cambiado, pero creo que nuestras decisiones sobre la administración del servidor deberían basarse en algo más que lo que facilita nuestro trabajo.
MadHatter
93

Esto se reduce en gran medida a si sus servidores son petso livestock.

Las mascotas obtienen nombres individuales. Son distintos entre sí, y nos preocupamos por esas diferencias. Cuando uno se enferma, generalmente tratamos de curarlo para que recupere la salud. Tradicionalmente, los servidores han sido mascotas.

El ganado obtiene números. En su mayoría son idénticos, y qué diferencias hay, no nos importan y generalmente tratamos de minimizar. Cuando uno se enferma, lo dejamos y obtenemos otro. Los servidores totalmente virtualizados, especialmente los servidores IaaS como AWS, son ganado.

En los entornos más complejos, tienes una mezcla. Sus backends web, por ejemplo, son casi seguramente ganado. Si necesita más, puede girar un poco más con la configuración estándar; Si no necesita tantos, apague algunos. Sus servidores de bases de datos, en algunas configuraciones, son mascotas. Puede haber mucha configuración especial en cada uno; incluso puede ejecutarlos en metal desnudo en lugar de virtualización.

Por supuesto, en cualquier entorno, puede nombrar SERVICIOS y abordarlos directamente. Esta es una mejor práctica en cualquier caso; sus desarrolladores no deberían necesitar saber o importar cuál es el nombre de host real de un servicio. El nombre de host debe ser un detalle puramente operativo. Piense, entonces, en codificar información que sea útil para su personal de operaciones en los nombres de host; por ejemplo, a menudo es útil denotar en qué centro de datos se encuentra un servidor.

Thaeli
fuente
22
Mascotas o ganado: esa es una buena manera de decirlo.
Michael Hampton
55
Recientemente volví a encontrar el artículo que vi por primera vez este concepto en: gregarnette.com/blog/2012/05/cloud-servers-are-not-our-pets
Thaeli
Gracias @Ian He estado buscando el último día para ese artículo, SEO falló jeh
Rudolf Olah
18

Esto ha sido cubierto aquí antes ...

Mi recomendación es una combinación de nombres funcionales y nombres mnemotécnicos ...

Si está escribiendo una solicitud y necesita una dirección ccts-logserver1, use ese nombre en todas partes, pero conviértalo en un CNAME o un alias. El verdadero nombre de host puede ser lo que quieras: una fruta o verdura, la mitología griega o el personaje de Seinfeld ... pero te da cierta flexibilidad cuando necesitas asociar nombres funcionales reales, pero conserva algo que la gente pueda recordar.

Piense en el ejemplo donde mango, el servidor de base de datos falla ... pero se reemplaza con otra cosa, digamos peach. Quizás los procesos y aplicaciones existentes necesitan ver cmt-prod-db1. Puede intercambiar los sistemas, construirlos sin conflictos de nombres y mantener felices a las aplicaciones (y desarrolladores).

ewwhite
fuente
4

Donde trabajo gestionamos múltiples sitios, múltiples compañías, en múltiples ciudades. Para nosotros, los nombres mnemotécnicos no pueden funcionar. En su lugar, usamos un formulario abreviado que describe nuestros servidores. Esto funciona bien en nuestro caso, ya que tenemos algunos clientes que pueden tener varias oficinas en diferentes dominios (o una sola oficina en múltiples dominios, o varias oficinas en el mismo dominio, ¡o todo lo anterior!)

Para nosotros, la información contiene Compañía / Dominio, ciudad, función, número. Entonces, para un controlador de dominio para una compañía, digamos Cypress en Chicago sería:

CYPRCHDOM001 (Nos referiríamos a esto como DOM principal de Cypress en la conversación)

CYPRCHSQL001 sería su servidor SQL, CYPRCHMGM001 sería su administración (es decir, antivirus, copias de seguridad, etc.), y CYPRCHAPP001 sería un servidor de aplicaciones mixtas. Fácil de recordar, fácil de clasificar, fácil de enseñar.

Insomnio
fuente
1
Entonces, ¿cómo recuerda qué aplicaciones se ejecutan en CYPRCHAPP001 en lugar de CYPRCHAPP003? Admito que también es un problema con los nombres mnenómicos, pero si buscas algún tipo de nombre funcional, también podría ser específico.
un CVn
2
@ MichaelKjörling Los detalles de grano fino de lo que hay en un servidor no pertenecen a un nombre, pertenecen a algún tipo de documentación. Si alguien necesita saber qué se está ejecutando en CYPRCHAPP001, lee la documentación. Además del cambio de aplicaciones, CYPRCHAPP001_PointofSale_Payroll_HRSoftware-etc será un nombre inapropiado cuando la compañía traslade su software de nómina a una solución alojada.
Wulfhart
2
@Wulfhart Estoy de acuerdo con su punto, pero ¿qué hay de malo en tener CNAMEs para pointofsale, payroll, etc.? De esa manera, nadie más que los administradores del sistema deben preocuparse exactamente por dónde se ejecuta el software de nómina; para todos los demás, simplemente funciona. ¿Quiere mover algo a otro centro de datos? No hay problema. ¿Desea mover la base de datos del sistema de punto de venta a su propio servidor dedicado? Simplemente actualice el pointofsale-databaseCNAME para que apunte a la nueva ubicación. Y así.
un CVn
1
Supongamos que necesita reemplazar una máquina: una vez que haya construido CYPRCHSQL002 y lo haya probado, ¿simplemente retira el nombre CYPRCHSQL001 (nunca será reemplazado), o cambia el nombre de 002 a 001 después de haber eliminado el viejo 001, o algo así? ¿más?
nickgrim
@ MichaelKjörling Eso me parece una gran idea. Por "los detalles no pertenecen a un nombre" quise decir que no está en el nombre de host de la máquina.
Wulfhart
2

El único requisito para los nombres de host es que deben ser únicos en la red.

El significado no solo tiene que ver con la función de los servidores. La ubicación puede ser muy útil si tiene que lidiar con dispositivos físicos. Saber si un dispositivo es virtual o físico también puede ser útil. Ser capaz de distinguir la diferencia entre un dispositivo de red, un servidor Linux o un cuadro de Windows puede ser muy útil cuando se trata de averiguar qué herramienta usar para iniciar sesión.

La forma en que lo manejamos es tratar de poner esta información en el nombre del dispositivo de la siguiente manera:

L o T - Live o Test P o V - Físico o virtual S o N - Servidor o Red (no tenemos ningún servidor Linux) un número secuencial para garantizar la unicidad Un código de país ISO 3166-1 de tres letras que indica dónde está el dispositivo se encuentra.

Luego usamos CNAMES en DNS para asignar varios nombres de servicios al nombre de host.

Tengo sentimientos encontrados sobre esto. Sin duda, ahorra tiempo al tener que buscar dónde se encuentra un determinado dispositivo. Por otro lado, es mucho más difícil recordar lo que hace un servidor dado cuando se le presenta su nombre de host, en comparación con nuestro sistema anterior que usaba piedras preciosas. Las piedras preciosas no implicaban ningún significado en absoluto, pero eran fáciles de recordar porque cada persona podía crear sus propias conexiones.

Supongo que el único consejo sería establecer un esquema ya que la mayor confusión surgió cuando hicimos la transición de un sistema a otro.

dunxd
fuente
No estoy de acuerdo con esto: "Saber si un dispositivo es virtual o físico también puede ser útil" en el contexto de una discusión de nombres . Por supuesto, es información útil, pero no es lo primero que necesita saber sobre un servidor al leer su nombre. Además, P2V o V2P rompen su esquema o requieren cambiar el nombre del servidor, lo que puede romper otras cosas.
mfinni
1
En mi experiencia, P2V o V2P rompen un montón de cosas y deben evitarse siempre que sea posible; lo hacemos, por lo tanto, no es un problema con nuestra convención de nomenclatura. La convención de nomenclatura debe cumplir con los requisitos de quien la diseñó: en la organización en la que trabajo fue diseñada por el equipo que administra todos los servidores y equipos de red, y quieren poder contar las cosas anteriores. Puede que no sea adecuado para usted, pero todo está abierto a debate. El único requisito técnico es la singularidad.
dunxd