Este artículo forma parte de una serie de artículos sobre el diseño de soluciones de arquitectura. En artículos anteriores hemos hablado sobre qué es y para qué sirve la arquitectura funcional, el contexto, la anatomía de un modelo de solución y su arquitectura funcional. En el artículo anterior vimos cómo detallar el modelo técnico que proporcione la visión del proyecto en un lenguaje más cercano al equipo de desarrollo y equipos técnicos.

En este artículo terminamos definiendo el contenido de diseño con la infraestructura de la solución.

El objetivo es tratar de recopilar todas las acciones necesarias para gestionar de forma eficiente la preparación de los entornos desde el principio con los equipos de desarrollo y sistemas para evitar retrasos cuando el equipo los necesite para realizar pruebas.

Entornos

Esta vista describe la estructura física de los recursos hardware o software sobre los que desplegar todos los artefactos descritos anteriormente. Podemos modelar la infraestructura como una nueva visión a partir de la arquitectura técnica y de despliegue, eliminando la información que no nos interesa y añadiendo los elementos de red, hardware, software y elementos físicos.

Los proyectos suelen trabajar con entornos previos, además del entorno de producción, por lo que esta vista debe diseñar los recursos necesarios de infraestructura para todos los entornos con los que se vaya a trabajar y ajustar así los recursos necesarios en cada entorno según las pruebas a realizar y optimizar los costes.

Los datos necesarios para detallar los elementos de infraestructura a desplegar se detallan en los siguientes capítulos y podemos calcularlos aplicando los requisitos no funcionales y volumetrías de los casos de uso a los recursos impactados por cada uno.

Hay que considerar que no hay por qué detallar la infraestructura completamente desde el primer momento. Es mejor ir detallando los recursos que se vayan necesitando conforme se vayan cerrando las decisiones de la arquitectura técnica, o una vez que el modelo de solución esté más maduro. Pero también es recomendable no dejarlo para el final e incluir este diseño en determinados momentos del proyecto donde aporta valor. Por ejemplo, cuando necesitamos un business case podemos definir la infraestructura a alto nivel para estimar los costes aproximados de infraestructura del proyecto, o en la fase de análisis del proyecto de forma más detallada para gestionar con tiempo las solicitudes de los recursos.

Caso práctico

Retomemos el caso práctico de la serie de artículos.

En el caso de nuestro cliente, utilizan entornos previos de desarrollo e integración. No utilizan entorno de preproducción ya que tienen el entorno de integración configurado y dimensionado de forma similar al de producción.

Partimos de esta vista general de producción que, en nuestro caso, va a ser representativa también de los entornos previos de desarrollo e integración. En caso de tener diferencias entre entornos es recomendable realizar un diagrama por entorno.

estructura de un diagrama por entorno

Para desplegar la nueva web de Servicios de RRHH, usaremos Kubernetes como indicamos en el artículo anterior. Necesitaremos desplegar un nuevo cluster de servidores en el CPD del cliente para ello. El SO a utilizar será Ubuntu 24, que es la última versión utilizada por el cliente.

Se ha evaluado la posibilidad de utilizar un servicio gestionado en Azure de Kubernetes, pero se estimó conveniente tras analizarlo con el equipo de sistemas desplegarlo en el CPD por cercanía con las aplicaciones existentes, como base para nuevos desarrollos y formación del equipo del hospital (y por conveniencia de dar más variedad al caso práctico).

Se planteó la opción de desplegar los servidores de Kubernetes como máquinas virtuales en los servidores actuales, pero tras revisarlos se identifica la necesidad de adquirir y desplegar nuevas máquinas, con los plazos que eso conlleva. Al hacerlo en fase de diseño, lo hemos identificado con tiempo para adquirirlos e instalarlos.

Para las aplicaciones existentes, no necesitamos detallar la infraestructura si no va a tener cambios para no perder el foco de los que necesitamos hacer en el proyecto. Más adelante evaluaremos si es necesario hacer crecer esa infraestructura.

