Torna al blog
ArticleMay 19, 20268 min

Ce que j'ai appris en lisant 50 postmortems de Data Pipeline

Après avoir analysé 50 postmortems publics d'Uber, Netflix, Stripe, et d'autres, quatre schémas d'échec émergent encore et encore. La plupart d'entre eux sont évitables à l'étape de conception.

Ce que j'ai appris en lisant 50 postmortems de Data Pipeline

Par Andrew Tan


Le paradoxe du postmortem

Chaque grande entreprise technologique les publie maintenant. Stripe a une page de statut pleine d'entre eux. Netflix écrit des analyses d'ingénierie détaillées. Uber, LinkedIn, GitHub, Cloudflare — ils ont tous levé le rideau sur ce qui a mal tourné et pourquoi.

Voici le paradoxe : les mêmes échecs continuent de se produire. Pas les mêmes entreprises, pas les mêmes systèmes, mais les mêmes schémas. Une équipe chez DoorDash perd des données de paiement de la même manière qu'une équipe chez Netflix a perdu des métriques de visionnage trois ans plus tôt. Un pipeline Uber se casse à cause d'une dérive de schéma en 2024 de la même manière qu'un pipeline LinkedIn s'est cassé en 2021.

J'ai passé les dernières semaines à lire 50 postmortems publics et rapports d'incidents d'entreprises qui ont collectivement traité des trillions d'événements. Le but n'était pas de cataloguer chaque mode de défaillance possible. C'était de trouver les clusters — les causes profondes qui apparaissent assez souvent pour ne pas être écartées comme de la simple malchance.

Quatre schémas dominent. Et voici ce qui m'a surpris : la plupart d'entre eux sont évitables au stade de la conception, pas au stade des opérations.


Comment les 50 ont été sélectionnés

Avant de plonger dans les schémas, une brève note sur la méthodologie. Je me suis concentré sur les postmortems publics d'entreprises exploitant une infrastructure de données à grande échelle : Uber, Netflix, Stripe, LinkedIn, GitHub, Cloudflare, DoorDash, Airbnb, Spotify, et AWS. J'ai évité les violations de sécurité et les pannes d'infrastructure pure (comme les échecs DNS) à moins qu'elles n'affectent directement les Data Pipelines.

La sélection n'était pas aléatoire. J'ai priorisé les postmortems qui incluaient :

  • Une analyse des causes profondes avec une profondeur technique
  • Une chronologie de l'échec et de la récupération
  • Une mention explicite de la qualité des données ou de l'impact sur le pipeline
  • Des leçons apprises ou des changements de processus

Certaines entreprises publient fréquemment (Cloudflare, GitHub). D'autres rarement (Netflix). Les 50 représentent un échantillon transversal d'architectures ETL par lots, Streaming, et hybrides.


Schéma 1 : Dérive de schéma (38% des incidents)

La cause profonde la plus courante était trompeusement simple : le système en amont a changé son format de données, et le pipeline ne le savait pas.

Dans un incident bien documenté, une équipe de données a découvert qu'un entrepôt en aval avait chargé des enregistrements corrompus pendant onze jours. L'API source avait ajouté un nouveau champ. Le parseur JSON du pipeline l'a traité comme une clé inattendue et a silencieusement supprimé tout le lot d'enregistrements. Aucune alerte n'a été déclenchée car le pipeline n'a pas planté — il a simplement produit moins de lignes que prévu, et la différence était dans la variance normale jusqu'à ce qu'elle ne le soit plus.

Ce n'est pas un cas limite. C'est le comportement par défaut de nombreux outils de Data Integration.

Les postmortems révèlent trois variantes de ce schéma :

Dérive additive

Un nouveau champ, colonne ou type d'événement apparaît. Le pipeline l'ignore ou échoue selon la rigueur de sa validation de schéma. La plupart des postmortems ont noté que leurs pipelines étaient configurés pour être "permissifs" car une validation stricte avait causé de fausses alertes par le passé.

Dérive de type

Un champ existant change de type. Une chaîne devient un nombre. Un horodatage perd son fuseau horaire. Ce sont les plus difficiles à détecter car les données semblent toujours valides. Un postmortem a décrit une métrique de revenu qui a silencieusement doublé parce qu'un champ de code de devise est passé du format ISO à un énumérateur numérique, et le pipeline a interprété la valeur de l'énumérateur comme un multiplicateur.

Dérive sémantique

Le format reste le même, mais le sens change. Un champ "user_id" commence à contenir des identifiants de dispositif au lieu d'identifiants de compte. Un champ "status" acquiert un nouvel état que la logique en aval traite comme une erreur. Les données passent tous les contrôles de validation et sont toujours incorrectes.

Ce qui est frappant, c'est la rareté avec laquelle ces incidents ont été détectés par les registres de schéma ou les contrats de données. Dans la plupart des cas, les équipes avaient un registre. Il n'était tout simplement pas appliqué à la frontière du pipeline. Le schéma était documenté quelque part, mais le pipeline n'était pas tenu de valider par rapport à lui.


Schéma 2 : Contre-pression et pics de charge (24% des incidents)

