Analyse systèmeAnalyste commercial

Comment élucider et valider les exigences non fonctionnelles pour la synchronisation des données **en temps réel** entre un système **mainframe** hérité et une plateforme moderne **SaaS** lorsque les utilisateurs métiers ne peuvent pas articuler les seuils de performance, que le fournisseur ne garantit aucun **SLA**, et que la charte du projet exige qu'aucune transaction critique pour l'entreprise ne soit mise en file d'attente pendant plus de cinq secondes en période de charge maximale ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse à la question

Le principal défi réside dans la traduction des besoins commerciaux vagues en contraintes techniques mesurables lorsque l'instrumentation directe est indisponible. Vous devez adopter une stratégie d'élucidation basée sur un proxy, en utilisant des tests de charge synthétiques contre un environnement miroir pour dériver empiriquement des références de latence que les parties prenantes peuvent valider par des exemples concrets plutôt que par des seuils abstraits. Parallèlement, concevez un modèle de mise en mémoire tampon défensive en utilisant un courtier de messages intermédiaire ou un cache en mémoire pour découpler le débit du système hérité de la latence variable de la plateforme SaaS, garantissant que la contrainte dure de cinq secondes soit respectée même en cas de dégradation côté fournisseur.

Situation vécue

Description du problème

J'ai été engagé par une banque d'investissement multinationale pour faciliter l'intégration de leur mainframe IBM z/OS — hébergeant des registres de transactions principaux écrits en COBOL — avec une nouvelle mise en œuvre de Salesforce Service Cloud pour la gestion de portefeuille client. L'exigence critique était que tout enregistrement d'exécution de transaction mis à jour dans le mainframe devait se refléter dans les tableaux de bord des conseillers de Salesforce dans un délai de cinq secondes pendant les pics d'ouverture du marché (environ 50 000 transactions par minute), pourtant aucun acteur commercial ne pouvait définir la latence "acceptable" au-delà de "cela doit sembler instantané". Pour compliquer les choses, Salesforce a explicitement refusé de fournir des SLA de débit pour leur Bulk API, citant une architecture multi-tenant, et l'équipe du mainframe a interdit toute modification de code en raison des périodes de gel réglementaire.

Solution A : Invocation REST API synchrone directe avec reprise côté client

Cette approche impliquait de modifier le middleware pour appeler immédiatement les points d'extrémité REST de Salesforce dès qu'il y avait un engagement dans le mainframe, en utilisant un retour exponentiel pour les échecs. Avantages : Simplicité d'implémentation et cohérence immédiate sans infrastructure supplémentaire. Inconvénients : En période de forte charge, la limitation de débit de Salesforce (100 demandes par minute par utilisateur) a déclenché des timeouts en cascade, franchissant fréquemment la fenêtre de cinq secondes ; de plus, les tempêtes de reprise risquaient d'épuiser la zone CICS du mainframe en raison du blocage des threads.

Solution B : Streaming d'événements Apache Kafka avec traitement asynchrone

Nous avons envisagé de déployer un cluster Kafka pour ingérer les journaux SMF (System Management Facility) du mainframe via un analyseur personnalisé, permettant à Salesforce de consommer à son propre rythme. Avantages : Les architectures découplées éliminent la rétropression et offrent de la durabilité. Inconvénients : L'analyse des journaux introduisait une latence variable de 3 à 7 secondes en raison de la conversion EBCDIC en ASCII et des sauts réseau, rendant la garantie de cinq secondes statistiquement impossible pendant les fenêtres de synchronisation par lot ; de plus, les équipes de sécurité du mainframe ont rejeté l'idée d'ouvrir des ports TCP/IP pour les connecteurs Kafka.

Solution C : Change Data Capture (CDC) via IBM InfoSphere avec cache en mémoire Redis et disjoncteur

L'architecture choisie utilisait IBM InfoSphere Data Replication pour capturer les journaux d'écriture en mode pré-écriture DB2 à la couche de stockage — évitant les modifications COBOL — en diffusant les changements vers un Cluster Redis (latence sub-millisecondaire) co-localisé avec le middleware Salesforce. Le middleware lisait d'abord à partir de Redis, utilisant un disjoncteur de style Hystrix pour servir des données récentes mais obsolètes si la latence de l'API Salesforce dépassait 4,5 secondes. Avantages : A évité le gel du code du mainframe en agissant au niveau de la base de données ; Redis garantissait des récupérations <50ms ; le disjoncteur faisait respecter la contrainte dure de cinq secondes. Inconvénients : Complexité opérationnelle accrue nécessitant un réglage de la persistance de Redis et des scénarios potentiels de cohérence finale lors de l'invalidation du cache.

Quelle solution a été choisie (et pourquoi)

