Vérification…

Cas client

E-commerce / EAI

Architecture

Cloud-Native · Serverless

Pattern

Event-Driven Pub/Sub

Preuve de Concept · rg-lumina-poc-dev

Une intégrationevent-drivende bout-en-bout.

Une POC d'architecture EAI moderne : 100% serverless, event-driven et passwordless sur Microsoft Azure, instrumentée bout-en-bout.

Lumina est une preuve de concept de bout-en-bout : APIM, Azure Functions en producteur/consommateur, Service Bus avec Dead-Letter Queue, Data Lake Gen2, orchestration Logic Apps, et couche analytique Microsoft Fabric en Zero-Copy.

Lancer la démoExplorer l'architecture 14 composants Azure · 6 Functions · 0 secret en clair

Métriques clés

Une architecture mesurable,pas une promesse PowerPoint.

01
14

Composants Azure déployés

via Terraform · Infrastructure as Code

02
6

Azure Functions .NET 8

Producer · Consumer · DLQ · Status · Analytics · Health

03
0

Mot de passe en clair

100% Managed Identity + RBAC

04
3× retry

Niveaux de résilience

FluentValidation → Service Bus → DLQ

L'anatomie d'un message

Une commande,
six étapes,
quatorze composants.

Une commande e-commerce arrive sur l'endpoint HTTP. Quelques secondes plus tard, elle est canonisée, validée par FluentValidation, persistée dans le Data Lake, puis indexée pour l'analytique Microsoft Fabric.

Voici ce qui se passe entre le moment où le client clique POST /orders et celui où l'équipe Data écrit son premier SELECT * sur le Lakehouse.

