Upload
trinhduong
View
214
Download
0
Embed Size (px)
Citation preview
Cultura y procesos: un enfoque a la adopción de
DEVOPS EN S4N
En los últimos años el término DevOps ha tomado
mucha fuerza en la industria tecnológica. El cambio
cultural y de trabajo que ha supuesto su aparición en
las compañías de software ha logrado incrementar la
colaboración entre los equipos de desarrollo y
operaciones, haciendo más eficientes los procesos, y
permitiendo que las organizaciones realicen entregas
rápidas y seguras.
Siendo consecuentes con esto, las compañías hoy día
deben transformar el modo como crean y entregan
software. Nuestro interés por generar el mayor valor a
las organizaciones e impactar positivamente su
entorno, nos motiva a investigar lo que es novedoso
en la industria, logrando aplicar técnicas o métodos
que hagan sentido tanto para nosotros como para el
cliente.
Lo invitamos a conocer cómo un enfoque más
holístico en el ciclo de vida de los productos de
software nos permite innovar con mayor rapidez
mediante la automatización de procesos de desarrollo
de software y la administración de la infraestructura
para hacer despliegues continuos exitosos.
En los últimos años el término DevOps ha tomado
mucha fuerza en la industria tecnológica. El cambio
cultural y de trabajo que ha supuesto su aparición en
las compañías de software ha logrado incrementar la
colaboración entre los equipos de desarrollo y
operaciones, haciendo más eficientes los procesos, y
permitiendo que las organizaciones realicen entregas
rápidas y seguras.
Siendo consecuentes con esto, las compañías hoy día
deben transformar el modo como crean y entregan
software. Nuestro interés por generar el mayor valor a
las organizaciones e impactar positivamente su
entorno, nos motiva a investigar lo que es novedoso
en la industria, logrando aplicar técnicas o métodos
que hagan sentido tanto para nosotros como para el
cliente.
Lo invitamos a conocer cómo un enfoque más
holístico en el ciclo de vida de los productos de
software nos permite innovar con mayor rapidez
mediante la automatización de procesos de desarrollo
de software y la administración de la infraestructura
para hacer despliegues continuos exitosos.
Aunque actualmente no existe una
definición de DevOps aceptada global-
mente, es claro que el origen del término
parte de la unión de Desarrollo (Dev) y
Operaciones (Ops).
Patrick Debois acuñó el término en 2009
cuando organizó el primer “DevOps Day”,
una conferencia que cubre temas de
desarrollo de software, infraestructura y
su unión, incluyendo temas como auto-
matización, testing y cultura organizacio-
nal. En esencia, DevOps Day es la confe-
rencia que acerca el desarrollo y las
operaciones.
La idea de dicho evento surgió después
de que la presentación “10 Deploys per
Day”, de Jhon Allspaw y Paul Hammond, le
mostrará a Patrick Debois que sus ideas
sobre “agilizar” las operaciones eran
compartidas por otros miembros de la
comunidad. [1]
ENTENDIENDO EL CONCEPTO DEVOPS
De esta forma, DevOps surgió como una
respuesta a la inconformidad que tenían
varios personajes de la industria sobre la
distancia entre los equipos de desarrollo y
operaciones, una desconexión que no les
permitía entregar el mayor valor de los
productos de software a los clientes. En
este sentido, DevOps se ve como la con-
secuencia de tener organizaciones
dinámicas cuyo aprendizaje constante
busca mayor eficiencia y eficacia.
En resumen, usando la definición de
Amazon: “DevOps es la combinación de
filosofías culturales, prácticas y herramien-
tas que incrementan la habilidad de una
organización para entregar aplicaciones y
servicios a alta velocidad”. [2]
TRANSICIÓN A UNA CULTURA DEVOPS
El equipo de DevOps busca aportar
a cada equipo/proyecto el conocimiento y
las herramientas necesarias para acercar
las infraestructuras de nuestros clientes al
nivel de las Organizaciones de Alto
Rendimiento (se les denomina así a
aquellas que despliegan sus aplicaciones
más de 100 veces al día y hacen parte de
este grupo Facebook, Amazon, Netflix y
Google), esto se logra al desarrollar
procesos de despliegue automatizados
que agilicen las entregas al cliente y por
ende generen valor más rápidamente.
La actualidad tecnológica en la que
vivimos exige que los despliegues se
realicen de forma continua y segura. La
mayoría de empresas realizan un plan por
cada despliegue en cualquier ambiente,
pero esto es equivalente a decir que en
cada despliegue se realizan cambios
constantes al procedimiento general de
despliegue, lo cual puede agregar pasos
nuevos con un alto riesgo de error.
Con el fin de evitar la mayoría de errores,
creemos que los equipos deben contar
con una guía general de cómo funciona el
canal de despliegue (deployment
pipeline) que les permita cubrir cada uno
de los aspectos de los diferentes
procesos -los cuales se explican más
adelante-, pero que no requiera cambios
constantes a los procedimientos.
Así es como lo hacen las Organizaciones
de Alto Rendimiento. Estas promueven la
administración de sus servidores como
ganado y no como mascotas, logrando
comprender de tal forma este concepto
hasta el punto de permitirles a las
personas recién contratadas hacer
despliegues en producción desde el
primer día de trabajo. En contraste, la
mayoría de empresas todavía analizan una
y otra vez la situación antes de decidir
desplegar dos veces al año.
Ganado vs Mascotas es una
analogía que se usa para explicar la dife-
rencia entre la forma clásica de hacer
operaciones y la denominada “infra-
estructura como código”.
La idea de esta analogía es que se debe
tratar a los servidores como ganado y no
como mascotas. Por un lado, a las masco-
tas se les da un nombre, se alimentan, se
cuidan, y si se enferman, se atienden
hasta que se mejoren. Anteriormente los
servidores se trataban como mascotas,
con mucho cuidado y recelo. En contraste,
al ganado se le da un número, todos son
iguales, y si uno de ellos se enferma, se
reemplaza. Actualmente en las Organi-
zaciones de Alto Rendimiento, la automa-
tización de la infraestructura les permite
tener nuevos servidores en minutos.
GANADO VS MASCOTAS
Este concepto se ha refinado con el
tiempo y, dependiendo del contexto, ha
sido presentado con diferentes analogías.
Martin Fowler describe un concepto simi-
lar con servidores fénix y servidores copo
de nieve [3]. Los primeros nunca se modifi-
can de forma manual, y siempre se
pueden re-crear(renacer) en su estado
original, en cambio los segundos, son
creados de forma manual, lo cual los hace
únicos y frágiles ante cambios. [4]
Lo importante en esta analogía es que el
ganado, que hace referencia a los servi-
dores, están diseñados para fallar y ser
reemplazados con facilidad. La sugeren-
cia es entonces, tratar a los servidores
como ganado y no como mascotas.
En los últimos años hemos visto un florecimiento de
herramientas de software que permiten facilitar todos
los procesos que DevOps intenta mejorar. A continua-
ción, mencionamos los procesos que la unión entre
desarrollo y operaciones debe cubrir.
PROCESOS PARA UN ALTO RENDIMIENTO
CANAL DE ENTREGA DE SOFTWARE (SOFTWARE
DELIVERY PIPELINE)
Más conocido como el Software
Delivery Pipeline, el Canal de Entrega de
Software se compone de todos los
procesos que agilizan la generación de
valor al cliente minimizando riesgos y
bloqueos. A continuación enumeramos
las fases de dicho canal de entrega de
software:
Integración Continua (Continuous Integration)
La integración continua se originó bajo la
metodología de programación extrema
(eXtreme Programming) y es una práctica
de desarrollo de software que requiere la
integración periódica de los cambios en el
código hacia un repositorio compartido.
La idea central de esta práctica es
reconocer que el proceso de integración
es complicado y doloroso. Al reconocer
esto se busca una estrategia para reducir
la complejidad; dicha estrategia implica
hacer integración tan seguido como sea
posible. Aunque suene contradictorio, esta
práctica permite hacer integraciones
pequeñas y sencillas de forma constante,
reduciendo tiempos y aumentando la
velocidad. Para tener un proceso de
integración continua se han encontrado
varios pasos útiles:
1) Tener un repositorio de código en el cual
se tenga centralizado el desarrollo. Cada
desarrollador trabaja en pequeñas tareas y
cuando cada tarea se termina se incluyen
los cambios a la línea central del
repositorio.
2) Iniciar un proceso de compilación y
testing de forma automatizada, que
prueben que los cambios y adiciones
hechos estén correctos y no hayan
alterado ninguna parte del software. Para
que esto funcione correctamente es
esencial que haya un buen conjunto de
pruebas en las cuales se pueda confiar.
Pro
ceso
s p
ara
un
alt
o r
en
dim
ien
to
3) Ejecutar varias veces al día este
proceso, prestando atención a los errores
reportados, que se tornan en prioritarios
hasta que desaparecen. Con esto se logra
tener siempre en la línea principal, la
última versión funcional del estado del
proyecto, versión que se actualiza varias
veces por día.
Entrega Continua (Continuous Delivery)
La entrega continua representa un paso
más allá de la integración continua. De
acuerdo a Martin Fowler, la entrega
continua consiste en construir el software
de tal manera que siempre esté listo para
pasar a producción, teniendo en cuenta
las siguientes características:
+ Es desplegable a lo largo de todo su
ciclo de vida.
+ Los equipos han priorizado esta carac-
Despliegue Continuo (Continuous Deployment)
Despliegue continuo es el paso siguiente a
entrega continua. Puede que este no
aplique a todas las empresas, pero la
mayoría deberían apuntar a llegar a este
punto. La gran diferencia entre uno y otro
está en quien toma la última decisión
respecto a poner en producción los
cambios; cuando se llega a tener
despliegue continuo esta decisión es
automatizada.
terística de desplegable en cualquier
momento sobre la construcción de
nuevas funcionalidades.
+ Puede dar una retroalimentación rápida
y automatizada.
+ Puede ser desplegado en cualquier
versión y ambiente (desarrollo, pruebas,
producción), bajo demanda.
Source ControlCommit Changes
Approve Deploy
Automatic Deploy
Automated
BuildRun Buiild And
Unite Test
Continuos Integration
Continuos Delivery
Continuos Deployment
StagingDeploy to test environment Run integration tests, load
tests, and other tests
ProductionDeploy to production
environment
Automated
V1.1
Pro
ceso
s p
ara
un
alt
o r
en
dim
ien
to
Pruebas Continuas (Continuous Testing)
Las pruebas continuas son una de las
bases importantes para la automatización.
Esto debido a que con las pruebas se
puede verificar de manera fiable y cons-
tante el estado del producto. Para tener
confianza en los diferentes procesos del
canal de entrega de software es impor-
tante poder probar que cada paso haya
tenido un resultado positivo.
Estas pruebas deben estar de acuerdo a lo
que los usuarios consideran una apli-
cación confiable y útil, por lo tanto, se
debe desarrollar con cuidado; teniendo en
cuenta que pasar las pruebas debe signifi-
car que se confía en el producto.
Aprovisionamiento de Máquinas (Machine Provisioning)
Para tratar las máquinas como ganado y
no como mascotas se debe contar con un
procedimiento automatizado de creación
de la infraestructura. La idea del aprovi-
sionamiento de máquinas es que espe-
cifique las características de hardware que
necesita la aplicación: cantidad y tipo de
CPUs, cantidad de RAM y de Disco Duro, y
especificaciones de interfaces de red.
Todos estos requerimientos deben estar
versionados en scripts que reflejen la evo-
lución de la infraestructura.
Administración de la Configuración (Configuration Management)
La administración de la configuración se
puede considerar como una parte del
proceso de aprovisionamiento de soft-
ware (suele realizarse con las mismas
herramientas), pero esta se encarga de
asegurarse que el software esté configu-
rado/personalizado de la manera espera-
da. En otras palabras, no es solo asegu-
rarse que todas las librerías necesarias
estén disponibles, sino que los archivos de
configuración de los diferentes servicios
estén con el contenido adecuado y que
este contenido se genere de forma
automatizada. En la administración de la
configuración se colocan los valores de las
variables que se requieren para ejecutar el
Aprovisionamiento de Software (Software Provisioning)
El aprovisionamiento de software se
refiere al conjunto de programas y librerías
base que las aplicaciones van a utilizar
para funcionar. Usualmente involucra la
instalación de programas genéricos como
alguna implementación de la librería de c
(musl o glibc) o programas que facilitan el
despliegue como Puppet, Chef, Ansible,
SSH, Docker, entre otros.
software y conectarlo, esto incluye: ips de
clusters, puertos a usar, tiempos de
espera, elección de mecanismos de log,
urls de servicios remotos y claves de
bases de datos entre muchos otros.
Pro
ceso
s p
ara
un
alt
o r
en
dim
ien
to
Monitoreo y Alertas (Monitoring and Alerts)
Las alarmas son herramientas muy útiles
para tener un proceso automatizado y
ayudar a incrementar la estabilidad del
producto. Con estas se puede tener con-
trol del estado de la infraestructura e
incluso tener reacciones automatizadas a
ciertos eventos. Por ejemplo, un incre-Administración de la Configuración (Configuration Management)
La administración de la configuración se
puede considerar como una parte del
proceso de aprovisionamiento de soft-
ware (suele realizarse con las mismas
herramientas), pero esta se encarga de
asegurarse que el software esté configu-
rado/personalizado de la manera espera-
da. En otras palabras, no es solo asegu-
rarse que todas las librerías necesarias
estén disponibles, sino que los archivos de
configuración de los diferentes servicios
estén con el contenido adecuado y que
este contenido se genere de forma
automatizada. En la administración de la
configuración se colocan los valores de las
variables que se requieren para ejecutar el
software y conectarlo, esto incluye: ips de
clusters, puertos a usar, tiempos de
espera, elección de mecanismos de log,
urls de servicios remotos y claves de
bases de datos entre muchos otros.
mento en el tráfico de una página se
puede responder con desplegar y conec-
tar una nueva instancia para que esta
ayude a distribuir el procesamiento de
dicho tráfico.
Para tener un sistema automatizado a este
nivel se requiere:
1) Tener los datos adecuados para cono-
cer el estado del sistema, de los servi-
dores, de la base de datos y en general de
cada elemento que se pueda medir.
2) Asociar alarmas que reporten valores
anormales.
3) Ejecutar de manera automatizada las
acciones correctivas cuando se detecte
una alarma.
Pro
ceso
s p
ara
un
alt
o r
en
dim
ien
to
DEVOPS APLICADO EN S4N
SECTOR AERONÁUTICO
La nueva página de Copa Airlines
fue desarrollada en S4N usando
tecnologías modernas y servicios de
Amazon Web Services (AWS) que brindan
varios beneficios como escalabilidad, mi-
nimización de puntos únicos de fallo, faci-
lidad al desplegar y monitorización del
estado de la aplicación.
Para su aprovisionamiento se usan máqui-
nas virtuales de AWS con imágenes
preparadas de antemano y que brindan
una capa de software base sobre la cual
se despliega la aplicación. Utilizando la
tecnología de contenedores se aumenta
la velocidad de despliegue y se facilita la
implementación de Servidores Fénix.
Cada vez que una nueva máquina se crea,
contiene la lógica para la administración
de su configuración, realizando todas las
operaciones para descargar, instalar, con-
figurar y desplegar las aplicaciones.
Por otro lado, se usan varios elementos
que permiten disminuir la probabilidad de
fallas y aumentar la velocidad de respues-
ta, como redes de distribución de conteni-
do (CDN), balanceadores de carga y
grupos auto escalables.
Finalmente se monitorea el estado de
cada componente por medio de métricas
y alarmas que permiten estar pendientes
cuando se identifican eventos anormales.
Dev
Op
s A
plic
ado
en
S4N
SECTOR FINANCIERO
En ACH se implementó un modelo
de despliegue on-premise para todos sus
componentes. El sistema se compone de
microservicios desarrollados por S4N y de
tecnologías distribuidas como Apache
Cassandra, Apache Zookeeper, Apache
Kafka y Apache Spark. Además de esto, el
sistema se comunica con otros sistemas
externos como bases de datos y sistemas
de archivos.
Dada la gran cantidad de herramientas y
su compleja configuración en cluster, fue
necesario establecer una estrategia que
permitiera facilitar los despliegues. Esta se
basó en dos conceptos: infraestructura
inmutable y automatización. Usando con-
tenedores se logra encapsular el software
base para la instalación de estos
programas en Servidores Fénix. Emplean-
do una herramienta de automatización de
la configuración se logra facilitar el
despliegue, disminuyendo su compleji-
dad y la probabilidad de fallos humanos, y
decidiendo en tiempo de despliegue las
diferentes configuraciones de cada nodo
de cada cluster.
Gracias a estas estrategias se logró esta-
blecer un procedimiento que permite la
instalación de todos estos componentes,
por medio de herramientas de contene-
rización y de automatización de la confi-
guración con un solo comando.
Dev
Op
s A
plic
ado
en
S4N
CONCLUSIÓN
DevOps se trata de agregar valor,
por tanto, cualquier herramienta o proceso
debe estar dirigida hacia esto.
+ Aprovechar los beneficios que otorgan
cada uno de los procesos del Canal de
Entrega de Software, tales como la re-
ducción de riesgos, la disminución de
procesos manuales, una mejor visibilidad y
control del estado del proyecto, y la
capacidad que brinda para facilitar el
lanzamiento del producto en el mercado,
es sin duda una buena oportunidad para
ayudar a su organización a alcanzar los
objetivos deseados.
+ Tenga la mentalidad de una Organi-
zación de Alto Rendimiento, trate a los
servidores como ganado y no como mas-
cotas, adopte los procesos de integración
continua, entrega continua y despliegue
continuo para maximizar el valor y la com-
petitividad en su organización. Contácte-
nos para ayudarle en la adopción de
DevOps y exploremos juntos la forma
adecuada para involucrar esta filosofía en
la cultura de su organización.
+ Recuerde que cultivar una cultura que
una al equipo de desarrollo con opera-
ciones no es acerca de seguir unos pasos,
sino de buscar agilidad en el proceso de
crear valor, desde el desarrollo, hasta el
despliegue y su operación, teniendo siem-
pre presente que este camino será único
para cada producto y empresa.
Bibliografía[1]Kim, G., Humble, J., Debois, P., Allspaw, J., & Willis, J. (2016). The DevOps handbook.[2] https://aws.amazon.com/devops/what-is-devops/[3]https://martinfowler.com/bliki/PhoenixServer.html[4] https://martinfowler.com/bliki/SnowflakeServer.html
Contacto
Si desea tener más información, por favor
contacte a: Juan Manuel Cortés, Head of
Business Development [email protected]
http://s4n.co/
Copyright © 2017 S4N Todos los
derechos reservados
CONOZCA LA NUEVA FORMA DE CONSTRUIR
PRODUCTOS DE SOFTWARE