desarrollo ágil de sistemas distribuidos con python empleando la arquitectura orientada a servicios

52
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios Antonio Ognio // [email protected]

Upload: antonio-ognio

Post on 13-Jun-2015

893 views

Category:

Technology


0 download

DESCRIPTION

Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios.

TRANSCRIPT

Page 1: 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]

Page 2: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Metodologías ágiles

Page 3: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Sistemas distribuídos

Page 4: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 5: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Arquitectura orientada a servicios

Page 6: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Service-oriented Architecture

Page 7: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

SOA

Page 8: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

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

Page 9: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Agilidad

Page 10: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Agilismo

Page 11: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 12: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 13: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 14: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

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

Page 15: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Fáciles al inicio… •  Desarrollo rápido (al inicio)

•  Desarrollo sencillo

•  Despliegue sencillo

•  Operación sencillo

•  Terreno conocido de pocos desarrolladores

Page 16: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

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

Page 17: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 18: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 19: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

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)

Page 20: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

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)

Page 21: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Microservicios

Page 22: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

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

Page 23: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 24: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 25: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 26: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 27: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 28: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 29: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Datastores

Page 30: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 31: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

MySQL Cluster

Page 32: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

REST

Page 33: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Representational State Transfer

Page 34: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Usar TODO el potencial de HTTP para construir sistemas distribuídos

Page 35: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Utilizar todo el potencial de HTTP… •  Verbos

•  Cabeceras

•  Tipos de contenido

•  URLs

•  Infraestructura: Proxies, balanceadores, clientes, herramientas de depuración, WAFs, etc.

Page 36: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

HATEOAS

Page 37: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Hypertext As

The Engine

Of Application

State

Page 38: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 39: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

¿Porqué Python? •  Sintaxis sencilla y legible

•  Multiparadigma: procedural / OOP / funcional

•  Rendimiento aceptable

•  Muchos módulos disponibles

•  Frameworks: Django / Tornado

Page 40: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 41: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 42: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Servicios •  Usuarios (registro, SSO, perfil unificado, etc)

•  Blogs

•  Comentarios

•  Puntos (Gamification)

•  Contenido editorial

•  Búsqueda

Page 43: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

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)

Page 44: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Monitoreo

Page 45: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 46: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

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?

Page 47: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

Apdex

Page 48: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

¿siguientes pasos?

Page 49: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios
Page 50: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

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

Page 51: Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura orientada a servicios

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.

Page 52: 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]