Le deuxième cluster concerne des pipelines qui fonctionnent parfaitement à charge normale et s'effondrent sous un volume inattendu. Le déclencheur varie — une campagne marketing, un événement viral, un cycle de rapport trimestriel, un travail en amont mal configuré qui émet soudainement 10 fois son taux habituel.

Le mode de défaillance est presque toujours le même : le pipeline ne peut pas réduire la charge, alors il la laisse tomber.

Un postmortem d'une plateforme de Streaming a décrit un consommateur Kafka qui a pris six heures de retard lors d'un lancement de produit. Le groupe de consommateurs s'est auto-dimensionné, mais les nouvelles instances ont atteint une limite de pool de connexions à la base de données qui n'avait jamais été testée à cette échelle. Le pipeline n'a pas planté. Il a simplement cessé de traiter de nouveaux événements tandis que les anciens sortaient de la rétention. Lorsque l'équipe s'en est aperçue, les données avaient disparu.

Un autre a décrit un travail ETL par lots qui a fonctionné correctement pendant deux ans jusqu'au Black Friday, lorsque le système source a émis des fichiers 40 fois plus grands que d'habitude. Le travail a duré 18 heures, a épuisé le stockage temporaire, et a échoué sans nettoyer ses sorties partielles. La prochaine exécution programmée a commencé sur les données corrompues.

Le fil conducteur : ces pipelines étaient conçus pour un fonctionnement en régime permanent, pas pour des conditions limites. Ils avaient une surveillance pour savoir s'ils fonctionnaient, mais pas pour savoir à quel point ils étaient proches de leurs limites.

Plusieurs postmortems ont noté que les tests de charge avaient été dépriorisés parce que "nous allons simplement auto-dimensionner". L'auto-dimensionnement fonctionne pour le calcul. Il ne fonctionne pas pour les pools de connexions, les limites de mémoire, l'I/O disque, ou les limites de taux d'API en aval — les goulets d'étranglement qui cassent réellement les pipelines.


Schéma 3 : Perte de données silencieuse (19% des incidents)

C'est le schéma qui empêche les ingénieurs de dormir la nuit. Le pipeline rapporte un succès. Les tableaux de bord sont au vert. Le SLA est respecté. Mais les données sont incomplètes, dupliquées, ou corrompues — et personne ne le sait jusqu'à ce qu'un utilisateur métier demande pourquoi les chiffres semblent incorrects.

La perte silencieuse se manifeste sous plusieurs formes dans les postmortems :

Le filtre qui était trop agressif

Une règle de qualité des données a supprimé des enregistrements qui correspondaient à un modèle mal formé. La règle était censée attraper des données en amont corrompues, mais elle a également attrapé des enregistrements légitimes avec des valeurs inhabituelles mais valides. Sur trois semaines, 12% des transactions légitimes ont été filtrées.

Le exactement-une-fois qui ne l'était pas

Un pipeline prétendait avoir des sémantiques exactement-une-fois mais utilisait un puits non idempotent. Lorsqu'une erreur réseau transitoire a déclenché une nouvelle tentative, certains enregistrements ont été écrits deux fois. La logique de déduplication existait en théorie mais pas dans le chemin de code réel.

Le fossé de rétention

Un pipeline de Streaming écrivait dans une file de messages avec une fenêtre de rétention de 24 heures. Lorsque le traitement en aval a pris du retard en raison d'un incident séparé, les données non traitées ont expiré avant la récupération. Les journaux du pipeline montraient des écritures réussies. Les données n'étaient tout simplement pas là lorsque quelqu'un a essayé de les lire.

Ce qui rend la perte silencieuse si dangereuse, c'est qu'elle est invisible pour la surveillance traditionnelle. Les métriques de santé du pipeline — temps d'exécution, débit, taux d'erreur — ne la détectent pas. Vous avez besoin de métriques de qualité des données : comptes de lignes, vérifications de cardinalité, intégrité référentielle, tests de distribution. La plupart des postmortems ont admis que ces vérifications ont été ajoutées après l'incident, pas avant.


Schéma 4 : Échecs en cascade à partir d'un état partagé (14% des incidents)

Le plus petit cluster mais souvent le plus catastrophique. Ce sont des incidents où une défaillance dans un pipeline corrompt ou désactive d'autres pipelines via une infrastructure partagée.

Un postmortem mémorable a décrit un événement "pilule empoisonnée" — un seul enregistrement mal formé qui a fait entrer un parseur dans une boucle infinie. Le thread consommateur s'est bloqué, la partition a été rééquilibrée, et le nouveau thread consommateur s'est également bloqué. En quelques minutes, un groupe de consommateurs entier était hors ligne. Parce que le pipeline partageait un cluster Kafka avec d'autres services, la compression des journaux du courtier a été affectée, et des pipelines non liés ont commencé à voir une latence accrue.

Un autre a décrit un magasin de métadonnées utilisé par plusieurs travaux par lots. Une migration de schéma pour un travail a verrouillé la table de métadonnées pendant 90 secondes. Chaque autre travail qui touchait la même table a échoué ou a expiré. Ce qui aurait dû être un problème d'une seule équipe est devenu un incident à l'échelle de l'entreprise.

