Abbeal

Architecture

Architecture MACH : le guide d'intégration pour les DSI.

Microservices, API-first, Cloud-native, Headless. Ce que MACH change vraiment, quand migrer depuis un monolithe, les pièges d'intégration, pis comment on l'a livré en retail luxe avec un ROI à 18 mois.

11 min

Ton monolithe e-commerce tient la route depuis 5 ans, mais chaque nouveau marché prend 6 mois à livrer, ton équipe de 40 devs se marchent sur les pieds, pis le métier veut tester un nouveau moteur de reco sans attendre la release trimestrielle. T'as entendu parler de MACH, peut-être via commercetools ou Contentful, pis tu te demandes si c'est du bullshit marketing ou une vraie réponse architecturale.

Spoiler : MACH, c'est pas une silver bullet, mais c'est une approche solide quand t'as dépassé les limites du monolithe pis que ton organisation peut gérer la complexité distribuée. On a accompagné une marque de retail luxe dans cette migration : ROI à 18 mois au lieu de 36, time-to-market divisé par 3 sur les nouveaux marchés. On a aussi vu des projets partir en sucette parce que personne gérait l'intégration ou qu'on avait sur-découpé en 80 microservices.

Ce guide t'explique concrètement ce que MACH change, quand migrer, comment éviter les pièges, pis ce qu'on a appris sur le terrain.

MACH : les 4 piliers expliqués sans marketing

MACH, c'est Microservices, API-first, Cloud-native, Headless. Pas un produit, pas un framework : un ensemble de principes d'architecture pour construire des plateformes modulaires où chaque brique est indépendante pis reliée aux autres par des API.

Microservices

Chaque capacité métier (catalogue produit, pricing, panier, stock) est un service autonome avec sa propre base de données. Tu peux déployer, scaler pis remplacer chaque service sans toucher aux autres. En pratique, ça veut dire que ton équipe recherche peut livrer un nouveau moteur Algolia sans attendre que l'équipe checkout ait fini sa refonte.

Le piège : partir en mode "1 microservice par use case" pis te retrouver avec 80 services pour 10 devs. On a vu une startup e-commerce avec 12 microservices pour gérer le panier. Résultat : 6 mois pour déboguer un calcul de promo parce que la logique était éparpillée. Découpe par domaine métier stable, pas par feature.

API-first

Toute interaction entre services passe par des API documentées pis versionnées. Tu conçois l'API avant l'implémentation, pas après. Ça force à penser contrat stable, rétrocompatibilité, pis ça permet aux équipes front/mobile/partenaires de bosser en parallèle.

Concrètement : OpenAPI 3.x pour documenter, des consumer-driven contracts pour tester, pis un API gateway (Kong, Apigee, AWS API Gateway) pour gérer auth, rate-limiting pis versioning. Sur notre projet luxe, on a imposé qu'aucune PR backend soit mergée sans spec OpenAPI à jour. Ça ralentit au début, ça sauve des semaines de débogage après.

Cloud-native

Conçu pour l'infonuagique : conteneurs (Docker/Kubernetes), auto-scaling, résilience by design (retry, circuit breaker), observabilité native (logs structurés, métriques, traces distribuées). Pas juste "hébergé sur AWS" : pensé pour exploiter l'élasticité pis la redondance du cloud.

Attention : cloud-native veut pas dire pas de vendor lock-in. Utiliser Lambda, DynamoDB pis EventBridge, c'est très cloud-native, pis très AWS-only. Accepte un peu de lock-in sur les services managés (RDS, S3, SQS), c'est du temps d'infra économisé ; évite-le sur la logique métier.

Headless

Le backend expose des API, le frontend est découplé. Tu peux avoir 5 fronts (web desktop, mobile web, iOS, Android, bornes magasin) qui consomment les mêmes API backend. Tu changes de framework front (React → Next.js → ce-qui-viendra-après) sans toucher au backend.

En e-commerce, ça veut dire remplacer Magento/Salesforce Commerce Cloud par commercetools ou Shopify Plus en backend, pis construire le front en Next.js ou Nuxt. Le headless CMS (Contentful, Strapi) gère le contenu, le commerce engine gère le transactionnel, le front agrège toute.

De MACH à composable commerce : la promesse business

MACH décrit les principes techniques. Le composable commerce est le résultat business : la capacité d'assembler la meilleure brique pour chaque besoin (best-of-breed) pis de remplacer chacune indépendamment.

Exemple concret chez notre client luxe : ils utilisaient Salesforce Commerce Cloud (tout-en-un). Limites : recherche produit médiocre, personnalisation figée, impossible de lancer un marché APAC sans repasser par Salesforce Professional Services. En composable MACH, ils ont :

  • commercetools pour le commerce engine (API-first, multi-tenant, multi-région)
  • Algolia pour la recherche pis les facettes
  • Segment pour la donnée client (CDP)
  • Contentful pour le contenu éditorial pis les landing pages
  • Next.js pour les fronts web (SSR, i18n)
  • Braze pour l'activation CRM (campagnes courriel/push)