El resto de componentes son servicios PaaS/SaaS para los que no necesitamos diseñar infraestructura. Su dimensionamiento lo revisaremos en los capítulos siguientes.

Redes

En el caso de implementar una infraestructura desde el inicio, un punto de partida es el diseño de la topología de red y las subredes como marco para ordenar el despliegue de la infraestructura de la forma más eficiente, especialmente a nivel de comunicaciones con foco en el ancho de banda necesario y las latencias.

Normalmente, vamos a partir de unas redes ya desplegadas con unos criterios y reglas a seguir, y las tomaremos como punto de partida.

No es objeto de este artículo entrar en detalle sobre el diseño de la red, al igual que no detallo patrones de diseño de arquitectura o de software, pero sí es importante disponer de este diseño en este punto para incluirlo en el modelo de solución, ya que la configuración de red de los elementos de infraestructura dependerá del diseño de las redes.

Caso práctico

El cliente actualmente tiene sus sistemas en una red interna y una red externa DMZ en su CPD del propio hospital.

El cluster de servidores para Kubernetes se despliega en su CPD y se configura dentro de la red interna. Como web server, utilizaremos el que actualmente tienen en la DMZ para el resto de aplicaciones.

Cada entorno tiene su propia subred dentro de la red interna y los servidores se configurarán dentro de las subredes correspondientes ya existentes en los entornos.

En Azure y CloudHub como proveedores cloud, contamos con que disponen de sus propias redes internas para configurar de forma privada los servicios y habilitar el acceso solamente a ellos a través de conexiones VPN. Actualmente, disponemos de servicio VPN desplegado en el CPD, por lo que se configuran los clientes VPN correspondientes en los servicios cloud. Se configurarán los DNS para resolver las URLs de los servicios cloud a través de la red privada.

Recursos

En esta sección enumeramos los recursos de hardware, software y servicios que vamos a necesitar y la configuración relevante desde el punto de vista de arquitectura para cumplir con la arquitectura técnica y los requisitos no funcionales.

Máquinas

Nombre IP Modelo Dimensionamiento
Nombre de la máquina IP de la máquina Modelo de la máquina Dimensionamiento de CPU, memoria, disco

Continuidad de negocio

Componente de aplicación Rendimiento Balanceo y clustering Requisitos de recuperación
Nombre del componente de aplicación Volumen de operaciones /s Disponibilidad, balanceadores de carga, configuración del cluster Redundancia de datos, configuración de backup, réplica de datos

Bases de datos

Nombre Servidor Tipo de BD Volumen de transacciones
Nombre de la BD Nombre del servidor de la BD Producto de BD Volumen de op /s
Almacenamiento inicial Crecimiento mensual Retención de datos Req. cifrado de datos
Tamaño de carga inicial Crecimiento esperado de los datos Tiempo de archivado de datos Req. cifrado de datos

Unidades de ficheros

Nombre Tipo de almacenamiento Tipo de acceso
Nombre de la unidad Tipo de almacenamiento Acceso por aplicaciones / usuarios
Almacenamiento inicial Crecimiento mensual Req. cifrado de datos
Tamaño inicial del almacenamiento Crecimiento esperado Req. cifrado de datos

SFTP / Envíos de ficheros

Almacenamiento inicial Crecimiento mensual Políticas de limpieza Acceso de apps Ruta de acceso
Tamaño inicial del almacenamiento Crecimiento esperado Tareas de limpieza de datos Acceso de apps Ruta relativa de acceso

Máquinas

