Pregunta

Cuando implementas cambios en un sitio web activo, ¿cómo haces para comprobar que el vivir ¿El sistema funciona correctamente?¿Qué herramientas utilizas?¿Quien lo hace?¿Bloquea el acceso al sitio durante el período de prueba?¿Qué cantidad de tiempo de inactividad es aceptable?

¿Fue útil?

Solución

Tiendo a hacer todas mis pruebas en otro entorno (¡no en el vivo!).Esto me permite enviar las actualizaciones al sitio en vivo sabiendo que el código debería funcionar bien, y simplemente hago pruebas de cordura en los datos en vivo; me aseguro de no haber olvidado un archivo en alguna parte o que algo extraño haya salido mal.

Entonces, pruebas adecuadas en un entorno de prueba o de preparación, luego simplemente una verificación trivial de cordura.No hay necesidad de tiempo de inactividad.

Otros consejos

Ya hay muchos buenos consejos.

Como la gente ha mencionado, si no tiene un solo punto involucrado, es sencillo implementar cambios gradualmente actualizando un servidor de aplicaciones a la vez.Pero rara vez es así, así que ignorémoslo y centrémonos en las partes difíciles.

Por lo general, hay una base de datos que es común a todo lo demás.Eso significa tiempo de inactividad para todo el sistema. ¿Cómo se minimiza eso?

Automatización.Script de todo el procedimiento de implementación.Esto (especialmente) incluye cualquier cambio en el esquema de la base de datos.Esto (especialmente) incluye cualquier migración de datos que necesite entre versiones del esquema.

Control de calidad.Asegúrate de que haya pruebas.Pruebas de aceptación automatizadas (lo que el usuario ve y espera desde una perspectiva de experiencia/lógica empresarial).Considere tener cuentas de prueba en el sistema de producción que pueda crear mediante scripts para probar actividades de solo lectura.Si no interactúa con otros sistemas externos, considere realizar actividades de escritura también.Es posible que necesite filtrar la actividad de la cuenta de prueba en ciertas partes del sistema, especialmente si se ocupan de dinero y contabilidad.Los contadores de granos se molestan, por buenas razones, cuando los granos no coinciden.

Ensayar.Implemente en un entorno de prueba que sea lo más idéntico posible al de producción.Haga esto con volúmenes de datos de producción y datos de producción.Necesitas sentir cuánto tiempo lleva una mesa de alter.Y debe verificar que una tabla de modificación funcione estructuralmente y con todas las claves externas en los datos reales.

Si tiene volúmenes de datos masivos, los cambios de esquema llevarán tiempo.Quizás más tiempo del que puedas permitirte estar abajo.Una solución es utilizar migraciones de datos por fases, de modo que el cambio de esquema se complete con datos "recientes" o "actuales" (digamos de uno o tres meses de antigüedad) durante el tiempo de inactividad, y los datos de los cinco años restantes pueden llegar lentamente después de que vuelva a estar en línea.Para el usuario final, las cosas se ven bien, pero no se puede acceder a algunas funciones hasta dentro de un par de horas/días/lo que sea.

En el trabajo, pasamos un tiempo con el código congelado en el entorno de prueba.Luego, después de algunas semanas de aviso, desactivamos el sitio a la medianoche del viernes, trabajamos toda la noche implementando y validando, y lo instalamos el sábado a última hora de la mañana.Las estadísticas de tráfico nos mostraron que este era el mejor momento para hacerlo.

Si tiene un conjunto de servidores con equilibrio de carga, podrá desconectarlos uno por uno por separado y actualizarlos.¡Sin tiempo de inactividad para los usuarios!

Tenga una imagen linda y encantadora y/o una página de respaldo.Algunos sitios implementan juegos simples de JavaScript para mantenerte ocupado mientras esperas la actualización.

Por ejemplo, ballena fallida.

-Adán

En el último lugar donde trabajé, QA realizaba pruebas en el Entorno de QA.Cualquier problema importante se solucionaría, probaría y verificaría antes de implementarlo.

Una vez que el control de calidad certificó la compilación, el equipo de soporte de producción envió el código al entorno de prueba donde el cliente mira el sitio y verifica que todo esté como lo desea.

El lanzamiento de la producción real se produce fuera del horario laboral (después de las 9 p. m.si se trata de un empujón nocturno de urgencia, o a partir de las 5 de la mañana.- 8 a.m.si se trata de una implementación programada normalmente).

