
Flux - Synchronisation des données fournisseurs
Une plateforme ETL interne automatisant la synchronisation quotidienne des données produits (stocks, prix, catalogues) de 30+ fournisseurs européens via FTP, HTTP et API REST vers la marketplace European Sourcing.
Fournisseurs intégrés
30+
8+ pays européens
Classes de connecteurs
37
Pattern Strategy (Lib/*.php)
Formats de données
7
CSV, XML, JSON, XLS, TSV, TXT, GZ
Taille BDD
~15 Go
Dump SQL complet (mars 2019)
Presentation
Le système nerveux de l'intégration des données fournisseurs européens
Flux (v1) et FluxV2 sont des applications web internes développées pour European Sourcing, une entreprise spécialisée dans le sourcing d'objets publicitaires et promotionnels à l'échelle européenne. Ces applications constituent le système nerveux de la synchronisation des données produits entre les fournisseurs et la plateforme European Sourcing.
La plateforme opère dans le domaine du e-commerce B2B / marketplace d'objets publicitaires. European Sourcing agit comme un agrégateur de catalogues de fournisseurs d'objets promotionnels (goodies, textiles, accessoires, articles de bureau, etc.) à destination des revendeurs européens. L'entreprise collecte, normalise et redistribue les données produits (stocks, prix, docs, fiches techniques) de dizaines de fournisseurs vers sa plateforme en ligne, alimentant environ 60 sites revendeurs.
Récupération de données multi-protocole
FTP, HTTP, API REST avec authentification variée (clés API, login/mot de passe, tokens, hash)
Normalisation de données hétérogènes
30+ formats propriétaires transformés en un schéma interne unifié
Mise à jour stocks et prix en quasi temps réel
Synchronisation automatisée quotidienne via cron avec grilles tarifaires dégressives
Re-indexation automatique du moteur de recherche
Déclenchement du sync Elasticsearch après chaque mise à jour fournisseur
Rapports détaillés et traçabilité
Rapports d'exécution horodatés avec logs téléchargeables, fichiers CSV et archives ZIP
Alertes email en cas d'échec
Notification email automatique à l'équipe en cas d'échec de synchronisation
Objectifs, Contexte, Enjeux et Risques
Comprendre la vision stratégique derriere le pipeline de données
- Automatiser a 100% la synchronisation des stocks et prix fournisseurs (exécution quotidienne par cron)
- Garantir la fraîcheur des données : stocks et prix mis à jour quotidiennement pour chaque fournisseur actif
- Normaliser 30+ formats proprietaires hétérogènes en un schéma interne unifie
- Assurer la traçabilité : chaque exécution génère un rapport horodaté avec logs détaillés
- Permettre le pilotage fin : activation/désactivation par fournisseur et par type de données
- S'inscrit dans un écosystème de 20+ applications sous *.europeansourcing.com (extranet, API, moteur de recherche, export, statistiques, traduction, etc.)
- Développement sous l'organisation GitHub medialeads (~8 développeurs), agence basée à Bordeaux
- Base de données MySQL maître/esclave partagée (~15 Go) avec tous les autres projets de la plateforme
- Environnements multiples : développeur (local), recette (es-recette.com), production (OVH)
- Enjeu commercial majeur : des stocks ou prix obsolètes génèrent des commandes impossibles a honorer, impactant directement la crédibilité et le chiffre d'affaires
- Couverture internationale : fournisseurs dans 8+ pays européens avec déclinaisons par pays
- Multiplicite des protocoles : FTP, HTTP, API REST avec authentification variee
Dependance aux formats fournisseurs
Toute modification de format par un fournisseur necessite une adaptation du code - risque de rupture silencieuse
Vulnerabilite d'injection SQL
Le handler POST des paramètres construit des clauses SQL directement à partir des données utilisateur sans sanitisation
Credentials en dur
Identifiants FTP et clés API codés en dur dans les classes PHP (amélioré en v2)
Absence de tests
Le seul fichier de test est un boilerplate Symfony non personnalisé (~0% de couverture)
Les Etapes - Ce que j'ai fait
Un parcours concret, phase par phase, de la construction
- Développement de 30+ connecteurs fournisseurs individuels (classes Lib/*.php)
- Construction du pipeline ETL complet : téléchargement → parsing → matching → mise à jour BDD → génération de rapports
- Implémentation de l'interface web avec dashboard, paramétrage par fournisseur, consultation des rapports et téléchargement des fichiers
- Création de l'exécution CLI via commande Symfony (php app/console lanceramaj)
- Mes contributions : connecteur BIC France, connecteur PF Concept v2 avec correctifs, connecteur Midocean (nouveau FTP), commit initial et import SVN
- Interface modernisée migrée de Bootstrap 3 à Bootstrap 4
- Architecture améliorée : namespace AppBundle\Flow\ remplaçant le bundle legacy
- Configuration externalisée : URL et type d'authentification paramétrables via l'interface web (vs code en dur en v1)
- Ajout de la colonne "Status" en temps réel au dashboard pour le suivi des exécutions
- Système de notification aux développeurs lors de toute modification d'un flux
Les Acteurs - Les Interactions
Une équipe restreinte et ciblée au sein d'un écosystème plus large
Le projet Flux a été principalement développé par 2 développeurs au sein de l'organisation medialeads (~8 personnes au total). Thomas C. était le développeur principal, ayant implémenté la majorite des connecteurs fournisseurs (28 commits, 65% du code). J'ai contribué 15 commits (35%) incluant le commit initial, la migration SVN et des connecteurs clés pour BIC France, PF Concept et Midocean.
Marina Lalague
Responsable catalogue / Product OwnerDécisions métier sur les priorites de synchronisation (stock uniquement vs sync complete)
Jennifer
Responsable data / catalogueDestinataire des alertes, gestion des credentials API fournisseurs
Le projet interagissait directement avec 30+ APIs et flux de données de fournisseurs européens - chacun avec ses propres protocoles, formats, méthodes d'authentification et contacts techniques. Cela exigeait une adaptation et une communication constantes avec les équipes techniques externes.
Les Résultats
Impact mesurable pour l'entreprise et croissance personnelle
- La synchronisation automatisée quotidienne garantit des données produits à jour pour les revendeurs sur europeansourcing.com → conversion améliorée, erreurs de commande réduites
- 6 120 variantes produits mises à jour en une seule exécution de 45 secondes (fournisseur Anda, août 2019)
- ~100 exécutions quotidiennes tous fournisseurs confondus, assurant une fraîcheur de données continue
- Couverture massive du catalogue : base de données de ~15 Go alimentant 60+ sites revendeurs
- Couverture géographique paneuropéenne : fournisseurs de 8+ pays intégrés de manière transparente
- Expertise approfondie en intégration de données hétérogènes (ETL) sur de multiples protocoles et formats
- Maîtrise du design pattern Strategy appliqué à une architecture réelle de connecteurs fournisseurs
- Compréhension de la gestion de catalogue e-commerce B2B à l'échelle européenne
- Expérience de l'architecture MySQL maître/esclave et des opérations de données à grande échelle
- Connaissance pratique des commandes CLI Symfony 2, services et système d'événements
Les Lendemains du projet
Au-dela de la livraison - cycle de vie et évolution
- 1FluxV2 était opérationnel et fonctionnel en août 2019, avec des logs montrant des exécutions quotidiennes réussies
- 2Le système a fonctionné en continu en production pendant au moins 3 ans, traitant des centaines de synchronisations quotidiennes
- 3L'évolution de v1 à v2 a démontré la capacité de l'équipe à itérer et améliorer : configuration externalisée, UI modernisée, meilleur monitoring
- 4Des backups complets ont été archivés en août 2019 (code, dumps SQL, captures d'écran), suggérant une période de transition ou de mise hors service
- 5Le projet est désormais archivé - European Sourcing a probablement fait évoluer son infrastructure de synchronisation depuis
Mon Regard Critique
Retrospective honnete sur les forces, faiblesses et lecons apprises
- Couverture fonctionnelle impressionnante : 30+ fournisseurs intégrés avec des protocoles et formats très variés, chacun avec ses spécificités de parsing - témoigne d'une compréhension approfondie des données de chaque fournisseur
- Pipeline robuste : le pattern Base/enfant permet d'ajouter facilement un nouveau fournisseur en n'implémentant que transformerEnProduits(), tout en héritant du pipeline complet
- Traçabilité exemplaire : chaque exécution produit un rapport horodaté avec logs détaillés et fichiers de résultats, permettant un diagnostic précis
- Évolution continue : la création de FluxV2 montre une capacité à remettre en question et améliorer l'existant (UI modernisée, paramétrage externalisé)
- Architecture pragmatique : le choix de SQL brut plutôt que l'ORM Doctrine s'explique par la nature des opérations (mises à jour massives, requêtes batch)
- Sécurité : injection SQL dans le handler POST des paramètres, credentials FTP/API codés en dur, authentification basique par session partagée
- Absence de tests : aucun test unitaire ou d'intégration - le fichier de test est un boilerplate Symfony non personnalisé
- Pas de CI/CD : déploiement probablement manuel via git pull sur le serveur, aucun pipeline d'intégration continue
- Couplage fort : les classes de connecteurs contiennent la logique de téléchargement, parsing, matching et mise à jour BDD mélangée
- Documentation inexistante : le fichier doc/index.rst est un placeholder vide, pas de README personnalisé
- L'intégration de données hétérogènes est un problème de normalisation, pas de code - comprendre chaque format fournisseur est le vrai travail avant d'écrire le moindre code
- Le pattern Strategy est idéal pour les variations d'un même processus - Base définit le "quoi" (pipeline de synchronisation), chaque enfant définit le "comment" (parsing spécifique)
- La traçabilité n'est pas un luxe - dans un système qui s'exécute automatiquement chaque jour, les logs et rapports sont indispensables pour diagnostiquer les problèmes rapidement
- Externaliser les URLs et paramètres d'authentification dans l'interface plutôt que dans le code est un gain majeur de maintenabilité (amélioration v2)
Parcours associe
Experience professionnelle liee a cette realisation
Competences mobilisees
Competences techniques et humaines appliquees
Competences techniques
Competences humaines
Galerie d'images
Captures et visuels du projet