Nombre IP Modelo Dimensionamiento
srvpdkub01 172.168.1.30 CPU: Intel i7, Memoria: 8 GB, Disco: 100 GB
srvpdkub02 172.168.1.31 CPU: Intel i7, Memoria: 8 GB, Disco: 100 GB
srvpdkub03 172.168.1.32 CPU: Intel i7, Memoria: 8 GB, Disco: 100 GB
srvpdkub04 172.168.1.33 CPU: Intel i7, Memoria: 8 GB, Disco: 100 GB
srvinkub01 172.168.2.30 CPU: Intel i7, Memoria: 8 GB, Disco: 100 GB
srvinkub02 172.168.2.31 CPU: Intel i7, Memoria: 8 GB, Disco: 100 GB
srvinkub03 172.168.2.32 CPU: Intel i7, Memoria: 8 GB, Disco: 100 GB
srvinkub04 172.168.2.33 CPU: Intel i7, Memoria: 8 GB, Disco: 100 GB
srvdekub01 172.168.2.30 CPU: Intel i7. Memoria: 4 GB. Disco: 10 GB
srvdekub02 172.168.2.31 CPU: Intel i7, Memoria: 4 GB, Disco: 10 GB

Se enumeran las máquinas a comprar para dar soporte a la instalación de Kubernetes. En este caso no necesitamos concretar un modelo, pero sí el dimensionamiento de los recursos. Estos recursos son tallas pequeñas, pero son suficientes para soportar 4 veces las necesidades del proyecto y se considera que no es necesario recortar más estos recursos.

Al tratarse de recursos físicos, hay que considerar el uso que se les pueda dar en los próximos años. Se ha tenido en cuenta que el cluster de Kubernetes servirá tanto para crear nuevos servicios como para migrar las aplicaciones de los servidores obsoletos actuales más adelante.

Servicios cloud

Nombre Tipo de servicio IP / URL Dimensionamiento del servicio
Mulesoft Anypoint PaaS https://anypoint.mulesoft.com/ 2 cores producción y 2 cores entornos previos
Azure Active Directory SaaS https://entraID.azure.com Standard Office 365
Azure Event Grid PaaS https://eventgrid.azure.com Bajo demanda
Azure Functions PaaS https://hospital.com/api/ Bajo demanda
Azure SQL SaaS 173.0.1.30 Bajo demanda

Para los servicios cloud, detallamos también el dimensionamiento de los servicios según los criterios que proporcionan los proveedores. En este caso, hemos optado por el dimensionamiento mínimo para la carga actual siguiendo los criterios que ya describimos en el diseño de arquitectura técnica. La ventaja de usar servicios cloud es que, más adelante, podremos ampliarlos sin efecto en los usos actuales.

Continuidad de negocio

Componente de aplicación Rendimiento Balanceo y clustering Requisitos de recuperación
App web Servicios de RRHH 2300 operaciones / 15 días + navegación 1 cluster Kubernetes sin redundancia geográfica
Balanceo del cluster de carga con Ingress
Controller
N/A
App back Servicios de RRHH 7000 operaciones / 15 días
Pico de 2000 operaciones / hora
Sin cambios Backup cada hora
Sin cambios en redundancia de datos
App gestión de empleados Incremento de 20 operaciones en momento pico Sin cambios Sin cambios
API Gateway 5000 operaciones / 15 días Por defecto del servicio Por defecto del servicio
Azure Active Directory 10000 operaciones / 15 días Por defecto del servicio Por defecto del servicio
Event Broker 2500 eventos / 15 días Por defecto del servicio Por defecto del servicio
Gestor de notificaciones 2000 operaciones / 15 días Por defecto del servicio Por defecto del servicio
Azure SQL 4000 operaciones / 15 días Por defecto del servicio Por defecto del servicio

Considerando los requisitos no funcionales descritos, podemos calcular la carga que van a soportar cada uno de los componentes de aplicación, agrupando las volumetrías de las integraciones soportadas por los servicios que implementan.

Podemos ver que los volúmenes de operaciones se reparten a lo largo de la segunda quincena de cada mes con operaciones mayormente manuales. Hay momentos de carga pico en el proceso de planificación pero, incluso con el uso de paginación de los servicios, el número de llamadas es bajo.