Nous avons mis en œuvre la Solution C parce qu'elle était la seule option satisfaisant la contrainte immuable de cinq secondes sans violer le gel réglementaire du mainframe ou les limitations architecturales de Salesforce. L'approche CDC traitait le système hérité comme une boîte noire immuable, ce qui satisfaisait les agents de conformité, tandis que le cache Redis agissait comme un amortisseur pour la volatilité de SaaS. Le modèle de disjoncteur offrait une dégradation gracieuse plutôt que des pannes sévères, s'alignant sur la tolérance au risque de l'entreprise pour la stagnation temporaire des données plutôt que pour une indisponibilité complète.

Résultat

Lors du premier test de stress en production simulant le volume de trading du Black Friday, le système a maintenu une latence P99 de 1,8 seconde pour les mises à jour des tableaux de bord des conseillers, sans aucune transaction dépassant le seuil de cinq secondes même lorsque Salesforce a connu un pic de latence de 45 secondes en raison d'un effet voisin bruyant déclenché par un concurrent. La surcharge CPU DB2 du mainframe n'a augmenté que de 0,3 %, bien dans les plans de capacité, et la banque a réussi à décommissionner l'interface héritée green-screen six mois avant le calendrier prévu, obtenant ainsi 2 millions de dollars supplémentaires en remises sur les licences annuelles grâce à la faisabilité technique démontrée.

Ce que les candidats oublient souvent

Lorsque les acteurs commerciaux décrivent les exigences en matière de performance en utilisant des termes subjectifs comme "instantané" ou "en temps réel", quelles techniques spécifiques pouvez-vous utiliser pour les convertir en KPI mesurables sans aliéner les utilisateurs non techniques ?

Ne vous fiez pas au jargon technique ou n'exigez pas des millisecondes exactes. Au lieu de cela, réalisez une session d'observation où vous shadow les utilisateurs pendant les horaires de pointe, mesurant le temps exact qu'ils passent à attendre que les systèmes actuels répondent avant de montrer une frustration (généralement 3 à 7 secondes pour les conseillers financiers). Présentez ces observations empiriques sous la forme : "Saviez-vous qu'actuellement vous attendez en moyenne 12 secondes, et nous pouvons garantir moins de 2 secondes ?" Cela reformule la conversation autour de l'amélioration tangible plutôt que des contraintes d'ingénierie abstraites. De plus, proposez des tableaux de bord pilotes RUM (Real User Monitoring) utilisant l'injection d'agent JavaScript dans l'interface SaaS pour rassembler des métriques de base avant la migration, fournissant des données objectives pour ancrer les discussions.

Si le mainframe hérité ne dispose pas de capacités CDC natives et que les journaux de stockage (DASD) sont chiffrés au niveau matériel, empêchant la réplication basée sur les journaux, comment pouvez-vous atteindre une synchronisation quasi-temps réel sans modifier le code source hérité ?

Dans ce scénario, vous devez tirer parti des déclencheurs de base de données au niveau de la couche DB2 plutôt que des modifications de l'application COBOL. DB2 pour z/OS prend en charge les déclencheurs SQL qui peuvent invoquer des procédures stockées externes via des appels LE (Language Environment) à des programmes C ou Java s'exécutant dans les USS (Unix System Services). Ces routines externes peuvent ensuite mettre en file d'attente des messages vers IBM MQ ou Kafka Connect s'exécutant sur z/OS. Bien que cela touche techniquement à la base de données, cela évite de modifier la logique métier procédurale COBOL, ce qui est souvent la contrainte réglementaire. Alternativement, mettez en œuvre la réplication de tableau miroir en utilisant IBM Db2 Mirror ou Q Replication si la version z/OS le permet, ce qui fonctionne au niveau du moteur de base de données et est transparent pour les applications existantes.

Lorsque un fournisseur de SaaS impose des limites de taux strictes (par exemple, 100 demandes/minute) qui ne peuvent mathématiquement pas soutenir votre charge de pointe (1000/minute), et qu'ils refusent de négocier ou de fournir un hébergement dédié, quels modèles architecturaux vous permettent de respecter leurs conditions de service tout en répondant à votre exigence de moins de cinq secondes ?

Vous ne pouvez pas dépasser la limite de l'API, donc vous devez changer la granularité des données. Implémentez le modèle de Séparation des Responsabilités Commande et Requête (CQRS) combiné avec une compression delta batch. Au lieu d'envoyer des transactions individuelles, accumulez les changements dans votre couche de cache Redis et diffusez des instantanés d'état agrégés (par exemple, "la valeur nette du portefeuille a changé de $X") toutes les 30 secondes via un travail batch programmé qui consomme uniquement un appel API. Pour la vue "instantanée" des conseillers, servez les données granulaires directement depuis votre cache Redis (le côté requête), tandis que le SaaS reçoit le résumé de commande compressé pour l'enregistrement officiel. Cela respecte la limite car 100 lots par minute couvrent 6000 mises à jour (100 x 60 secondes / 1 seconde d'intervalle), bien au-dessus de votre besoin de 1000/minute, tout en maintenant une latence côté utilisateur à la vitesse du cache.