Download - Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Antonio Ognio // [email protected]
Metodologías ágiles
Sistemas distribuídos
Arquitectura orientada a servicios
Service-oriented Architecture
SOA
Cultura de desarrollo • Desarrollo rápido de nuevas características
• Diseño a través de la experimentación
• Quedarse con lo que funciona y descartar lo que no funciona
• Evitar desperdicios, gastos innecesarios (LEAN)
• Rápida capacidad de respuesta y adaptación
Agilidad
Agilismo
Sistemas monolíticos • Miles de líneas de código
• Casi siempre en un mismo lenguaje
• Cientos de tablas
• …muchas veces de distintos sistemas
• Cientos de clases, métodos, funciones
Fáciles al inicio… • Desarrollo rápido (al inicio)
• Desarrollo sencillo
• Despliegue sencillo
• Operación sencillo
• Terreno conocido de pocos desarrolladores
Desventajas (Sistema monolítico) • ¿Quién es el responsible de que parte?
• Dependencias cada vez más complejas
• Ciclos de prueba cada vez más largos
• Impactos inesperados en el rendimiento
• Opciones limitadas en la elección de tecnologías
Ley de Conway
“Organizations which design systems are constrained to produce designs which are copies of
the communication structures of these organizations”
-Melvin Conway (1968)
Ley de Conway
“Las organizaciones que diseñan sistemas están limitadas a producir diseños que son copias de las
estructuras de comunicación de dichas organizaciones”
-Melvin Conway (1968)
Microservicios
Ventajas (Microservicios) • Funcionalidad específica y bien delimitada
• Relativamente pocas líneas de código
• Total independencia en selección de tecnologías
• Propiedad / gestión por equipos distintos
• Migración gradual hacia nuevas tecnologías
Datastores
MySQL Cluster
REST
Representational State Transfer
Usar TODO el potencial de HTTP para construir sistemas distribuídos
Utilizar todo el potencial de HTTP… • Verbos
• Cabeceras
• Tipos de contenido
• URLs
• Infraestructura: Proxies, balanceadores, clientes, herramientas de depuración, WAFs, etc.
HATEOAS
Hypertext As
The Engine
Of Application
State
¿Porqué Python? • Sintaxis sencilla y legible
• Multiparadigma: procedural / OOP / funcional
• Rendimiento aceptable
• Muchos módulos disponibles
• Frameworks: Django / Tornado
Servicios • Usuarios (registro, SSO, perfil unificado, etc)
• Blogs
• Comentarios
• Puntos (Gamification)
• Contenido editorial
• Búsqueda
Otras tecnologías • Git (Control de versiones)
• Vagrant (Virtualización del entorno de desarrollo)
• RHEV 3.0 (Máquinas virtuales)
• CentOS 5.x / 6.x
• Ansible (automatización de despliegue)
Monitoreo
Permite responder, en tiempo real, preguntas como: • ¿Cómo está funcionando el servidor?
• ¿Cómo está sirviendo las páginas de la aplicación?
• ¿Cómo percibe el usuario la aplicación?
• ¿Cómo puedo mejorar las operaciones que son críticas para el negocio?
Apdex
¿siguientes pasos?
Ventajas de Go • Rendimiento similar a C / C++
• Sintaxis amigable estilo Python
• Optimizado para ser rápido y eficiente
• Un modelo de concurrencia sencillo (gorutinas)
• Rápida adopción en comunidad SOA
Conclusiones • Los microservicios permiten construir
aplicaciones distribuídas que son potencialmente más fáciles de mantener y hacer evolucionar a lo largo del tiempo.
• Es conveniente evitar construir sistemas monolíticos
• Es clave entender todas las prestaciones del protocolo HTTP y del estilo REST no reinventar la rueda.
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Antonio Ognio // [email protected]