¿Cómo sabemos que es bajo o alto? Comparando el rendimiento requerido con la capacidad de rendimiento que tienen los servicios. La forma de saberlo es realizando pruebas de estrés con servicios similares sobre esa configuración o una parecida del servidor.

Observando los resultados de las pruebas de estrés de las aplicaciones de gestión de empleados y servicios de RRHH que se hicieron en su momento, vemos que pueden soportar hasta 20 peticiones/s de forma continua sin degradarse. Deberían soportar bien su carga actual (unas 2 peticiones/minuto) con el incremento planteado en el proyecto (picos de 0,5 peticiones/s y de 20 peticiones en 1 o 2 segundos). Sobre el cluster de Kubernetes no tenemos pruebas de estrés, pero esperamos una carga de menos de 2 peticiones/minuto.

Para soportar el diseño, podemos indicar al equipo de desarrollo que ponga foco en estas pruebas o solicitar realizar una POC del cluster con pruebas de estrés sobre una app dummy para confirmarlo.

¿Qué ocurriría si, en lugar de gestionar la planificación de un hospital, extendiéramos la aplicación a todos los hospitales de la Comunidad de Madrid o España? Podríamos estar multiplicando las volumetrías por 100 o 200. No necesitamos multiplicar los servidores en ese mismo orden de magnitud para soportar la carga promedio, lo que supondría un ahorro de coste global, pero necesitaríamos capacidad elástica para los momentos pico, lo que nos llevaría a pensar en un despliegue en cloud con recursos bajo demanda o un cambio de la arquitectura técnica.

En la descripción de los requisitos no funcionales vimos que se dispone de tiempo para recuperar manualmente los servicios y se decide no implementar redundancia de los servicios desplegados en CPD. Para los servicios cloud se configurará redundancia de zona en configuración Activo / Pasivo para casos de caída local.

Por las indicaciones de negocio que recogimos en el RPO, se necesita realizar backup al menos cada hora de las bases de datos de CPD. En los servicios cloud este requisito se cubre suficientemente con la configuración por defecto, que es cada 10 minutos.

Bases de datos

Nombre Servidor Tipo de BD Vol. de transac. Alm. inicial Crec. mensual Ret. de datos Req. cifrado de datos
BD Serv. de RRHH dbpdrrhh01 SQL Server +4000 / 15 días 1GB + 30 MB 2 años Tabla planificación
BD Serv. de RRHH dbinrrhh01 SQL Server +40000 / 90 días 1GB + 300 MB 3 meses N/A
BD Serv. de RRHH dbderrhh01 SQL Server +40000 / 90 días 1GB + 300 MB 3 meses N/A
BD Gestor de notif. adbpdgnot01 Azure SQL 4000 / 15 días 10MB 0 MB N/A N/A
BD Gestor de notif. adbingnot01 Azure SQL 40000 / 90 días 10MB 0 MB N/A N/A
BD Gestor de notif. adbingnot01 Azure SQL 40000 / 90 días 10MB 0 MB N/A N/A

La base de datos actual de la aplicación de servicios de RRHH está en SQL Server y su carga se verá incrementada en unas 4.000 operaciones cada 15 días. Con este volumen de operaciones, no se considera necesario ampliar los recursos del servidor de BD.

Con el crecimiento mensual estimado en base a los tamaños de datos de las operaciones que vimos en el diseño de arquitectura técnica es de unos 30 MB mensuales, por lo que, con vistas a su uso durante los 2 años de retención de datos necesarios, necesitaremos ampliarla sobre 1 GB de espacio.

La tabla de planificación de turnos de cada sanitario se puede considerar información privada que se debe configurar para que se cifre.

En el caso de la BD del gestor de notificaciones, su contenido es fijo, ya que es información de parametrización del servicio. La dimensionamos con los recursos mínimos necesarios.

Comunicaciones

Es un clásico encontrarnos con bloqueos y problemas en las pruebas o al desplegar en producción porque no se han configurado todas las comunicaciones convenientemente.

