¿Qué tan similares deben ser los entornos de PreProd y Prod?

10

Recientemente estuve en un proyecto y durante el lanzamiento, nos dimos cuenta de que no funcionaba en Producción. Funciona en todos los demás entornos, pero debido a que tenemos un equipo de lanzamiento separado y no podemos configurar los servidores y los entornos nosotros mismos, no tenemos visibilidad de la configuración en ellos.

Sospechamos que Prod tiene algunos permisos de usuario en su cuenta o configuración de IIS que son diferentes, por lo que estamos trabajando ahora.

Así que creo que todo esto ha sido una experiencia de aprendizaje para mí y no quiero que se repita lo mismo otra vez. Me gustaría preguntar, ¿qué tan diferentes deberían ser estos entornos? Siempre pensé que PreProd debería ser una copia idéntica al entorno de Prod usando una copia de la misma base de datos, usando una copia de la misma cuenta de usuario, debería instalarse en los mismos servidores, etc.

Pero, ¿hasta dónde debo llevarlo? Si el sitio web está orientado externamente, ¿PreProd debería estar orientado externamente? ¿Qué sucede si el sitio web tiene componentes que no requieren una cuenta de usuario o contraseña para navegar? ¿Todavía está bien exponerlo al mundo exterior?

RoboShop
fuente
En todas partes donde trabajé, Pre-Prod era una copia directa de Production, con la excepción de que las bases de datos tendrían una semana de antigüedad.
Nickz
@ Nick: No me refiero solo a la base del código, me refiero a la configuración completa de todo el entorno.
RoboShop

Respuestas:

6

Sin duda, debería probar en un entorno que sea idéntico a sus servidores de producción en la medida de lo posible. Si no lo hace, no está probando lo que usarán sus clientes. Por lo menos, necesita un entorno de este tipo para probar los informes de errores.

Obviamente habrá cosas que no querrás que sean idénticas: los enlaces a los sistemas de pago te vienen a la mente, pero debes burlarte de ellos como si fueran reales . También hay cosas que no puede replicar: la escala del sistema.

Es posible que desee probar a través de una URL externa; de nuevo, está probando lo que verán sus usuarios. Además, las pruebas a través de una URL externa utilizarán la red de manera diferente al uso interno del sistema. Los permisos (por ejemplo) desempeñarán un papel al igual que el ancho de banda disponible, los cortafuegos, etc. Todos los usuarios se enfrentarán, pero los omitirá si accede directamente al sistema.

Sin embargo, no veo un problema con los componentes que no requieren una cuenta y contraseña. Si no necesita una contraseña, entonces no es vital / sensible, si es sensible, ¿por qué no tiene una contraseña?

ChrisF
fuente
Wow, esa es una respuesta tonta. Entonces, en su entorno de prueba, si realiza una compra, ¿debería cargar la tarjeta de crédito y enviar lo que compró? Si el entorno de producción consta de 150 servidores, el entorno de prueba también debería? Hubiera dicho "obviamente" que debe haber diferencias entre prod y test, pero no fue obvio para ChrisF.
Malvolio
@Malvolio - no. No quise decir eso en absoluto. Estaba pensando más en los puntos planteados en la pregunta con permisos, conexiones, etc.
ChrisF
11

Creo que la mejor práctica para esto es el enfoque de Blue Green Deployment, acuñado por Jez Humble y David Farley en su libro Continuous Delivery y descrito por Martin Fowler en su publicación de blog Blue Green Deployment .

La premisa es muy simple. Del post de Martin Fowler:

Despliegue Verde Azul

El enfoque de implementación azul-verde ... [asegura] que tenga dos entornos de producción, lo más idénticos posible. En cualquier momento, uno de ellos, digamos azul para el ejemplo, es en vivo. A medida que prepara una nueva versión de su software, realiza su etapa final de prueba en el entorno verde. Una vez que el software funciona en el entorno verde, cambia el enrutador para que todas las solicitudes entrantes vayan al entorno verde: el azul ahora está inactivo.

La implementación azul-verde también le brinda una forma rápida de retroceder: si algo sale mal, cambie el enrutador a su entorno azul.

Este enfoque resolvería su problema de no tener entornos idénticos de preproducción y producción, así como también optimizar su estrategia de implementación.

