viernes, 3 de febrero de 2017

93. DevOps (2)

Ya hemos platicado acerca de DevOps, que son una serie de mejores practicas que nos permiten en este mundo vertiginoso que es la tecnología, poder tener desarrollos que cumplan en tiempo y forma con las necesidades planteadas por el cliente.

Una idea debe explotarse lo mas rápidamente posible, por que esta puede perder su vigencia, hay que aprovechar la novedad, la notoriedad para que una idea crezca, sin embargo, si una aplicación es de mala calidad, aunque la idea sea buena, la aplicación puede perderse y olvidarse, hoy en día los usuarios no dan segundas oportunidades.

En un desarrollo no empresarial, el amor es a primera vista, o me gusta me enamora y me atrapa para que regrese continuamente a la aplicación, o simplemente la desecho y nunca me vuelvo a acordar de ella.

Un error debe ser corregido de la misma forma, ágil, ya no puedo darme el lujo de dejar una aplicación fuera de línea por periodos de tiempo muy altos.

Estamos en un mundo que realmente es 24*7*365.

Es aquí en donde es necesario una técnica para desarrollar software de una manera rápida y muy eficiente.

 Si se desea aplicar DevOps es muy importante no perder de vista 7 reglas que se deben convertir en un mantra para todos aquellos que quieran aplicar realmente DevOps.

  1. Infraestructura como código
  2. Integración continua
  3. Pruebas automatizadas
  4. Monitoreo de rendimiento de la aplicación
  5. Liberaciones continuas
  6. Administración de liberaciones
  7. Administración de la configuración
¿Pero que significa cada paso?

Infraestructura como código: elimina uno de los problemas mas grandes que existen en el desarrollo de aplicaciones, el que en equipos diferentes (desarrollo siempre es diferente a producción), las aplicaciones se comporten de manera diferente. Además de que los ambientes de desarrollo por lo regular tienen instalados software que se emplea para diversas actividades, software que normalmente no esta instalado en el ambiente productivo.

El desarrollo en la nube elimina en gran medida este problema ya que se pueden tener equipos con mejores características.

Integración continua: Se acabo la época del programador héroe, en el que un solo programador hacia todo, hoy estamos en una época de grupos distribuidos geográficamente, en la que se busca a los mejores para efectuar tareas que antes hacia el equipo de un solo hombre, pese a que el arquitecto es el gran orquestador de las actividades del desarrollo, las aplicaciones que fueron desarrolladas por personas o equipos diferentes en diferentes partes del mundo, deben operar correctamente entre si. Es aquí en donde entra la integración continua, cada componente debe tomar la parte del rompecabezas que le corresponde, para así generar un todo, los errores de integración deben ser detectados al momento, para evitar que por un error en las piezas, se incrementen los tiempos o se baje la calidad.

Pruebas automatizadas: Grandes softwares, requieren grandes cantidades de pruebas, pero el tiempo para hacerlas es cada día menor, hay pruebas de regresión para ver si las liberaciones no han funcionalidad en el pasado, el rendimiento es importante, es necesario saber como será el desempeño de la aplicación en la vida real, de nada me sirve probar con un solo usuario y que cuando meta un segundo la aplicación deje de funcionar.

La cantidad de pruebas que puede tener una aplicación a lo largo de su vida puede superar algunos miles, y el permitir que se hagan con factor humano, trabajando bajo presión y con tendencia al cansancio, genera productos de baja calidad. Las pruebas automatizadas deben ser validadas para que aporten valor.

Un buen set de pruebas automatizadas reduce el tiempo de pruebas de días a incluso minutos.

Monitoreo del rendimiento de la aplicación: Hoy en día estamos ante aplicaciones que se encuentran activas 24x7x365, es necesario saber que pasa en ellas, pero sin ser intrusivos,
se debe brindar el soporte para poder contestar a las siguientes preguntas ¿Qué pasa en una aplicación? ¿Cuándo se degrada el servicio? ¿Sufro algún ataque? ¿Mis recursos son suficientes? ¿Cuántos usuarios tengo? ¿El crecimiento es el esperado?

Liberaciones continuas: Un tema escabroso sobre todo para aquellos que vienen de otras generaciones en las que los ciclos de desarrollo se encontraban completamente divididos, las liberaciones continuas permiten pasar cambios de un ambiente a otro prácticamente de manera instantánea, el subir los cambios en desarrollo actualiza la versión que se encuentra en una ambiente de integración, con una simple aprobación esta versión pasa a QA, a preproducción o incluso a producción, haciendo que los tiempos de liberación pasen de ventanas de varias horas a ventanas de minutos, en los que incluso el servicio puede continuar disponible.

Liberaciones continuas permite la solución de problemas o la integración de funcionalidades en tiempos pequeños, permitiendo que el cliente conserve su capacidad de asombro, o evitando la partida de clientes por errores en el aplicativo.

Administración de liberaciones: Una liberación pasa una versión aprobada, de una manera sencilla entre ambientes, tenido un código único, que ya fue probado y se encuentra completamente estable.

Administración de la configuración: Establece la consistencia de los productos durante el ciclo de vida, determina ¿Qué requisitos se cumplen? ¿Cuáles faltan? ¿Qué versiones de los productos se manejan? ¿Qué componentes se liberan? su función es tener un conjunto de fotografías de lo que ocurrió, ocurre y ocurrirá en un proyecto


Una ventaja de DevOps es que nos entrega métricas del proceso, por lo que se puede seguir la premisa de "Lo que no se mide no se puede mejorar" por lo que podemos tener este proceso en mejora continua.

Felices líneas.

No hay comentarios.:

Publicar un comentario