Esta sección nos sirve para revisar todas las comunicaciones que se establecen en la solución de arquitectura. Una forma sencilla de obtenerlas es a través de las integraciones, pero agrupándolas por los componentes, servicios o subredes de origen y destino de las integraciones.

Al revisar las integraciones sobre el modelo de infraestructura podremos ver los saltos entre redes y configuraciones necesarias para habilitar las comunicaciones. Podremos revisar también si hay comunicaciones muy lejanas que pudieran dar problemas con las latencias.

Comunicaciones

Origen Geografía origen Destino Geografía servicio Puerto / servicio Reglas de firewall
Servidor de origen de la comunicación Ubicación geográfica del servidor de origen Servidor de destino de la comunicación Ubicación geográfica del servidor de destino Puerto de acceso Reglas de firewall a considerar

Caso práctico

Comunicaciones

Origen Geografia origen Destino Geografia destino Puerto / servicio Reglas de firewall
Internet España Web server Madrid 443 N/A
Web server Madrid Ingres Cluster Kubernetes y App gestión empleados Madrid 443 Allow DMZ - Red interna
App web y back de servicios de RRHH Madrid API Gateway Zaragoza 443 Allow Red Interna - Red CloudHub
API Gateway Zaragoza App back Servicios de RRHH y App gestión empleados Madrid 443 Allow Red CloudHub - Red Interna
Planificador de procesos periódicos y app back Servicios de RRHH Madrid Event Broker Barcelona 9092 Allow Red Interna - Red interna Azure
Event Broker Barcelona App back Servicios de RRHH Madrid 443 Allow Red interna Azure - Red Interna

La mayoría de las comunicaciones son mediante servicios REST por HTTPS, por lo que necesitaremos permitir comunicaciones en los firewalls de cada red por el puerto correspondiente. En el caso de las comunicaciones de eventos con el broker, será el puerto específico del protocolo Kafka.

Los sistemas del CPD se encuentran todos en Madrid. Los servicios cloud los configuraremos en las geografías más cercanas disponibles.

Batch

Para configurar la planificación de los procesos batch identificados en el diseño técnico necesitamos proporcionar algunos detalles adicionales para que el equipo de sistemas pueda valorar cómo encajan en la malla batch.

Nombre del proceso Nombre del job Aplicación Planificación Puerto / servicio Reglas de firewall
Nombre del proceso batch Nombre del job Aplicación a la que pertenece el proceso Planificación de la ejecución del proceso 443 N/A

Caso práctico

Aunque no tenemos procesos batch como tales, sí que tenemos procesos planificados en determinados momentos y podemos detallarlos en esta sección.

Nombre del proceso Nombre del job Aplicación Planificación
Evento día 15 del mes Producción jobpddia15 App Servicios de RRHH Día 15 de cada mes
Evento día 20 del mes Producción jobpddia20 App Servicios de RRHH Día 20 de cada mes
Evento día 25 del mes Producción jobpddia25 App Servicios de RRHH Día 25 de cada mes
Evento día 15 del mes Integración jobindia15 App Servicios de RRHH Día 15 de cada mes
Evento día 20 del mes Integración jobindia20 App Servicios de RRHH Día 20 de cada mes
Evento día 25 del mes Integración jobindia25 App Servicios de RRHH Día 25 de cada mes
Evento día 15 del mes Desarrollo jobdedia 15 App Servicios de RRHH Día 15 de cada mes
Evento día 20 del mes Desarrollo jobdedia20 App Servicios de RRHH Día 20 de cada mes
Evento día 25 del mes Desarrollo jobdedia25 App Servicios de RRHH Día 25 de cada mes

Operación

Finalmente, para conseguir una buena calidad de la arquitectura desplegada, necesitamos definir los recursos de monitorización y operación que se necesitan configurar.

