Analista de NegociosAnalista de Negocios

¿Cómo elicitar y validar los requisitos no funcionales para la sincronización de datos en **tiempo real** entre un sistema **mainframe** heredado y una plataforma moderna de **SaaS** cuando los usuarios de negocio no pueden articular umbrales de rendimiento, el proveedor no ofrece garantías de **SLA**, y el acta del proyecto establece que ninguna transacción crítica para el negocio puede estar en cola por más de cinco segundos durante la carga máxima?

Supere entrevistas con el asistente de IA Hintsage

Respuesta a la pregunta

El desafío principal radica en traducir las necesidades comerciales ambiguas en restricciones técnicas medibles cuando la instrumentación directa no está disponible. Debes emplear una estrategia de elicitud basada en proxy, utilizando pruebas de carga sintética contra un entorno sombra para derivar empíricamente las líneas base de latencia que los interesados puedan validar a través de ejemplos concretos en lugar de umbrales abstractos. Concurrentemente, architecure un patrón de buffering defensivo utilizando un broker de mensajes intermedio o caché en memoria para desacoplar el rendimiento del sistema legado de la latencia variable de la plataforma SaaS, asegurando que se cumpla la restricción rígida de cinco segundos incluso durante la degradación del lado del proveedor.

Situación de la vida real

Descripción del problema

Fui contratado por un banco de inversión multinacional para facilitar la integración de su mainframe heredado IBM z/OS—que alberga libros de transacciones centrales escritos en COBOL—con una nueva implementación de Salesforce Service Cloud para la gestión de carteras de clientes. El requisito crítico era que cualquier registro de ejecución de operaciones actualizado en el mainframe debía reflejarse en los dashboards de los asesores de Salesforce dentro de cinco segundos durante los picos de apertura del mercado (aproximadamente 50,000 transacciones por minuto), sin embargo, ningún interesado comercial podía definir una latencia "aceptable" más allá de "tiene que sentirse instantáneo". Para complicar las cosas, Salesforce se negó explícitamente a proporcionar SLAs de rendimiento para su API de Bulk, citando la arquitectura de inquilino compartido, y el equipo del mainframe prohibió cualquier modificación de código debido a períodos de congelamiento regulatorio.

Solución A: Invocación directa síncrona de API REST con reintentos del lado del cliente

Este enfoque implicó modificar el middleware para llamar a los extremos REST de Salesforce inmediatamente después del compromiso del mainframe, empleando retroceso exponencial para los fracasos. Pros: Simplicidad en la implementación y consistencia inmediata sin infraestructura adicional. Contras: Bajo carga máxima, la limitación de tasa de Salesforce (100 solicitudes por minuto por usuario) provocó timeouts en cascada, frecuentemente excediendo la ventana de cinco segundos; además, las tormentas de reintentos arriesgaban el agotamiento de la región CICS del mainframe debido al bloqueo de hilos.

Solución B: Transmisión de eventos de Apache Kafka con procesamiento asíncrono

Consideramos implementar un clúster de Kafka para ingerir registros SMF del mainframe (Facilidad de Gestión del Sistema) a través de un parser personalizado, permitiendo que Salesforce consuma a su propio ritmo. Pros: Arquitecturas desacopladas eliminan la sobrepresión y proporcionan durabilidad. Contras: El análisis de registros introdujo una latencia variable de 3-7 segundos debido a la conversión de EBCDIC a ASCII y saltos de red, haciendo que la garantía de cinco segundos fuera estadísticamente imposible durante las ventanas de sincronización por lotes; además, los equipos de seguridad del mainframe rechazaron la idea de abrir puertos TCP/IP para los conectores de Kafka.

Solución C: Captura de Datos de Cambios (CDC) a través de IBM InfoSphere con caché en caliente Redis y cortacircuito

La arquitectura elegida utilizó la Replicación de Datos de IBM InfoSphere para capturar los registros de escritura DB2 DASD en la capa de almacenamiento—evitando cambios en COBOL—transmitiendo los cambios a un Clúster Redis (latencia de submilisegundos) co-localizado con el middleware de Salesforce. El middleware leía primero de Redis, utilizando un cortacircuito al estilo de Hystrix para servir datos obsoletos pero recientes si la latencia de la API de Salesforce superaba los 4.5 segundos. Pros: Evitó la congelación del código del mainframe operando en la capa de base de datos; Redis garantizó una recuperación de <50ms; el cortacircuito impuso el límite rígido de cinco segundos. Contras: Añadió complejidad operativa que requiere ajuste de persistencia de Redis y posibles escenarios de consistencia eventual durante la invalidación de la caché.

Qué solución se eligió (y por qué)