El sitio está alojado en varios servidores, cuya carga se equilibra mediante un equilibrador de carga F5:

  • Un par de servidores se retiran de producción,
  • El código está instalado y
  • Se realiza una verificación superficial en los servidores antes de volver a colocarlos en el grupo.

Esto se repite hasta que todos los servidores se actualizan al código más reciente y permite que el sitio permanezca activo todo el tiempo.

Este proceso es ideal, pero hay casos en los que también es necesario actualizar la base de datos.Si este es el caso, entonces hay dos opciones, dependiendo de si la nueva base de datos dañará el sitio o no.

Si la nueva base de datos es incompatible con la interfaz existente, no tiene otra opción que tener un período de tiempo en el que el sitio no funciona.

Pero si la nueva base de datos es compatible con la interfaz existente, aún puede enviar el código sin ningún tiempo de inactividad real, pero esto requiere que haya dos servidores de bases de datos de producción.

  • Todo el tráfico se enruta a la segunda base de datos y se extrae el primer servidor de base de datos.
  • La primera base de datos se actualiza y, una vez completada la verificación, se vuelve a poner en producción.
  • Todo el tráfico se enruta a la primera base de datos y se extrae la segunda base de datos.
  • La segunda base de datos se actualiza y, una vez completada la verificación, se vuelve a poner en producción.
  • El siguiente paso es realizar las actualizaciones parciales como se describe anteriormente.

Así que para resumir:

  • Cuando implementas cambios en un sitio web en vivo, ¿cómo haces para verificar que el sistema en vivo esté funcionando correctamente? En el mejor de los casos, esto se hace de forma incremental.

  • ¿Qué herramientas utilizas? Verificaciones manuales para verificar que el código esté instalado correctamente junto con algunas pruebas automatizadas básicas, utilizando cualquier herramienta de automatización.Usamos Selenium IDE.

  • ¿Quien lo hace? El DBA realiza actualizaciones de la base de datos, el soporte técnico/administradores del sistema empujan/extraen los servidores e instalan el código, y el soporte de control de calidad o producción realiza las pruebas manuales y/o ejecuta las pruebas automatizadas.

  • ¿Bloquea el acceso al sitio durante el período de prueba? Si es posible, esto debe evitarse a toda costa, especialmente, como mencionó anteriormente Gilles, si se trata de un sitio pago.

  • ¿Qué cantidad de tiempo de inactividad es aceptable? El tiempo de inactividad debe limitarse a los momentos en los que es menos probable que los usuarios utilicen el sitio y debe realizarse en menos de 3 horas.
    Nota: 3 horas es muy generoso.Después de practicar y ensayar, como mencionó jplindstrom, el equipo tendrá todo el proceso controlado y podrá entrar y salir en, a veces, menos de una hora.

¡Espero que esto ayude!

Algo de eso depende de si también estás actualizando una base de datos.En el pasado, si se actualizaba la base de datos, cerrábamos el sitio durante un período de mantenimiento planificado (y publicado), generalmente algo fuera de horario donde el impacto era mínimo.Si la actualización no involucra la base de datos, entonces, en un entorno de carga equilibrada, sacaríamos 1 caja de la mezcla, la implementaríamos y la probaríamos.Si eso tuvo éxito, se incluyó en la mezcla y la otra caja (suponiendo que haya 2 cajas) se sacó y se actualizó/probó.

Nota:NO estamos probando el código, solo que la implementación se realizó sin problemas, por lo que el tiempo de inactividad fue mínimo.Como se mencionó, el código ya debería haber pasado las pruebas en otro entorno.

En mi humilde opinión, los tiempos de inactividad prolongados (horas) son aceptables para un sitio gratuito.Si educa lo suficiente a sus usuarios, comprenderán que es una necesidad.Tal vez darles algo con lo que jugar hasta que el sitio web vuelva a funcionar (p. ej.juego flash, transmisión en vivo por cámara web que muestra al equipo de desarrollo en el trabajo, etc.).Para un sitio web al que la gente paga para acceder, mucha gente perderá el tiempo con quejas si les proporciona tiempo de inactividad con regularidad.Evitaría el tiempo de inactividad como una plaga e implementaría actualizaciones muy lenta y cuidadosamente si estuviera ejecutando un servicio que cobra a los usuarios.