Chaque étape est typée. Chaque hop est tracé. Chaque échec est rejouable.

  1. 01

    Ingress

    APIM reçoit la requête

    L'API Management applique le rate-limiting (30 req/min), ajoute un header X-Source-System, et applique la policy CORS, puis route la requête vers la Function HTTP.

    POST /orders → apim-lumina-dev-jobordeau
  2. 02

    Canonicalisation

    Mapping vers le modèle canonique

    La Function producteur désérialise le JSON e-commerce hétérogène, le mappe vers le modèle Order canonique (.NET 8), puis applique la validation FluentValidation côté entrée.

    EcommerceOrderFunction.Run() → Order { OrderId, ... }
  3. 03

    Pub/Sub

    Publication sur le Topic Service Bus

    Le message canonique est publié dans le topic. Le découplage commence ici : le producteur ne connaît plus ses consommateurs. Une nouvelle subscription = un nouveau canal sans modifier le code amont.

    Topic: sbt-lumina-orders · Subscription: sbs-process-order
  4. 04

    Consommation

    Persistence dans le Data Lake

    La Function consommateur lit la subscription, applique les règles métier (OrderProcessingService), puis écrit le JSON canonique dans le container gold-orders de l'ADLS Gen2 — en mode passwordless.

    OrderProcessorFunction → adls/gold-orders/{OrderId}.json
  5. 05

    Analytique

    JSON → Parquet → Microsoft Fabric

    Data Factory convertit gold-orders en Parquet (compression Snappy) toutes les 15 minutes. Microsoft Fabric pointe sur l'ADLS via un Shortcut — Zero-Copy, pas de duplication des données.

    ADF pipeline → analytics-orders/*.parquet → Fabric Shortcut
  6. 06

    Résilience

    Retry · DLQ · Alerte

    À tout moment un message peut échouer. Service Bus rejoue 3 fois (MaxDeliveryCount), puis bascule en Dead-Letter Queue. Une Function dédiée capture le message mort, le persiste dans failed-orders, et déclenche une Logic App via Event Grid.

    × 3 retries → DLQ → FailedOrderFunction → failed-orders/ → Event Grid → Logic App

Architecture

Trois flux, quatorze composants, une seule source de vérité.

L'ingestion descend dans deux pipelines parallèles : la chaîne data (consommation, persistence, analytique Zero-Copy) et la chaîne résilience (DLQ, capture, alerte). Cliquez sur un composant pour voir sa configuration réelle.

① INGESTION② DONNÉES + ANALYTIQUE③ RÉSILIENCE× 3 retriesClientE-commerceAPIMapim-luminaProducerEcommerceOrderFnService Bussbt-lumina-ordersConsumerOrderProcessorData Lakegold-ordersData FactoryJSON → ParquetFabricZero-CopyDLQFailedOrderFnfailed-orderscontainerEvent GridBlobCreatedLogic AppEmail alerte

Ingestion · Données & analytique · Résilience & DLQ

Vue interactive complète

Décisions d'architecture

Six patterns, un seul dénominateur : intentionalité.

Chaque choix d'architecture répond à une contrainte métier ou opérationnelle. Voici les six décisions structurantes du POC, chacune justifiée par l'usage.

01EAI Pattern

Pub/Sub asynchrone

Topic Service Bus + subscription. Le producteur ne connaît pas ses consommateurs. Découplage temporel et fonctionnel — on peut ajouter un nouveau consommateur (ex. CRM) sans toucher au producteur.

Topic: sbt-lumina-orders
Subscription: sbs-process-order
02EAI Pattern

Modèle canonique

Le payload e-commerce hétérogène est mappé vers un modèle Order canonique en C#. Les consommateurs ne dépendent jamais des formats source. Si demain on ajoute un canal mobile, seul le mapper change.

JSON brut → Order { OrderId, CustomerId, TotalAmount }
03Sécurité

Zero Password

Aucune chaîne de connexion en config. Toutes les ressources s'authentifient via Managed Identity. RBAC granulaire (Storage Blob Data Contributor, Service Bus Data Owner) attribué via Terraform.

DefaultAzureCredential() — pas de SAS, pas de clé.
04Reliability

Résilience à 3 niveaux

Validation FluentValidation côté producteur, retry automatique Service Bus (×3), puis Dead-Letter Queue + Function dédiée qui persiste l'échec dans le Data Lake pour rejeu offline.

MaxDeliveryCount = 3 → DLQ → failed-orders/
05Data Engineering

Zero-Copy Analytics

Microsoft Fabric ne copie pas les données. Un Shortcut pointe sur l'URL DFS de l'ADLS, et Spark requête directement les fichiers Parquet. Coût de stockage divisé par deux.

abfss://...@adls.dfs.core.windows.net/
06DevOps

Infrastructure as Code

Tout le Resource Group est codé en HCL. Workflow GitHub Actions qui compile le C# .NET 8 et déploie sur le Function App à chaque push. Une PR = un changement d'infrastructure auditable.

src/** push → dotnet publish → Functions Action deploy

Stack complète

Tout ce qui est déployé dans rg-lumina-poc-dev.

01Compute & Intégration

  • .NET 8 · Isolated Worker
  • Azure Functions (HTTP + Service Bus triggers)
  • API Management (Consumption)
  • Service Bus (Topic + Subscription + DLQ)
  • Event Grid (BlobCreated)
  • Logic Apps

02Stockage & Data

  • Azure Data Lake Storage Gen2
  • Hierarchical Namespace
  • Azure Data Factory
  • Parquet · compression Snappy
  • Microsoft Fabric Lakehouse
  • Spark / PySpark / Spark SQL

03Sécurité & Identité

  • Managed Identity (System Assigned)
  • Azure RBAC granulaire
  • Key Vault
  • DefaultAzureCredential
  • Storage Blob Data Contributor
  • Service Bus Data Owner / Sender / Receiver

04Code & DevOps

  • Terraform (HCL)
  • GitHub Actions (CI/CD)
  • FluentValidation (entrée + sortie)
  • Hexagonal architecture (Core / Infrastructure)
  • DI native (Program.cs)
  • CORS configuré pour le portfolio

Le moment de vérité

Une démo vaut mille slides.
Lancez le flux.

Soumettez une commande, regardez-la traverser les 14 composants Azure en temps réel. Injectez une erreur. Observez la résilience prendre le relais.

Vrais appels HTTP · APIM réel · polling sur Data Lake