Paddyslacker
fuente
1+ para el diagrama genial
Nickz
mmm no estoy seguro de mantener la base de datos sincronizada. Seria dificil. ¿Qué sucede si la transacción se realizó a través de su servidor de preprod? ¿Eso se reflejaría en la producción db?
RoboShop
Está escrito, eso es muy caro. Debe duplicar todo el hardware necesario para la producción en vivo solo para la prueba. Pero sí, genial diagrama.
Malvolio
1
TECNOLOGÍA, n. En un tribunal inglés, un hombre llamado Home fue juzgado por calumnia al acusar a su vecino de asesinato. Sus palabras exactas fueron: "Sir Thomas Holt tomó una cuchilla y golpeó a su cocinero en la cabeza, de modo que un lado de la cabeza cayó sobre un hombro y el otro lado sobre el otro hombro". El acusado fue absuelto por instrucción de la corte, los jueces sabios sostuvieron que las palabras no acusaron de asesinato, ya que no afirmaron la muerte del cocinero, eso es solo una inferencia. - Ambrose Bierce
Malvolio
1
Sí, técnicamente, no necesito duplicar el hardware, pero incluso si esquivas ese requisito jugando con la virtualización y demás, (a) asignas recursos, como ancho de banda y CPU, a cada entorno, lo que tendría el mismo costo que duplicar hardware o (b) compartir recursos, lo que significa que sus problemas de prueba podrían afectar su sistema de producción.
Malvolio
3

Nuestro entorno de preproducción final es simplemente uno de los servidores en vivo sacados del balanceador de carga. Implementamos nuestra compilación de preproducción (que es básicamente idéntica a la compilación en vivo, aparte de las cadenas de conexión de la base de datos y un par de otros cambios de configuración) y lo probamos. Si eso funciona bien, implementamos el código en vivo, y finalmente si eso demuestra que estamos bien, devolvemos el servidor al equilibrador de carga e implementamos la compilación de producción en los servidores restantes uno por uno.

FinnNk
fuente
1

Deben ser lo más similares posible, para que pueda identificar los problemas en cualquier punto del sistema, con la posible excepción de la imposibilidad de escalar. Si es posible, la única diferencia entre su entorno de producción y el entorno de preproducción / preparación / prueba sería el tamaño: esperaría que un entorno de producción constara de muchas más máquinas en un entorno a gran escala. Incluso debe reflejar las dedicaciones de las máquinas que tiene, como servidores de bases de datos, servidores web, etc.

Sin embargo, una replicación exacta podría no ser posible bajo su presupuesto actual. Cuanto más cerca se encuentre, más efectivas serán las pruebas y los problemas menos probables surgirán durante un impulso a la producción.

Tomo una postura diferente a la de ChrisF si este entorno debe ser público. Yo digo que no debería ser. Optaría por ejecutar una copia de las bases de datos reales, o al menos una copia de un subconjunto de las bases de datos en vivo reales y un entorno interno. De esta forma, puede probar datos reales y realistas y no preocuparse por los agujeros de seguridad que conducen a una fuga. Por supuesto, puede desinfectar los datos, pero eso podría eliminar algunos "datos sucios" del entorno que podrían conducir al descubrimiento de un defecto en un sistema en vivo.

Thomas Owens
fuente
1
Si está haciendo pruebas de seguridad, acepto que no debería ser público, pero es posible que desee que sea para la prueba de aceptación final (por ejemplo).
ChrisF
Ese es un punto válido, también. Por lo general, estoy más centrado en la seguridad que en la usabilidad, pero si desea exponer una nueva versión de su sistema para las pruebas de aceptación (tal vez por parte de los clientes o como parte de una versión beta pública), entonces sí, una versión pública Se requeriría el medio ambiente.
Thomas Owens
Sí, solíamos tener un competidor que probaba todas sus cosas en una computadora pública durante una semana más o menos antes de salir en vivo. Nunca descubrieron cómo siempre sacamos características justo antes de que lo hicieran ...
Malvolio
1

En todos los lugares donde trabajé bancos, telecomunicaciones, etc., la producción previa era una copia directa de la producción, excepto que la base de datos tendría una semana de antigüedad. Fue un proceso masivo para mantener los datos a través de pre-prod, pero se consideró esencial para las empresas para las que trabajé que implementaron pre-prod.

En la sección de banca de la UA, el gobierno multa a los bancos por fallas en el servicio, por ejemplo, cajeros automáticos de sitios web, etc., caen cada minuto. No es raro escuchar que un equipo de desarrollo / prueba fue despedido por un incidente. Pre-prod no es para todas las empresas o procesos de desarrollo, pero es esencial para algunos.

Nickz
fuente
3
"No es raro escuchar que un equipo de desarrollo / prueba fue despedido por un incidente", sí, eso ayudará. Las palizas continuarán hasta que la moral mejore.
Malvolio