Estrategias Para la Escalabilidad de Aplicaciones

Anuncio
Estrategias Para la
Escalabilidad de
Aplicaciones
James P. Kelleghan
Chief Architect
Sigma Tao Software
Objetivo
Desde el punto de vista de la Arquitectura de Software, el definir la estrategia
adecuada para resolver los problemas de escalabilidad puede ser vital para el
éxito de un proyecto. Esta ponencia presenta las diferentes estrategias que
pueden ser utilizadas para ofrecer esta cualidad sistémica, las ventajas de su
uso, las desventajas el impacto que el uso de cada estrategia tendrá en el
código de la aplicación y las limitantes de cada estrategia propuesta.
Agenda
•
•
•
•
•
Cualidades Sistémicas
¿Qué es Escalabilidad de Software?
Escenarios de Escalabilidad
Estrategias
Conclusiones
Cualidades Sistémicas
Conocidas como requerimientos no
funcionales.
•
•
•
•
•
Usabilidad
Rendimiento
Confiabilidad
Seguridad
Escalabilidad
Cualidades Sistémicas
Todas las empresas que desarrollan
Software persiguen cumplir solo con los
siguientes objetivos generales:
Cualidades Sistémicas
¾ Cumplir con los requerimientos del usuario
Cualidades Sistémicas
¾ Cumplir con los requerimientos del usuario
¾ Pasar las pruebas funcionales
Cualidades Sistémicas
¾ Cumplir con los requerimientos del usuario
¾ Pasar las pruebas funcionales
¾ Construir a bajo costo
Cualidades Sistémicas
¾ Cumplir con los requerimientos del usuario
¾ Pasar las pruebas funcionales
¾ Construir a bajo costo
¾ Construir en poco tiempo
9Cumple con los requerimientos del usuario
9Pasa las pruebas funcionales
9Se construye a bajo costo
9Se construye en poco tiempo
Cualidades Sistémicas
• Según Gartner y Forester Research la
incorrecta atención a las cualidades
sistémicas representa la segunda causa,
tras un manejo inadecuado de los
requerimientos, del fracaso de los
proyectos de desarrollo de software.
¿Qué es Escalabilidad de Software?
• Visión Rendimiento
La escalabilidad se refiere a la capacidad
que tiene un sistema de incrementar su
rendimiento de forma proporcional al
incremento en recursos de hardware.
Rendimiento
Escalabilidad
¿Qué es Escalabilidad de Software?
• Visión Servicio
• La capacidad que tiene un sistema para
atender a mas usuarios concurrentes que
el número para el que fue diseñado con
un decremento proporcional del
rendimiento.
Escenarios de Escalabilidad
• No existe presupuesto para adquirir nuevo
equipo
• La aplicación corre bien en el ambiente de
pruebas pero se “alenta” en el ambiente
de producción
Escenarios de Escalabilidad
• El sistema se cae cuando se agregan
usuarios
• El sistema está insoportablemente lento y
agregar mas memoria no resuelve el
problema
Escenarios de Escalabilidad
• Alta Concurrencia
El número de peticiones de servicio es
mayor a la capacidad del Bus o del CPU
de atenderlas.
Escenarios de Escalabilidad
Síntomas:
El sistema se vuelve marcadamente mas
lento con cada petición de servicio
adicional hasta el punto en el que se cae
la aplicación.
Escenarios de Escalabilidad
Ejemplo:
Una red con una aplicación “Thin Client”
tiene que atender 850 usuarios
concurrentes. El Hardware consta de un
Servidor de 4 Procesadores Intel Bus
S100 y una red Ethernet 100BaseT sin
Switches.
Escenarios de Escalabilidad
• Alto consumo de Ancho de Banda
La cantidad de tráfico rebasa la capacidad
de la red de transportarlo.
Escenarios de Escalabilidad
• Síntomas:
Todos los sistemas que utilizan red se
vuelven marcadamente mas lentos hasta
que se caen los servicios de red.
Escenarios de Escalabilidad
Ejemplos:
• Una red Ethernet sobre la que
cotidianamente se transmite mas del 10%
del Ancho de Banda disponible.
• Un segmento de Internet sobre la que
cotidianamente se transmite mas del 50%
del Ancho de Banda disponible.
Escenarios de Escalabilidad
• Alto número de Consultas
El número de peticiones concurrentes a la
base de datos por diferentes aplicaciones
rebasa la capacidad de la misma de
atenderlos en un tiempo rasonable.
Escenarios de Escalabilidad
Síntomas:
Todas las aplicaciones que se conectan a
la base de datos reportan tiempos de
consulta y escritura mas lentos hasta que
la operación se vuelve incosteable.
Escenarios de Escalabilidad
Ejemplo:
Múltiples aplicaciones acceden a una
instancia única de un Base de Datos,
desnormalizada y con índices optimizados
de manera que rebasan su capacidad de
atender solicitudes en tiempo y forma.
Estrategias
• Software como Servicio (SOA)
• Enterprise Service Bus (ESB)
• Software como Fortaleza
Estrategias
Software como Servicio (SOA)
+ Proceso Distribuido
+ Balanceo Heurístico de Cargas
- Orquestación e Integración
Estrategias
Enterprise Service Bus (ESB)
+ Colas
+ Estilo de Pipes & Filters
- Orquestación
- Complejidad
Estrategias
Software como Fortaleza (Arquitectura)
• Consiste de una serie de fortalezas de
Software
• Foralezas autocontenidas
• Mutuamente sospechosas
Estrategias
Software como Fortaleza (Arquitectura)
• Marginalmente cooperativas
• Interactúan vía tratados diseñados
cuidadosamente y meticulosamente
administrados.
Estrategias
Fortaleza de Software (Organización)
id Diagram Examples
Fortalesa de Negocio
:Logica de
Negocio
:Guardian
Canal Síncrono
:persistencia
:DTO
Canal Asincrono
Estrategias
• Escalabilidad por Hardware
Cluster
Un grupo de computadoras con bajo
grado de acoplamiento que trabajan en
conjunto de manera que pueden ser vistas
como una sola computadora.
Estrategias
Escalabilidad por Hardware (Clusters)
Recomendaciones para su uso:
Cuando el presupuesto lo permita
• Cuando se requiera mantener información
de estado
• Cuando exista mas de un nivel de
comunicación entre procesos paralelos.
Estrategias
Escalabilidad por Hardware (Grids)
Grid
Un grupo de computadoras con muy bajo
grado de acoplamiento que paralelizan
procesos desconectados en un ambiente
de computadora virtual.
Estrategias
Escalabilidad por Hardware (Grids)
Recomendaciones para su uso:
Cuando el presupuesto lo permita
• Cuando no se requiera mantener
información de estado
• Problemas Embarazosamente paralelos
Estrategias
Escalabilidad por Hardware (Ley de Ahmdal)
Donde S es el incremento en rendimiento
p es el número de procesadores y
f es el tiempo de ejecución de la fracción de código
que se tiene que ejecutar serialmente.
Estrategias
Escalabilidad por Hardware (Ley de Ahmdal)
Estrategias
Escalabilidad por Software (Colas)
• Una cola es un mecanismo de comunicación
asíncrono con entrega garantizada. Tmbién
conocido como MOM (Message Oriented
Middleware).
• Permite diferir el procesamiento.
• Existen soluciones de Open Source bastante
estables.
Estrategias
Escalabilidad por Software (Colas)
• Pueden ser de tipo punto a punto o publicar
suscribir.
• Requieren de “Messaging End Points”,
generalmente probitos por ESB´s para
comunicarse con otros Middlewares.
• Su uso generalmente incrementa la complejidad
de la aplicación a menos que se cuente con un
framework adecuado.
Estrategias
Escalabilidad por Software (Colas)
• Pueden ser de tipo punto a punto o publicar
suscribir.
• Requieren de “Messaging End Points”,
generalmente probitos por ESB´s para
comunicarse con otros Middlewares.
• Su uso generalmente incrementa la complejidad
de la aplicación a menos que se cuente con un
framework adecuado.
Estrategias
Escalabilidad por Software (Proxies y Caches)
• Un proxy es un mecanismo que, entre otras
funciones, permite formar un cache de pre
acceso a algún recurso (ej.: páginas, tráfico).
• Un cache es una colección de datos que
duplican otros datos almacenados previamente
en donde los datos originales son “caros” de
recuperar.
Estrategias
Escalabilidad por Software (Hebras)
• Una hebra es un mecanismo por el cual un
programa se segmenta para ejecutarse en dos
tareas simultáneas (o pseudo simultáneas). Su
eficiencia va en función directa de la capacidad
del hardware para soportar multi tarea
asimétrica.
Conclusiones
• Se recomienda, como mínimo, diseñar una
interfase para manejo de escalabilidad por
software en cada aplicación.
• Utilizar escalabilidad por software para
incrementar el rendimiento de una capa a costo
del rendimiento de una capa inferior. (Ej.: Front /
Back)
Estrategias
Otras Estrategias incluyen:
•
•
•
•
Cluster de Brokers de Mensajes
Particionamiento de Datos
Distribución Jerárquica
Balanceo de cargas HTTP
Estrategias
Otras estrategias (continua)
• Cluster de Servlets
• Clustering de Servidores de Aplicación y
Pooling
• Cacheo de Datos transaccionales
• Pools de Bases de Datos
Conclusiones
• La escalabilidad es un tema complejo que de no
ser resuelto en las primeras iteraciones de
desarrollo introduce riesgos importantes en el
proyecto.
• El implementar una solución escalable tiene un
impacto forzoso en el rendimiento en cuando
menos una de las otras capas del sistema
Conclusiones
• Se recomienda utilizar el modelo de software
como fortaleza como base para el desarrollo de
aplicaciones con capacidad de escalabilidad.
• Cuando se usa escalabilidad por software,
siempre será necesario escalar alguna otra capa
por hardware para obtener un buen rendimiento
real.
Concluciones
• El uso de escalabilidad por software en las
capas de presentación o servicios
generalmente incrementan el rendimiento
percibido.
Preguntas
James P. Kelleghan
jkelleghan@telmex.com
http://www.sigmatao.com
Descargar