La leçon de ces postmortems n'est pas seulement "isolez vos défaillances". C'est que l'état partagé est souvent invisible. Les équipes ne réalisent pas qu'elles partagent une infrastructure jusqu'à ce qu'elle échoue. Le cluster Kafka, la table de métadonnées, le montage NFS partagé — ceux-ci ne sont pas considérés comme faisant partie de la conception du pipeline, mais ils font partie de son domaine de défaillance.


À quoi ressemblait le reste des 5%

Le reste des postmortems était vraiment unique : un rayon cosmique inversant un bit, une API de fournisseur changeant de comportement sans préavis, un certificat expirant un week-end de vacances. Ce sont les échecs que vous ne pouvez pas concevoir pour éviter. Les 95% ci-dessus, vous pouvez.


La liste de contrôle de conception

Après avoir lu ces 50 postmortems, je voyais toujours le même écart. Les échecs ne se produisaient pas parce que les équipes manquaient de talent, d'outils ou de conscience. Ils se produisaient parce que des questions de conception spécifiques n'étaient pas posées assez tôt.

Voici six questions qui, si elles sont répondues honnêtement lors de la revue de conception, auraient empêché la majorité des incidents que j'ai analysés :

1. Que se passe-t-il lorsque le schéma change sans avertissement ?

Pas "avons-nous un registre de schéma ?" — c'est une question d'outillage. La question de conception est : le pipeline échoue-t-il lorsque le schéma dévie des attentes, ou s'adapte-t-il silencieusement ? Un comportement adaptatif semble plus sûr jusqu'à ce qu'il produise des données incorrectes. Par défaut, échouez. Faites en sorte que les écarts de schéma soient bruyants.

2. Quelle est la charge maximale à laquelle ce pipeline a été testé, et qu'est-ce qui casse en premier lorsque nous la dépassons ?

La plupart des équipes testent pour la correction. Beaucoup moins testent pour les limites. Connaissez votre premier goulet d'étranglement — mémoire, connexions, disque, limites de taux en aval — et ayez un plan de dégradation progressive pour quand vous l'atteignez.

3. Comment saurions-nous si nous perdions silencieusement 10% de nos données ?

C'est la question la plus importante. Si votre seule validation est "le travail est terminé", vous volez à l'aveugle. Vous avez besoin de vérifications indépendantes de la qualité des données qui comparent le volume de sortie, la distribution, et les métriques clés par rapport aux bases historiques.

4. Nos reprises sont-elles sûres ?

Toute logique de reprise est un mécanisme potentiel de duplication à moins que le puits ne soit strictement idempotent. Passez en revue chaque appel d'API, chaque écriture de base de données, chaque ajout de fichier. Si vous ne pouvez pas garantir l'idempotence, garantissez au plus une fois et acceptez la perte occasionnelle plutôt que la duplication garantie.

5. Quels autres systèmes échouent si celui-ci échoue ?

Cartographiez votre domaine de défaillance. Si votre pipeline se bloque, bloque-t-il une file d'attente partagée ? Épuise-t-il un pool de connexions ? Remplit-il un disque dont d'autres travaux ont besoin ? Concevez pour le confinement du rayon d'explosion, pas seulement pour la récupération.

6. Quelqu'un qui n'a jamais vu ce pipeline peut-il le déboguer à 3 heures du matin ?

Les postmortems avec les temps de récupération les plus rapides avaient tous un point commun : une observabilité qui ne nécessitait pas de connaissance institutionnelle. Des journaux qui expliquent les décisions, pas seulement les changements d'état. Des métriques qui montrent la santé des données, pas seulement la santé du système. Des alertes qui pointent vers la cause profonde, pas seulement les symptômes.


La vérité inconfortable

Lire 50 postmortems ne vous rend pas immunisé contre l'échec. Mais cela rend les schémas évidents. Et les schémas sont, pour la plupart, ennuyeux. Dérive de schéma. Limites de charge. Validation manquante. État partagé. Ce ne sont pas des problèmes exotiques de systèmes distribués. Ce sont des questions d'hygiène de conception.

Les équipes qui ont publié ces postmortems sont parmi les meilleures au monde pour construire des infrastructures de données. Si elles rencontrent encore ces schémas, tout le monde aussi. La différence est de savoir si vous les attrapez lors de la revue de conception ou à 3 heures du matin.


Si vous concevez des Data Pipelines et souhaitez une plateforme qui applique des contrats de schéma, gère backpressure avec grâce, et vous offre un débogage visuel lorsque les choses tournent mal — que ce soit par lots ou en Streaming — jetez un œil à layline.io. La Community Edition est gratuite à explorer.

Essayez la Community Edition →


Andrew Tan est un entrepreneur en série et fondateur de layline.io, construisant une infrastructure de traitement de données d'entreprise qui gère à la fois les charges de travail par lots et en temps réel à grande échelle.

Share:

Enjoyed this article?

Subscribe to get more insights delivered to your inbox.