La fonctionnalité “Offrir un article” est une initiative majeure au sein du Parisien, visant à renforcer l’engagement des abonnés tout en attirant de nouveaux prospects. Cette fonctionnalité repose sur une architecture technique robuste, conçue pour garantir à la fois la sécurité, la scalabilité et une expérience utilisateur fluide.
Conception générale de la fonctionnalité
L’objectif principal de la fonctionnalité est de permettre aux abonnés de partager un lien unique et temporaire donnant accès à un article. Lorsqu’un abonné choisit de partager un contenu, un lien spécifique est généré, associant l’article à son compte et à une date d’expiration prédéfinie. Le destinataire de ce lien doit se connecter ou créer un compte pour accéder à l’article. Ce processus garantit la sécurité et une traçabilité complète. Une fois expiré, le lien devient automatiquement invalide, préservant ainsi la valeur des contenus réservés.
Architecture technique
L’implémentation technique de “Offrir un article” repose sur plusieurs composants interconnectés, offrant une solution moderne et efficace.
Les utilisateurs de la plateforme interagissent avec l’API Gateway via ARC (“journal”) ou via Authentication (connexion/création de compte). Cette Gateway agit comme un point central de communication, relayant les requêtes des utilisateurs vers différents microservices gérant les données et les logiques associées.
Backend : Symfony et NestJS
Le backend de cette fonctionnalité utilise Symfony comme API Gateway principale. Cette API gère les requêtes des utilisateurs et les transmet à une Gateway API AWS qui orchestre les différents microservices. Contrairement à l’API Gateway, tous les microservices sont implémentés avec NestJS. Ces microservices incluent notamment l’API User, l’API OAuth, l’API Invitation, l’API Subscription, l’API Offer et l’API Advantage. Chaque microservice interagit avec sa table spécifique pour gérer les données associées.
Gestion des Données avec DynamoDB
DynamoDB joue un rôle crucial dans l’architecture. Chaque lien généré est stocké avec des détails précis, permettant une gestion rigoureuse des partages. Pour s’assurer que les articles ne soient pas accessibles indéfiniment, un TTL (Time to Live) est configuré sur les enregistrements. Ainsi, les liens expirent automatiquement et deviennent inaccessibles sans intervention manuelle. DynamoDB Streams est utilisé pour détecter et traiter les modifications sur les tables « invitations » et « avantages », activant des événements critiques comme le renouvellement de quotas ou la suppression des invitations expirées.
Orchestration et Automation avec AWS Lambda, SQS et State-Machines
Les fonctions Lambda sont au cœur de l’orchestration. Elles récupèrent les messages des DynamoDB Streams et initient des workflows complexes via des state-machines. Ces workflows incluent la validation des invitations, le décrément des quotas, ou encore le renouvellement des avantages des utilisateurs. Pour garantir la communication fluide entre les différents services, SQS (Simple Queue Service) est utilisé comme système de transit. Lorsqu’une commande Lambda récupérer un DynamoDb Streams, elle émet un message, qui transite via SQS jusqu’au service gérant les state-machines. Une autre commande Lambda dédiée lit ces messages et lance la state-machine appropriée.
Gestion des Configurations avec AWS AppConfig
Pour assurer une flexibilité maximale, les paramètres critiques, comme la durée d’expiration des invitations, sont gérés dynamiquement via AWS AppConfig. Cela permet aux équipes de mettre à jour les règles sans avoir à modifier le code source ou redéployer les services.
Frontend et Expérience Utilisateur
Côté frontend, tous les appels nécessaires passent par notre Gateway API. La Gateway fournit une expérience fluide en exposant des points d’accès simplifiés pour consulter les quotas restants, générer des liens instantanément et valider des invitations.
Défis et Solutions
La gestion des quotas en temps réel présente un des principaux défis techniques. DynamoDB Streams et des workflows automatisés garantissent une mise à jour continue des quotas sans erreurs. De plus, l’intégration de SQS pour la communication inter-service renforce la fiabilité et réduit les délais de traitement. En ce qui concerne la sécurité, chaque lien contient un jeton signé, vérifié lors de chaque accès, prévenant ainsi tout abus potentiel.
Conclusion
La fonctionnalité “Offrir un article” illustre parfaitement l’adoption de technologies modernes pour répondre aux besoins stratégiques de l’entreprise. En combinant Symfony, NestJS, AWS Lambda, DynamoDB, SQS, AppConfig et Step Functions, nous avons créé une solution scalable et sécurisée, tout en maintenant une expérience utilisateur intuitive. Ce projet met en lumière l’importance de l’orchestration inter-service et de l’automatisation, permettant de déployer rapidement des fonctionnalités innovantes tout en préservant la qualité des contenus et la satisfaction des abonnés.