Quizá sea discutible si este punto es relevante para la arquitectura o es una cuestión más de QA o DevOps, pero es importante definirlo, sobre todo cuando estamos desplegando nueva infraestructura o hay que analizar la necesidad de introducir nuevas herramientas de monitorización.

Para gestionarlo, se puede acordar con los equipos de desarrollo y sistemas si debe formar parte del diseño de arquitectura o de otra documentación de despliegue. Lo relevante es que quede definido y sea producto del trabajo en equipo.

Sondas de monitorización

Nombre de sonda Aplicación de la sonda URL Planificación Gestión de errores
Nombre de la sonda Aplicación que monitoriza la sonda URL de la sonda Planificación de ejecución de la sonda Comportamiento cuando detecta errores o timeouts

Agentes de monitorización

Nombre del agente Máquina Planificación Patrones de alerta Alert management
Nombre de la sonda Máquina a monitorizar Planificación de ejecución del agente Patrones para lanzar alertas Comportamiento cuando se lanza la alerta

Alertas de logs

Patrón Aplicación Log URL Alert management
Nombre del patrón Aplicación que monitoriza la alerta URL de los logs a analizar Comportamiento cuando se lanza la alerta

Caso práctico

En nuestro proyecto, necesitamos desplegar agentes de monitorización en los nuevos servidores del cluster de Kubernetes con el sistema de monitorización ya existente.

Agentes de monitorización

Nombre del agente Máquina Planificación Patrones de alerta Alert management
agepdkub01 srvpdkub01 24x7 Memoria 80% +5 minutos
CPU 100% +5 minutos
Email al administrador
agepdkub02 srvpdkub02 24x7 Memoria 80% +5 minutos
CPU 100% +5 minutos
Email al administrador
agepdkub03 srvpdkub03 24x7 Memoria 80% +5 minutos
CPU 100% +5 minutos
Email al administrador
agepdkub04 srvpdkub04 24x7 Memoria 80% +5 minutos
CPU 100% +5 minutos
Email al administrador

Los patrones de alerta y gestión de alerta serán los acordados con el equipo de sistemas.

Alertas de logs

Patrón Aplicación Log URL Alert management
[ERROR] App back Servicios de RRHH /appbackrrhh
/logs/*.log
Alerta en el monitor de aplicaciones
[FATAL ERROR] App back Servicios de RRHH /appbackrhh
/logs/*.log
Email al administrador
"502 ERROR" || "503 ERROR" App web Servicios de RRHH /webserver
/logs/*.log
Email al administrador
[ERROR] Gestor de notificaciones /azurelogs
/gesnotificaciones
/*.log
Alerta en el monitor de aplicaciones
[FATAL ERROR] Gestor de notificaciones /azurelogs
/gesnotificaciones
/*.log
Email al administrador

También veremos con el equipo de desarrollo cómo van a detallar los errores en los logs y datos relevantes para ser monitorizados y que deban generar alertas.

Conclusiones

En este artículo hemos visto cómo detallar los recursos de infraestructura necesarios para implantar la solución de arquitectura con una visión completa.

Para el modelo de arquitectura, utilizado principalmente en las fases de conceptualización y análisis de los proyectos, no necesitamos detallar mucho más, ya que no se trata de definir la configuración concreta de los componentes, sino de estimar las necesidades de infraestructura y validar la viabilidad y coste de la solución. En momentos más avanzados del proyecto, los equipos de desarrollo y sistemas podrán utilizar esta base para terminar de diseñar el despliegue de la infraestructura.

Los contenidos expuestos en las tablas son una propuesta perfectamente discutible y flexible que puede servir de base para que la puedas personalizar y adaptar a tus necesidades. Deja cualquier sugerencia de mejora que identifiques en los comentarios.

Llegados a este punto, tenemos el contenido técnico completo del modelo de solución. Pero esto no es todo. En el próximo capítulo veremos cómo rematarlo incluyendo las consideraciones importantes para interpretar y tener contexto sobre el proceso de diseño.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete