4/09/2012

Recomendaciones de Arquitectura (Escalabilidad, Disponibilidad, Fiabilidad )

Cuando desarrollamos software, la arquitectura es el  elemento mas importante de su diseño, ya que este sostendrá y soportara todas las funciones en tiempo de diseño y ejecución de la solución. Lamentablemente (según mi experiencia)  siguen proliferando arquitectura monolíticas y rígidas afectando el desempeño; por ejemplo de muchas portales que terminan fuera de servicio por un numero de accesos concurrentes mínimo e irrisorio.

Esta situación se presenta con mucha frecuencia por la falta de planteamientos dirigidos y centrados en  asegurar escalabilidad, disponibilidad, fiabilidad, entre otros aspectos. Hace poco estuve trabajando en un compendio especifico sobre las practicas de arquitectura que deben ser consideradas cuando desarrollamos software de alta demanda. Aquí una pequeña pero importante relación de las mejores practicas y recomendaciones que utilizo para evaluar cual es el patrón de arquitectura de software mas idóneo para una solución. El objetivo es diseñar arquitecturas de software escalables, robustas y profesionales.

Algunas Recomendaciones:
  1. Para satisfacer la demanda de escalabilidad de la solución no almacene los datos en una ubicación centralizada. Los datos pueden estar distribuidos en diversos nodos.
  2. Utilice una estrategia de memoria caché para disminuir el acceso a base de datos innecesarios. Esta estrategia por ejemplo puede representar una reducción del 50% en la utilización de CPU.
  3. Para garantizar disponibilidad, considere una estrategia de cache para almacenar los datos en memoria permitiendo mayor fiabilidad y disponibilidad de servicios.
  4. Utilice de forma intensiva plataformas de mensajería asíncrona para que los servicios de la solución puedan escalar de forma independiente.
  5. Utilice balanceadores de carga estándar para enrutar el tráfico entrante a servicios. Esta estrategia puede ser utilizada cuando los servidores no conserven un estado transaccional (Espejos). Si se requiere de mayor capacidad de procesamiento, simplemente puede anadir más servidores de aplicaciones.
  6. Divida las fuentes de datos para reducir los tiempo de consultas.
  7. No utilize una base de datos monolítica, en cambio sugiero utilizar grupos y funciones de aplicación independientes, permitiendo que cada grupo escale de forma independiente el uno del otro, de acuerdo a las demandas y el consumo de recursos. Además, este enfoque permite aislar y racionalizar las dependencias de recursos.
  8. Divida las cargas de trabajo en unidades manejables, donde cada unidad individual conserve una buena relación precio-rendimiento. 
  9. Gestione diversos ambientes, por ejemplo: desarrollo, calidad y producción.
  10. Utilice ambientes virtualizados.
  11. Evalue la utilización de base de datos NoSQL "ya es tiempo :) ".
Espero que estos puntos puedan influenciar la adopción de practicas en el establecimiento de un buen diseño de arquitectura.

Saludos,