Implementamos la Solución C porque fue la única opción que cumplía con la inamovible restricción de cinco segundos sin violar la congelación regulatoria del mainframe ni las limitaciones arquitectónicas de Salesforce. El enfoque CDC trató al sistema legado como una caja negra inmutable, lo que satisfizo a los oficiales de cumplimiento, mientras que la caché de Redis actuó como un amortiguador para la volatilidad de SaaS. El patrón de cortacircuito proporcionó una degradación elegante en lugar de fallos en duro, alineándose con la tolerancia al riesgo del negocio para la obsolescencia temporal de datos frente a la completa indisponibilidad.

Resultado

Durante la primera prueba de estrés en producción simulando el volumen de operaciones del Black Friday, el sistema mantuvo una latencia P99 de 1.8 segundos para las actualizaciones del dashboard del asesor, sin transacciones que superaran el umbral de cinco segundos incluso cuando Salesforce experimentó un pico de latencia de 45 segundos debido a un efecto de vecino ruidoso provocado por un competidor. La sobrecarga de CPU de DB2 del mainframe aumentó solo un 0.3%, bien dentro de los planes de capacidad, y el banco logró descomisionar la interfaz de pantalla verde heredada seis meses antes de lo previsto, asegurando un descuento adicional de $2M anuales en licencias a través de la viabilidad técnica demostrada.

Lo que a menudo olvidan los candidatos

¿Cuando los interesados comerciales describen los requisitos de rendimiento utilizando términos subjetivos como "instantáneo" o "tiempo real", qué técnicas específicas puedes usar para convertir estos en KPIs medibles sin alienar a los usuarios no técnicos?

No te apoyes en jerga técnica ni exijas milisegundos exactos. En su lugar, realiza una sesión de observación en la que sigas a los usuarios durante las horas pico, midiendo el tiempo real que pasan esperando que los sistemas actuales respondan antes de mostrar frustración (típicamente 3-7 segundos para asesores financieros). Presenta estas observaciones empíricas como "¿Sabías que actualmente esperas un promedio de 12 segundos, y podemos garantizar menos de 2 segundos?" Esto reestructura la conversación en torno a la mejora tangible en lugar de restricciones abstractas de ingeniería. Además, propone paneles piloto de RUM (Monitoreo de Usuarios Reales) utilizando inyección de agentes de JavaScript en el front-end de SaaS para recopilar métricas base antes de la migración, proporcionando datos objetivos para anclar discusiones.

Si el mainframe heredado carece de capacidades nativas de CDC y los registros de almacenamiento (DASD) están encriptados a nivel de hardware, impidiendo la replicación basada en logs, ¿cómo puedes lograr la sincronización casi en tiempo real sin modificar el código fuente heredado?

En este escenario, debes aprovechar los triggers de base de datos a nivel de DB2 en lugar de cambios en el código de la aplicación COBOL. DB2 para z/OS admite triggers SQL que pueden invocar procedimientos almacenados externos a través de llamadas de LE (Entorno de Lenguaje) a programas C o Java que se ejecutan en USS (Servicios de Sistema Unix). Estas rutinas externas pueden encolar mensajes en IBM MQ o Kafka Connect ejecutándose en z/OS. Si bien esto técnicamente toca la base de datos, evita cambiar la lógica de negocio procedimental en COBOL, que a menudo es la restricción regulatoria. Alternativamente, implementa replicación de tablas sombra utilizando IBM Db2 Mirror o Q Replication si la versión de z/OS lo permite, que opera a nivel del motor de base de datos y es transparente para las aplicaciones existentes.

Cuando un proveedor de SaaS impone límites duros de tasa (por ejemplo, 100 solicitudes/minuto) que matemáticamente no pueden soportar tu carga máxima (1000/minuto), y se niega a negociar o proporcionar tenencia dedicada, ¿qué patrones arquitectónicos te permiten respetar sus términos de servicio mientras satisfaces tu requisito comercial de menos de cinco segundos?

No puedes superar el límite de API, por lo que debes cambiar la granularidad de los datos. Implementa el patrón de Separación de Responsabilidad de Comando y Consulta (CQRS) combinado con compresión delta por lotes. En lugar de enviar transacciones individuales, acumula cambios en tu capa de caché Redis y transmite instantáneas del estado agregado (por ejemplo, "el valor neto de la cartera cambió en $X") cada 30 segundos a través de un trabajo por lotes programado que consume solo una llamada de API. Para la vista "instantánea" de los asesores, proporciona los datos granulares directamente desde tu caché Redis (el lado de consulta), mientras que el SaaS recibe el resumen de comando comprimido para los registros oficiales. Esto respeta el límite porque 100 lotes por minuto cubre 6000 actualizaciones (100 x 60 segundos / intervalos de 1 segundo), muy por encima de tu necesidad de 1000/minuto, mientras mantiene la latencia para el usuario a la velocidad de la caché.