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