Cuando nos planteamos la escalabilidad de una aplicación, debemos tener en cuenta no sólo nuestras necesidades de infraestructura sino también la arquitectura de nuestra aplicación. En una aplicación moderna multi-capa, se debe analizar la escalabilidad de cada una de las capas. Si pensamos en una aplicación web, vemos que una plataforma cloud como Windows Azure nos facilita mucho las cosas porque nos permite añadir o quitar frontales web según lo demanda real que tenga la aplicación cada momento utilizando componentes como Windows Azure AutoScaling Application Block (WASABi) o, ahora también la solución gratuita de MetricsHub. Pero eso es sólo una parte de la historia. De nada vale lo anterior si resulta que todos esos frontales atacan una única base de datos SQL Database que se convierte automáticamente en un cuello de botella. Deberemos pensar en el uso de caché, sharding, procesos asíncronos, etc.

Para profundizar en estos temas, existe un excelente artículo en MSDN que os recomiendo leer con atención:

Best Practices for the Design of Large-Scale Services on Windows Azure Cloud Services

Y también es lectura obligada:

Scaling Applications Using Windows Azure Cloud Services

que bien podemos resumir en este poster:

Scaling Applications Using Windows Azure Cloud Services Poster 

 

¿Habéis tenido que diseñar aplicaciones altamente escalables? ¿Qué recomendaciones haríais?

Como siempre, espero que haya sido útil y se agradece cualquier comentario.