Résultat : nouveau marché en 6 semaines au lieu de 6 mois, moteur de reco remplacé en 2 sprints, A/B tests sur le funnel checkout sans release backend. Le prix à payer : 6 intégrations à maintenir au lieu d'une plateforme monolithique, pis une équipe plateforme de 4 personnes (SRE + architecte data) pour gérer l'orchestration.

Quand migrer depuis un monolithe ?

MACH, c'est pas toujours la bonne réponse. Si tu fais 5 M$ de GMV par an avec 5 devs pis un monolithe Symfony qui roule bien, reste dessus. MACH apporte de la complexité opérationnelle : monitoring distribué, gestion des versions d'API, déploiements multiples, ownership décentralisé. Ça se justifie quand :

  • Vélocité bloquée : chaque release prend 3 mois, les équipes se marchent dessus, impossible de livrer en parallèle.
  • Time-to-market critique : tu dois lancer 10 marchés en 18 mois, ou tester 5 parcours clients en même temps.
  • Scalabilité technique : ton monolithe scale pas horizontalement, ou certaines parties (recherche, checkout) ont des besoins de scaling très différents.
  • Organisation multi-équipes : t'as 30+ devs pis tu veux découper par domaine (produit, client, commande) avec ownership clair.
  • Différenciation métier : tu veux remplacer une brique (pricing, reco, CMS) par un outil meilleur sans toute refaire.

Les pièges d'intégration (pis comment les éviter)

La techno de chaque brique, c'est pas le risque. commercetools, Algolia, Contentful : ce sont des produits matures. Le risque, c'est l'intégration entre les briques pis la gouvernance des données.

1. Explosion du nombre d'intégrations

Avec 6 briques, t'as potentiellement 15 intégrations point-à-point (n×(n-1)/2). En pratique, c'est moins car toute parle pas à toute, mais ça reste 8-10 intégrations à maintenir. Chaque intégration a son modèle de données, son format (REST, GraphQL, webhook), son système d'auth, son SLA.

Comment on l'a géré : un bus d'événements central (AWS EventBridge dans notre cas) pour les intégrations asynchrones, pis un BFF (Backend-for-Frontend) qui agrège les API synchrones pour les fronts. Les briques se parlent jamais directement en synchrone, sauf le BFF qui orchestre.

ts
// BFF Next.js : agrégation côté serveur export async function getServerSideProps(context) { const [product, inventory, content] = await Promise.all([ commercetools.getProduct(context.params.sku), inventoryService.getStock(context.params.sku), contentful.getProductContent(context.params.sku) ]); return { props: { product, inventory, content } }; }

2. Gouvernance des données de référence

Qui est propriétaire de la donnée client ? Du stock ? Du prix ? Si la donnée client est dupliquée entre commercetools, Segment pis Braze, laquelle est la source de vérité ? Tu dois définir dès le départ un data owner pour chaque entité de référence.

Chez notre client luxe, on a posé ça dans un ADR (Architecture Decision Record) :

  • Client : Segment est la source de vérité (CDP), commercetools pis Braze consomment.
  • Produit : commercetools est master, Algolia pis Contentful répliquent via webhook.
  • Stock : ERP externe, répliqué dans commercetools toutes les 15 min, exposé via API commercetools.
  • Commande : commercetools est master, événements envoyés à l'ERP pis au data warehouse via EventBridge.

Pas de gouvernance = data drift en 6 mois, pis tu vas passer tes journées à déboguer des incohérences entre systèmes.

3. Sur-découpage en microservices

Le piège classique : découper trop fin. Un microservice pour le calcul de TVA, un pour les promos, un pour le panier, un pour les frais de port. Résultat : latence réseau multipliée par 10, débogage impossible ("la promo s'applique pas" → 6 services à investiguer), pis déploiements coordonnés à n'en plus finir.

Règle pragmatique : découpe par bounded context (DDD). Un contexte = un domaine métier avec un modèle de données cohérent, géré par une équipe. Pour un e-commerce mid-market, tu devrais avoir entre 5 pis 10 services, pas 50. Exemples de contextes : Catalog, Cart & Checkout, Order Management, Customer, Inventory.

4. Monitoring pis observabilité distribuée

"Le checkout est lent" dans un monolithe : t'ouvres New Relic, tu vois la requête SQL qui rame. "Le checkout est lent" en MACH : c'est le BFF ? L'API commercetools ? Le calcul de stock ? Le rate-limiting Algolia ? T'as besoin de distributed tracing (OpenTelemetry, Datadog APM, AWS X-Ray) dès le jour 1.

On a mis en place OpenTelemetry avec des trace IDs propagés dans tous les headers HTTP. Chaque requête utilisateur génère une trace qui traverse BFF → commercetools → inventory → Algolia. En cas de latence, on voit immédiatement quel service est coupable. Coût : ~2 jours/dev de setup initial, économie : des dizaines d'heures de débogage par mois.

Stratégie de migration : pas de big bang