En mi configuración actual tengo un sitio web secundario conectado a la misma base de datos y caché que la copia en vivo para probar mis cambios.

También tengo varios scripts de "observador de páginas" ejecutándose en trabajos cron que utilizan expresiones regulares para comprobar que el sitio web muestra las páginas clave correctamente.

La respuesta es que depende".En primer lugar, en el tipo de entorno en el que te estás liberando.¿Es un sitio web del tipo "hola, mundo" en un host compartido en algún lugar, o un google.com con medio millón de servidores?¿Normalmente hay un usuario por día, o más como un par de millones?¿Está publicando HTML/CSS/JPG o hay un gran backend complicado con servidores SQL, servidores de nivel medio, cachés distribuidos, etc.?

En general, si puede permitirse el lujo de tener entornos separados para desarrollo, control de calidad, puesta en escena y producción, téngalos.Si tiene los recursos, cree el ecosistema para que pueda crear el paquete instalable completo con 1 (un) clic.Y asegúrate de que lo mismo La instalación binaria se puede instalar exitosamente en DEV/QA/STAGE/PROD con otro solo clic...Hay toneladas de cosas escritas sobre este tema y debes ser más específico con tu pregunta para obtener una respuesta razonable.

Ejecute su servidor principal en un puerto distinto al 80.Utilice un servidor liviano (p. ej.nginx) delante de él en el puerto 80.Cuando actualice su sitio, inicie otra instancia en un nuevo puerto.Prueba.Cuando esté satisfecho de que se ha implementado correctamente, edite su archivo de configuración de proxy y reinícielo.En el caso de nginx, esto da como resultado cero tiempo de inactividad o solicitudes fallidas, y también puede proporcionar mejoras de rendimiento con respecto a la opción de alojamiento más típica solo de Apache.

Por supuesto, esto no sustituye a un servidor provisional adecuado, es simplemente una forma "educada" de realizar la transferencia con recursos limitados.

Para probar todo lo mejor posible en un sitio de desarrollo separado antes de salir en vivo, uso Selenium (un probador de página web) para ejecutar todas las partes navegables del sitio, llenar los valores ficticios en formularios, verifique que esos valores aparezcan en el derecho correcto Lugares como resultado, etc.

Es lo suficientemente potente como para verificar muchos javascript o cosas dinámicas también.

Luego, una ejecución rápida con Selenium nuevamente después de actualizar el sitio en vivo verifica que la actualización funcionó y que no faltan enlaces ni errores de base de datos.

Me ha salvado varias veces al atrapar errores sutiles que me habría perdido simplemente pasar manualmente.

Además, si coloca el sitio en vivo detrás de algún tipo de "proxy inverso" o equilibrador de carga (si es grande), eso hace que sea fácil volver a la versión anterior si hay problemas.

La única forma de hacerlo transparente para los usuarios es colocarlo detrás de un proxy con carga equilibrada.Desactivas un servidor mientras actualizas otro servidor.Luego, cuando haya terminado de actualizar, coloque el que actualizó en línea y elimine el otro.Así es cómo lo hacemos.

Si tiene algún tipo de compilación "beta", no la implemente en el servidor en vivo.Si tiene un "sitio activo y ocupado", es probable que la gente lo golpee y rompa algo.

Esta es una configuración típica de alta disponibilidad; para mantener la alta disponibilidad necesitará 3 servidores como mínimo.2 en vivo y 1 servidor de prueba.Además de otros servidores adicionales si desea tener una base de datos dedicada o algo así.

Cree una clase de host e implemente su sitio en vivo en esa clase de host.Por clase de host me refiero a un conjunto de hosts donde se configura el equilibrio de carga y es fácil agregar y eliminar hosts de la clase.

Cuando haya terminado con la prueba beta y esté listo para la producción, no es necesario cerrar su sitio, simplemente elimine algunos hosts de la clase de host de producción, agréguelos en una nueva clase de host e implemente su último código allí y pruebe correctamente.Una vez que esté seguro de que todo funciona bien, mueva todos sus hosts gradualmente al nuevo y señale la nueva clase de host como clase de host de producción.O puede usar lo mismo que estaba usando inicialmente, la idea detrás de esta actividad es asegurarse de que está probando su implementación en las cajas de producción, donde se ejecutará su sitio después de la implementación, porque los problemas de implementación dan miedo y son difíciles de depurar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top