Tu migres jamais un monolithe vers MACH en big bang. T'extrais une capacité à la fois derrière une API, tu la routes via un reverse proxy, pis t'éteins l'ancien code progressivement. Pattern classique : Strangler Fig.

  1. Identifie la capacité la plus isolée pis la plus douloureuse. Chez notre client : la recherche produit (lente, pas de facettes, impossible à A/B tester).
  2. Mets un reverse proxy devant le monolithe (Nginx, Cloudflare Workers, AWS ALB). Route /search vers le nouveau service Algolia, le reste vers l'ancien.
  3. Synchronise les données du monolithe vers la nouvelle brique (batch initial + sync incrémental via CDC ou événements).
  4. Bascule 10% du trafic sur le nouveau service, monitore, ajuste. Puis 50%, puis 100%.
  5. Supprime l'ancien code du monolithe une fois que le nouveau service est stable depuis 2-3 semaines.
  6. Répète pour la capacité suivante : donnée client, panier, checkout, etc.

Sur le projet luxe, on a commencé par recherche + CDP client (Algolia + Segment) en parallèle, car c'était isolé du transactionnel. ROI rapide : personnalisation des résultats, campagnes CRM segmentées. Ça a pris 3 mois. Ensuite checkout (commercetools), puis gestion de contenu (Contentful). 18 mois au total pour être full MACH sur 3 marchés.

Cas concret : retail luxe, ROI à 18 mois

Contexte : marque de retail luxe, 120 M$ de GMV online, 8 marchés (EU + APAC), 40 devs. Monolithe Salesforce Commerce Cloud (SFCC) : déploiement trimestriel, impossible de lancer un marché en moins de 6 mois, recherche produit catastrophique (pas de recherche facettée, pas de ML).

Objectif métier : lancer 4 nouveaux marchés APAC en 12 mois, passer le taux de conversion de 1,8% à 2,5%, réduire le time-to-market des features de 12 semaines à 3 semaines.

Architecture cible : commercetools (commerce engine), Algolia (recherche + reco), Segment (CDP), Contentful (CMS), Next.js (front web), Braze (CRM). Bus d'événements AWS EventBridge, BFF Next.js pour l'agrégation, infra Kubernetes sur EKS.

Phasage :

  1. M0-M3 : migration recherche (Algolia) + CDP (Segment), sync depuis SFCC. Reverse proxy pour router /search vers Algolia. Résultat : +15% de taux de clic sur la recherche.
  2. M3-M9 : migration checkout (commercetools) sur 2 marchés pilotes (FR + UK). Front Next.js en SSR. Sync bidirectionnelle SFCC ↔ commercetools pendant 3 mois (coexistence).
  3. M9-M12 : migration CMS (Contentful), extinction progressive de SFCC sur FR/UK. 2 marchés 100% MACH.
  4. M12-M18 : rollout sur 6 autres marchés (2 par trimestre). Réutilisation du socle, seule la config i18n change.

Résultats à M18 :

  • Time-to-market : nouveau marché en 6 semaines vs 6 mois avant (÷10).
  • Taux de conversion : de 1,8% à 2,4% (+33%) grâce à la recherche Algolia pis la personnalisation Segment.
  • Vélocité : 15 releases/semaine vs 1/trimestre. Déploiement découplé par service.
  • ROI : objectif initial 36 mois, atteint à 18 mois. Gain = revenus incrémentaux (4 marchés APAC) + conversion améliorée - coût migration.

Coût caché : équipe plateforme de 4 personnes (2 SRE, 1 archi data, 1 lead backend) pour gérer intégrations, monitoring, gouvernance data. Sans eux, le projet serait parti en sucette.

Checklist avant de te lancer

Avant de démarrer une migration MACH, valide ces points :

  • T'as un sponsor exec qui comprend que ça va prendre 12-18 mois pis que le ROI est pas immédiat.
  • T'as une équipe SRE/plateforme ou le budget pour en monter une. Pas de MACH sans ownership de l'intégration.
  • Tes équipes savent faire de l'API-first : OpenAPI, versioning, contrats. Si c'est pas le cas, forme-les avant.
  • T'as défini les data owners pour chaque entité de référence (client, produit, stock, commande).
  • T'as une stratégie de migration incrémentale (Strangler Fig), pas un plan big bang.
  • T'as du monitoring distribué (tracing, logs centralisés, métriques) prêt dès le premier service.
  • T'as budgété les coûts cloud pis SaaS : commercetools + Algolia + Segment + Contentful, ça chiffre vite (50-150 k$/an selon le trafic).

Next steps

MACH, c'est pas un buzzword : c'est une réponse architecturale solide quand t'as dépassé les limites du monolithe pis que t'as l'organisation pour gérer la complexité. Les gains sont réels — time-to-market divisé par 3, vélocité multipliée par 10, capacité à tester rapidement — mais le coût d'intégration pis de gouvernance est sous-estimé par 90% des projets.

Si t'envisages une migration, commence petit : extrais une capacité isolée (recherche, CDP, CMS), valide que tu sais intégrer pis monitorer en production, puis industrialise. Sous-estime pas le besoin d'une équipe plateforme dès le départ. Pis si t'as des questions sur un cas concret — choix de stack, stratégie de migration, gouvernance data — on a livré ce type de projet plusieurs fois, on sait où sont les mines.

Tu as un projet qui ressemble à ça ?

Parler à un architecte