Casey Analyse la Panne AWS | The Standup

TThe PrimeTime
Computing/SoftwareManagementInternet Technology

Transcript

00:00:00Cet épisode du stand-up va être encore plus spécial parce que c'est Casey qui va faire l'intro.
00:00:05Casey, de quoi on parle aujourd'hui?
00:00:09Bonjour à tous et bienvenue au stand-up.
00:00:13Le 45e,
00:00:146e meilleur podcast tech sur Spotify d'après le dernier truc en date.
00:00:22C'est vrai..
00:00:29Bref, désolé.
00:00:30Aujourd'hui dans le stand-up, je voulais aborder un sujet.
00:00:34Je vais parler de la panne d'AWS qui a eu lieu en octobre,
00:00:38mais si j'en parle,
00:00:39c'est surtout pour aborder quelque chose de plus large : l'idée de vraiment comprendre quelque chose au lieu de simplement dire qu'on comprend..
00:00:49Genre,
00:00:49un truc qui arrive souvent,
00:00:51surtout je pense aux gens qui débutent dans leur carrière de programmeur,
00:00:56si t'es développeur junior ou un truc du genre,
00:00:59tu débarques.
00:01:00Et je sais que ça a clairement été mon cas : t'as envie d'avoir l'air de savoir des trucs,
00:01:06quoi.
00:01:06Tu veux pas donner l'impression que tu piges pas ce qui se passe.
00:01:11Donc il y a cette pression extérieure,
00:01:13qu'elle soit réelle ou pas,
00:01:15où tu as l'impression que tu devrais dire que t'as compris un truc ou faire semblant de comprendre,
00:01:22même si c'est un peu flou ou que t'as pas tout saisi..
00:01:26Et même si c'est pas ta faute,
00:01:28genre même si le truc a été mal expliqué ou qu'il manquait des infos importantes,
00:01:34t'es quand même poussé à faire comme si tu savais de quoi il s'agissait,
00:01:39tu vois?
00:01:39Parce que ça te fait paraître plus intelligent ou un truc du genre,
00:01:44ou au moins ça t'évite d'avoir l'air junior,
00:01:47quoi.
00:01:47Et donc un des trucs que j'ai remarqués en vieillissant et en accumulant de l'expérience en programmation,
00:01:54c'est que maintenant je demande presque trop qu'on m'explique les choses.
00:01:59Genre je m'en fous complètement d'avoir l'air bête..
00:02:03Je fais genre : attends deux secondes, reviens en arrière.
00:02:05J'ai pas compris cette partie.
00:02:07C'est quoi que tu veux dire par là?
00:02:08Ou genre, ça veut dire quoi ce terme?
00:02:10Parce que maintenant je m'en fiche vraiment de ça..
00:02:12Je suis moins inquiet.
00:02:13Et je veux vraiment savoir parce que j'ai tellement d'expérience en programmation où j'ai cru savoir quelque chose ou j'ai fait semblant de savoir un truc et ça m'est retombé dessus..
00:02:22Je me dis : je veux vraiment savoir.
00:02:24Je veux être sûr que quand j'ai une explication d'un bug ou que je pense connaître la raison d'un ralentissement de performance,
00:02:31j'ai toujours dans un coin de ma tête : si j'ai pas vraiment creusé jusqu'au bout,
00:02:35ça pourrait être autre chose.
00:02:37Ça pourrait être que le vrai problème est encore caché là-dedans.
00:02:40Et je le sais juste pas parce que j'ai pas vraiment tout examiné.
00:02:44Je passe juste à autre chose parce que c'est pratique ou je sais pas quoi..
00:02:48Et donc la raison pour laquelle je voulais parler de la panne de DynamoDB,
00:02:52c'est parce que récemment il y a eu une série de pannes très médiatisées.
00:02:56Il y en a eu une grosse qui a fait tomber Google et il s'est avéré que c'était un truc où ils ne géraient pas le cas d'un champ vide,
00:03:03voyez?
00:03:04Donc dans leur programmation,
00:03:05leur façon de programmer,
00:03:06c'était genre,
00:03:07OK,
00:03:08on a ce truc.
00:03:08On charge du JSON et s'il n'y a rien dans le JSON,
00:03:11eh bien on déréférence un pointeur null ou un truc comme ça,
00:03:14non?
00:03:15C'était littéralement ça, quoi.
00:03:16Et puis il y en a eu une avec CrowdStrike où ils ont carrément planté le monde entier avec des écrans bleus.
00:03:22Et là,
00:03:22ils ont donné une très bonne explication,
00:03:25vraiment de qualité.
00:03:26Ils ont dit,
00:03:26on fait ce truc de dimensionnement de tableau et on avait trop de règles.
00:03:30Donc ça a fait déborder le tableau, voyez?
00:03:32Et donc ces explications étaient plutôt bonnes quand ils ont donné ce qu'on appelle des RCA ou analyses de cause racine,
00:03:39non?
00:03:39Quand ils ont dit, voilà pourquoi on est tombés.
00:03:42Quand je les ai lues,
00:03:43je n'avais pas l'impression qu'il restait beaucoup de questions sans réponse dans ma tête.
00:03:48Genre,
00:03:48je ne connaissais peut-être pas littéralement la ligne de code en question,
00:03:52parce qu'ils n'ont peut-être pas publié littéralement le bout de code,
00:03:56mais ils m'ont donné suffisamment d'éléments pour que je me dise,
00:03:59OK,
00:04:00je comprends comment quelqu'un a écrit ce code et je comprends la connerie qu'ils ont faite,
00:04:05quoi.
00:04:05Genre, OK, ne faites pas ce truc.
00:04:07Je comprends.
00:04:08Et je suis totalement OK avec ça..
00:04:10Avec celui de DynamoDB,
00:04:11parce que c'est ressorti dans ce podcast,
00:04:15non?
00:04:15On en a parlé quand ce mec au guitar center, là?
00:04:19Il était genre,
00:04:20j'ai entendu quelqu'un en parler au pub,
00:04:23voyez ??
00:04:24Oui.
00:04:25Incroyable.
00:04:25Nous observons ici le programmeur dans son habitat naturel,
00:04:28une créature simple qui passe le plus clair de son temps à travailler seule,
00:04:32souvent dans l'obscurité,
00:04:33mais qu'est-ce que c'est?
00:04:34Quelqu'un qui a tort sur internet.
00:04:36Notre codeur passe à l'action,
00:04:37atteignant des vitesses de pointe de 120 mots par minute avant qu'un flash,
00:04:41un site web en mode clair..
00:04:42L'ennemi naturel de ces amoureux du code sonne notre ami.
00:04:45La poursuite est annulée.
00:04:46Il faudra les attraper la prochaine fois.
00:04:48Quand ils ne sont pas sur leurs ordinateurs,
00:04:50ils peuvent passer des heures à dessiner des symboles grossiers,
00:04:53un truc qu'ils appellent tableaux blancs.
00:04:55Les chercheurs ont découvert des milliers de dialectes,
00:04:57souvent avec plus d'une douzaine utilisés dans un seul bureau.
00:05:00Cependant, aucun linguiste n'a encore déchiffré leur but..
00:05:03Créatures vaniteuses,
00:05:04leurs corps ont évolué sur des millénaires pour pouvoir s'asseoir dans des postures inhabituelles tout en se regardant en ligne.
00:05:11Cela dure souvent pendant de nombreuses heures sous prétexte qu'ils attendent une revue de code,
00:05:17mais quand on leur demande pourquoi ils sont si inactifs.
00:05:20Et enfin,
00:05:20après une longue journée à accomplir très peu de choses,
00:05:23nos guerriers du clavier sont prêts pour le lit.
00:05:26Lecture rapide et extinction des feux..
00:05:29Bonne nuit, petit codeur.
00:05:30Alors comment je dors si bien la nuit?
00:05:32Eh bien, j'ai Sentry pour m'aider à écraser ces bugs.
00:05:35Et je ne parle pas de petits bugs minuscules du Dakota du Sud qui meurent en hiver.
00:05:41Je parle de gros bugs méchants de la jungle.
00:05:44Et je n'ai peur d'aucun d'entre eux,
00:05:46d'ailleurs,
00:05:47juste,
00:05:47mais je peux écraser ces bugs avec Seer par Sentry.
00:05:50Donc j'étais un peu plus motivé pour celui-là pour me dire,
00:05:54OK,
00:05:54laisse-moi voir combien d'informations ils ont publiées.
00:05:58Et j'avais lu,
00:05:59j'avais déjà un peu lu après coup,
00:06:01ils avaient publié un résumé où ils postaient une RCA et c'était très vague.
00:06:06Genre la RCA n'expliquait vraiment pas grand-chose.
00:06:09J'ai ensuite remarqué qu'ils avaient posté une présentation complète genre à re:Invent en décembre,
00:06:15ils,
00:06:16ou je ne sais pas si re:Invent c'était en décembre,
00:06:19mais la vidéo est sortie en décembre de la présentation re:Invent où ils couvraient cette panne..
00:06:26Donc je suis allé regarder tout ça.
00:06:28Et après avoir lu toute la RCA et regardé toute la présentation,
00:06:33j'étais toujours là à me dire.
00:06:35Je ne vois pas d'explication réelle du bug ici, non?
00:06:39Genre j'essaie de comprendre quel était le bug réel et ça n'a jamais été expliqué..
00:06:45Et donc ce que je voulais faire,
00:06:46c'était simplement en parler,
00:06:48expliquer pourquoi je ne pense pas qu'ils ont vraiment expliqué ce qu'était le bug et utiliser ça comme exemple du fait que,
00:06:53je ne pense pas que les gens devraient juste se dire : « Ah,
00:06:56d'accord.
00:06:57Je vois quel était le bug.
00:06:58» Parce que des gens m'ont répondu en mode : « Oh,
00:07:00laisse-moi t'expliquer quel était le bug.
00:07:02» Et puis ils ont juste expliqué les mêmes choses.
00:07:04Je me dis : « Non, ce n'est pas ça le bug.
00:07:06» Donc tout le monde est comme incité à dire : « Je comprends.
00:07:09» Parce qu'ils l'ont lu.
00:07:10Genre non,
00:07:10si tu ne peux pas me dire quel était le vrai bug,
00:07:12alors on n'a pas fini.
00:07:13Voilà..
00:07:14Genre, on devrait avoir cette explication plus complète.
00:07:17Donc est-ce que tout ce que je dis a du sens?
00:07:19Ouais.
00:07:19Tout d'abord,
00:07:20je veux juste dire que je savais exactement ce que tu voulais dire,
00:07:23Casey..
00:07:23Genre, dès le départ.
00:07:25Tout de suite.
00:07:26Tu étais là : « Okay,
00:07:28je sais,
00:07:29je sais exactement ce que tu dis.
00:07:32Aucune question de mon côté.
00:07:34Aucun obstacle.
00:07:35Merci tout le monde.
00:07:37Je suis au top..
00:07:39Je vous vois demain les gars.
00:07:40Vous savez, aucun problème.
00:07:42Je voulais juste dire que j'adore vraiment écouter Casey parler dans le podcast quand j'écoute sur Spotify,
00:07:48mais aussi là maintenant,
00:07:49genre je pourrais t'écouter parler pendant une heure.
00:07:52Super coup de chapeau aussi pour Spotify.
00:07:55J'allais justement dire,
00:07:56j'allais dire genre,
00:07:57surtout quand tu écoutes sur Spotify,
00:07:59la qualité est incroyable.
00:08:01Tu as aussi les bonus en plus, non?
00:08:03Tu as tout le banter avant et après le vrai extra.
00:08:05On a commencé à publier des versions plus longues,
00:08:08plus longues sur Spotify qui sont davantage du bonus.
00:08:11Ouais.
00:08:12Moins de trucs hors sujet,
00:08:13mais un peu plus de bavardages sur Spotify parce que le public en direct a droit aux bavardages..
00:08:19Ils ont le droit de venir ici.
00:08:21Ils peuvent entendre parler de trash et de son addiction aux Pokémon,
00:08:23ce que tu ne sais probablement même pas parce que tu n'étais pas,
00:08:26tu écoutais ça sur YouTube,
00:08:27pas vrai?
00:08:28Tu ne,
00:08:28tu ne vas pas,
00:08:29tu n'as pas droit à tous les trucs sympas.
00:08:30C'est un peu difficile à vendre pour les 10 premières minutes d'une vidéo YouTube.
00:08:34C'est très difficile à vendre pour une vidéo YouTube.
00:08:36Genre,
00:08:36je vais regarder quatre mecs parler de quelque chose que je ne comprends même pas.
00:08:40Et ça s'appelle DynamoDB.
00:08:41Ouais..
00:08:41Puisqu'on commence le podcast,
00:08:42peut-être qu'on devrait présenter Adam.
00:08:44Oh ouais.
00:08:44C'est un très bon point..
00:08:45On n'a rien fait du tout.
00:08:46Bonjour.
00:08:47Dis-nous un peu pourquoi tu es dans le podcast aujourd'hui..
00:08:50Parce que je suis chez TJ,
00:08:52raison numéro un,
00:08:53raison numéro un pourquoi TJ exige que toutes les personnes qui visitent sa maison soient dans le podcast.
00:09:01C'était gênant à quelques reprises.
00:09:04Ouais.
00:09:05Yep.
00:09:05Qui es-tu vraiment ??
00:09:07À part un héros AWS.
00:09:08Je ne suis même pas ça.
00:09:10Je n'étais pas héros AWS.
00:09:12D'accord..
00:09:13Viré du groupe de super-héros.
00:09:14Genre comment ça marche?
00:09:16Tu n'es juste pas, tu n'es pas renouvelé..
00:09:18J'ai été un héros d'un seul mandat et ils ont décidé : « Oh,
00:09:21tu,
00:09:21c'est un truc où tu paies?
00:09:23Tu paies pour être un héros ??
00:09:24Non, non, je m'en fichais juste plus vraiment.
00:09:26J'en parlais jamais.
00:09:27Donc ils se sont dit : « Peut-être qu'il n'est plus un héros.
00:09:30» Maintenant c'est un vilain.
00:09:32Casey a l'air de faire partie d'un genre de murder mystery.
00:09:35Il est là debout.
00:09:36Oh mec.
00:09:36On est sur le point d'avoir, euh, genre le, euh, c'est quoi?
00:09:39Nick Hill.
00:09:40C'est qui la personne qui fait tous les dessins sur le tableau.
00:09:43Et puis ça apparaît.
00:09:44Casey Muratori.
00:09:45C'est celui auquel tu penses.
00:09:46Muratori.
00:09:47C'est Muratori ou Muratori?
00:09:48Oh mon Dieu.
00:09:49Tu es sur le point de faire des visuels.
00:09:51Pas vrai?
00:09:51Donc je sais que c'est le meilleur podcast..
00:09:54Littéralement, c'est le meilleur auquel participer.
00:09:57Euh, ça se prononce Muratori dans ma famille.
00:10:00Genre presque comme s'il y avait un Y là,
00:10:03Muratori,
00:10:04mais c'est correct.
00:10:05Ça n'a pas vraiment de sens parce que c'est un italien,
00:10:08c'est un nom italien.
00:10:10Et en italien, ce serait Muratori ou Muratori..
00:10:13Ça n'a pas de sens.
00:10:14Donc pourquoi,
00:10:15comment c'est devenu Mur,
00:10:17je n'en ai aucune idée.
00:10:19C'était un truc d'immigrant italo-américain qui s'est produit,
00:10:23je suppose.
00:10:24Je ne sais pas.
00:10:25Okay.
00:10:25Donc voilà en gros ce qu'ils ont dit..
00:10:28Ils ont ces choses qu'on appelle des points de terminaison d'API,
00:10:32mais ils les appellent comme ça,
00:10:34d'accord.
00:10:34Et ce sont les adresses de domaine.
00:10:36Genre,
00:10:37si vous cherchez dans le DNS,
00:10:38c'est le nom que vous allez chercher pour savoir à qui vous êtes censé envoyer vos requêtes DynamoDB,
00:10:44par exemple.
00:10:45Et ces trucs, je suppose, ressemblent à ça..
00:10:47Et Adam peut probablement confirmer ça parce qu'il est,
00:10:52ou était un héros.
00:10:53Ça ressemble à, Oh, c'est en retard.
00:10:55Ouais.
00:10:56On a quelques secondes de retard.
00:10:58Parce que notre vidéo a disparu sur River.
00:11:00Oh, voilà.
00:11:01Donc ça ressemble à dynamodb.use-east-1.api.aws ou quelque chose comme ça.
00:11:05Et je suppose que ça dépend si vous utilisez IPv6 ou IPv4.
00:11:09Genre,
00:11:09ils ont des noms différents selon les cas ou si vous utilisez un truc spécifique,
00:11:14comme ils ont dit que les gouvernements utilisent un nom différent ou je ne sais quoi.
00:11:19Donc ces noms sont en quelque sorte des noms que vous codez en dur,
00:11:23je suppose,
00:11:24dans votre application où vous dites,
00:11:26quand j'ai besoin de faire quelque chose avec DynamoDB,
00:11:29je vais demander ça.
00:11:31Ça a du sens.
00:11:31Et ça semble correct.
00:11:33Adam, genre, parce que moi j'utilise pas les trucs AWS.
00:11:36Ouais?
00:11:36Ouais?
00:11:37Ouais.
00:11:37C'est bon..
00:11:38Donc,
00:11:39vous savez,
00:11:39vous demandez quelque chose comme ça et vous allez envoyer parfaitement.
00:11:42Enfin, je vois ce qu'il veut dire.
00:11:44Ouais.
00:11:45Donc ça va ensuite vous rediriger quelque part parce qu'évidemment il n'y a pas qu'une seule machine qui va gérer tout le trafic DynamoDB dans l'univers entier.
00:11:54Même si vous subdivisez par région,
00:11:56ce que vous pouvez voir ici,
00:11:58vous êtes censé choisir une région.
00:12:00Je suppose que vous n'envoyez pas à une adresse principale.
00:12:04Vous envoyez à une adresse régionale ou peut-être qu'il y a une adresse principale que vous pouvez utiliser qui va le déterminer.
00:12:11Je ne sais pas..
00:12:13Mais bon,
00:12:13à un moment donné vous parlez à ce truc et il doit pointer vers en gros un système d'équilibrage de charge.
00:12:22Donc ce truc est censé pointer vers ce qu'ils ont appelé un arbre DNS..
00:12:27Même s'ils n'ont jamais vraiment expliqué la nature arborescente du truc.
00:12:31Ça ressemblait plutôt à,
00:12:32genre,
00:12:33un tableau pondéré,
00:12:34si vous voulez,
00:12:34où on dit simplement,
00:12:35voilà un tas de machines et vous allez choisir ces machines en fonction des poids qu'on définit pour qu'on puisse équilibrer la charge,
00:12:43d'accord?
00:12:43Donc si une machine prend du retard,
00:12:45on baisse peut-être son poids.
00:12:47Et si une machine semble plutôt vide, on augmente son poids.
00:12:50Et donc ils ont appelé ça un arbre.
00:12:51Donc je suppose que c'est un arbre.
00:12:53Ils n'ont jamais expliqué ce qu'était la partie arbre,
00:12:56mais ce nom est censé pointer.
00:12:58Je peux interrompre une seconde ??
00:13:00Au fait,
00:13:00quelqu'un a effectivement obtenu sa promotion L6 grâce à cet arbre.
00:13:03Donc je pense que la prochaine fois tu devrais découvrir ce qu'est cet arbre.
00:13:07Parce que ça comptait beaucoup pour quelqu'un.
00:13:09Ok.
00:13:09Il y avait un paquet et des ingénieurs impliqués.
00:13:12Je suis d'accord.
00:13:12L'arbre est probablement important.
00:13:14C'est juste pas important pour le bug.
00:13:16Et même ça,
00:13:16donc je dirais qu'il n'y avait pas besoin qu'ils expliquent l'arbre..
00:13:19Donc ça me va qu'ils aient zappé ce que fait l'arbre.
00:13:23Mais j'ai une petite question aussi..
00:13:25Oui.
00:13:26On appelle ça un arbre parce que c'est une analyse de cause racine ou non ??
00:13:29Plus de blagues.
00:13:30On est trop hors sujet.
00:13:32Désolé.
00:13:33Désolé.
00:13:34Donc bref, c'est censé pointer vers ça..
00:13:37Et donc,
00:13:38ce genre de système d'équilibrage de charge basé sur les entrées DNS,
00:13:41et la façon dont ils ont décrit ça dans leur présentation,
00:13:44c'est qu'ils utiliseraient quelque chose comme,
00:13:47disons,
00:13:47plan un 45 point dynamo DB,
00:13:49genre DDB point AWS,
00:13:50d'accord?
00:13:50Bon,
00:13:51c'est la racine de cet arbre,
00:13:52enfin pas analyse de cause racine,
00:13:54mais comme cet arbre,
00:13:55ça contiendrait genre,
00:13:56c'est l'enregistrement de premier niveau d'un ensemble d'enregistrements qui lui permettent de faire son équilibrage de charge.
00:14:03Et je suppose que Route 53 a en quelque sorte cette capacité d'équilibrage de charge.
00:14:07Je lis entre les lignes de la présentation.
00:14:09Ils ne l'ont pas dit explicitement,
00:14:11mais je suppose que Route 53,
00:14:13qui gère tout ça,
00:14:14vous savez,
00:14:14qui est leur propre système DNS,
00:14:16permet que cet équilibrage de charge se fasse en configurant simplement des trucs ici qui indiquent comment l'équilibrage de charge devrait fonctionner,
00:14:24en gros.
00:14:24Et ensuite,
00:14:25ça va choisir la bonne machine en fonction d'une sorte de randomisation dans les poids ou je ne sais quoi.
00:14:30Maintenant,
00:14:31ce qu'ils ont dit,
00:14:32c'est que ce nom,
00:14:33qui existe vraiment,
00:14:34et apparemment il y a un arbre ou quelque chose comme ça.
00:14:37Ce nom est un nom qu'ils ont juste utilisé pour la présentation.
00:14:40Ils n'ont jamais vraiment utilisé un nom lisible par un humain pour ce plan,
00:14:44comme le un 45 que j'ai écrit ici ou autre.
00:14:46C'était vraiment un hash de quelque chose.
00:14:49Donc ça aurait vraiment été genre,
00:14:50vous savez,
00:14:51zéro a F E un,
00:14:52deux,
00:14:52vous voyez,
00:14:53neuf a ou quelque chose comme ça,
00:14:54d'accord.
00:14:55C'est vraiment ce qui serait là.
00:14:57Donc si vous alliez regarder,
00:14:58vous ne verriez pas un nom lisible par un humain,
00:15:01ou du moins à cette époque,
00:15:02vous ne verriez pas,
00:15:03je suppose,
00:15:04vous ne verriez pas genre plan un 45.
00:15:06Vous verriez juste ça.
00:15:07Et donc l'idée était, OK, un utilisateur va l'utiliser.
00:15:10Il interroge ce nom, Route 53 va le diriger genre vers ici.
00:15:13Et ce truc est une sorte d'arbre d'équilibrage de charge que Route 53 peut utiliser qui va vous permettre d'arriver où vous devez aller.
00:15:20D'accord.
00:15:20Ils vont vous donner une vraie machine à laquelle vous pouvez envoyer du trafic au final.
00:15:25Encore une fois, ils n'ont rien décrit de tout ça.
00:15:28Donc je n'ai aucune idée de comment tout ça fonctionne.
00:15:31Je n'ai jamais touché ou utilisé Route 53.
00:15:33Donc je n'en ai aucune idée,
00:15:34mais on va juste supposer que ça arrive parce que ça n'a pas d'importance pour ce bug..
00:15:41On a un héros AWS.
00:15:42Donc si vous êtes confus,
00:15:44vous pouvez toujours demander à Adam et il aura peut-être d'autres insights.
00:15:49Enfin ouais, vas-y..
00:15:50Bon,
00:15:51Route 53 a effectivement plein de façons différentes de répartir le trafic.
00:15:54Donc oui, pondéré est l'une d'entre elles.
00:15:55Et ça ressemble à ce qu'ils ont décrit..
00:15:57Donc d'une manière ou d'une autre,
00:15:58ils ont configuré ces enregistrements avec ça.
00:16:00Et ils n'ont juste pas dit comment,
00:16:01mais quelque chose,
00:16:02quelque chose dans un format arborescent faisait ça.
00:16:04Je suppose qu'il y a genre une pondération,
00:16:05genre l'arbre a des pondérations genre il y a quelques poids au sommet qui se ramifient vers plus de poids ou quelque chose comme ça,
00:16:10parce que c'est plus facile à gérer pour lui parce qu'il y en a beaucoup ou un truc du genre..
00:16:14Qui sait?
00:16:14Bref, je n'en ai aucune idée.
00:16:16Ce qui compte,
00:16:17c'est que c'est ce qui est censé se passer normalement..
00:16:20Maintenant,
00:16:20la raison pour laquelle ça s'appelle plan 145 ici,
00:16:23même si en réalité ça aurait été un code de hash,
00:16:25mais ils y font référence comme plan 145,
00:16:27c'est que l'équilibrage de charge,
00:16:29comme vous pouvez l'imaginer,
00:16:30doit être en quelque sorte continu parce que les machines DynamoDB sont genre en train de faire des trucs tout le temps.
00:16:36Elles deviennent de plus en plus surchargées.
00:16:38Il y a des machines qui tombent en panne ou qui crashent ou qui sait quoi,
00:16:42d'accord ??
00:16:43Ça pourrait arriver, être mis hors ligne.
00:16:45De nouvelles capacités peuvent être ajoutées.
00:16:48Et donc ces trucs doivent être mis à jour constamment,
00:16:51genre tout le temps.
00:16:52Donc ce point de terminaison API principal auquel vous vous connectez,
00:16:56il doit constamment faire ajuster l'arbre vers lequel il pointe.
00:17:00Et donc la façon dont ils font ça,
00:17:02c'est qu'ils créent un autre arbre,
00:17:04l'arbre vers lequel ils vont migrer,
00:17:06vous voyez?
00:17:07Ils créent comme,
00:17:08vous savez,
00:17:09le plan 146 ou quelque chose comme ça.
00:17:11Et ils font tout l'arbre ici.
00:17:13Et puis quand ils sont prêts,
00:17:15genre quand cet arbre est terminé,
00:17:17ils prennent ce,
00:17:18vous savez,
00:17:18cet enregistrement ici,
00:17:20et au lieu qu'il pointe vers celui-là,
00:17:22ils le font pointer vers celui-ci,
00:17:24d'accord?
00:17:24Donc vous créez le nouveau,
00:17:26et ils basculent dessus simplement en changeant ce nom.
00:17:29Maintenant,
00:17:30pour une raison quelconque,
00:17:32et cette raison n'est pas vraiment expliquée..
00:17:36La façon dont ils ont configuré ce processus,
00:17:38c'est qu'ils le divisent en deux parties.
00:17:41Il y a quelque chose appelé un planificateur,
00:17:43qui détermine en gros à quoi devrait ressembler le nouvel arbre.
00:17:46Donc vous pouvez imaginer qu'il y a une machine appelée planificateur.
00:17:50Et je ne sais pas si c'est une vraie machine ou si c'est juste un processus qui tourne sur une machine qui fait tourner d'autres trucs,
00:17:57allez savoir.
00:17:58Mais il y a quelque chose appelé planificateur.
00:18:00Et d'après ce que j'ai pu comprendre,
00:18:02il n'y en a qu'un seul,
00:18:04ce qui veut dire qu'il y a juste un planificateur qui reste là et qui détermine à quoi devrait ressembler le nouveau plan vers lequel on va basculer..
00:18:13Et il fait ça constamment.
00:18:15Donc il génère le plan 145,
00:18:17puis il génère le plan 146,
00:18:19puis il génère le 147,
00:18:21148,
00:18:219,
00:18:2210,
00:18:22vous savez,
00:18:23blablabla,
00:18:24d'accord?
00:18:25Et il continue juste à produire des plans pour l'éternité,
00:18:29parce que c'est son boulot.
00:18:31Maintenant, apparemment, il ne les crée jamais réellement.
00:18:36Son travail n'est pas de les créer dans Route 53.
00:18:40C'est juste de déterminer ce qu'ils seraient si quelqu'un devait les mettre dans Route 53.
00:18:47Ensuite, ils ont trois exécuteurs..
00:18:50Ces exécuteurs récupèrent le plan du planificateur,
00:18:59et ils le mettent dans Route 53.
00:19:06Ça a du sens?
00:19:07Maintenant,
00:19:08un planificateur,
00:19:09d'après ce que je comprends de la prononciation,
00:19:11trois exécuteurs.
00:19:12Il n'y avait aucune explication du pourquoi de cette configuration.
00:19:15Ils ont dit que la raison pour laquelle il y a trois exécuteurs,
00:19:19c'est parce que ça doit être tolérant aux pannes,
00:19:21genre si l'un d'eux tombe en panne ou quelque chose comme ça.
00:19:24Mais ils n'ont jamais expliqué pourquoi on n'aurait pas alors besoin de trois planificateurs,
00:19:29parce que si le planificateur tombait en panne,
00:19:32alors les exécuteurs n'auraient rien à exécuter.
00:19:34Donc ça n'avait pas vraiment de sens.
00:19:36Donc il n'y avait pas d'explication dans le truc sur pourquoi cette structure a l'air comme ça.
00:19:41Ce n'est pas vraiment important pour le bug qu'elle ait l'air comme ça,
00:19:45même si en quelque sorte ça l'est,
00:19:46comme on le verra plus tard.
00:19:48Donc j'étais un peu perturbé par le fait qu'ils n'ont pas justifié ça,
00:19:52mais c'est bon.
00:19:52Donc j'espère que ça a du sens.
00:19:54On a un planificateur.
00:19:55On a trois exécuteurs.
00:19:56Les exécuteurs essaient tous d'exécuter ce plan.
00:19:59Maintenant,
00:19:59ce qui se passe ici,
00:20:00c'est que pour,
00:20:01encore une fois,
00:20:02des raisons pour lesquelles la seule chose qu'ils ont dite dans la présentation était que ça facilite le raisonnement.
00:20:08C'est la seule information à ce sujet.
00:20:10Ils ont dit que ça facilite le raisonnement.
00:20:12Parce que ça facilite le raisonnement,
00:20:14ces exécuteurs utilisent la sérialisation.
00:20:16Donc au lieu qu'ils essaient juste de créer des enregistrements,
00:20:20et si les enregistrements sont déjà là,
00:20:22de juste ne pas les créer ou quelque chose comme ça,
00:20:24en d'autres termes,
00:20:25j'ai trois personnes qui tournent..
00:20:29On veut tous créer,
00:20:30vous savez,
00:20:31disons cet enregistrement de niveau supérieur,
00:20:34plan146.ddb.aws,
00:20:35d'accord ?
00:20:36Nous essayons tous de faire ça. L'un d'entre nous le fait en premier. La personne suivante essaie de le faire, et c'est déjà là ou quelque chose comme ça, n'est-ce pas ? Nous essayons tous de créer le même enregistrement. Donc en théorie, on pourrait simplement avoir trois personnes qui tapent au hasard sur n'importe quelle partie du plan sur laquelle elles essaient de taper, et en théorie ça devrait plus ou moins fonctionner, non ? Et j'ai un peu eu l'impression, bien qu'il ne l'ait pas dit explicitement, j'ai un peu eu l'impression d'après le conférencier qu'il serait d'accord avec ce que je viens de dire, c'est-à-dire qu'ils auraient pu simplement les laisser s'exécuter arbitrairement et ça aurait dû ou devrait être correct. Mais, il a dit qu'ils utilisent la sérialisation pour faciliter le raisonnement. Ce que ça veut dire, c'est qu'au lieu que ces exécuteurs tapent dessus comme ça, ce qu'ils font à la place, c'est qu'ils tentent d'acquérir un verrou pour n'importe quel point de terminaison qu'ils essaient de mettre à jour. Donc en d'autres termes, si cette personne essaie de mettre à jour l'une de ces choses, et j'ai eu l'impression que c'était si vous essayez de mettre à jour celle-ci, mais ça aurait pu être si vous essayez de mettre à jour celle-ci, ou ça aurait pu être sur les deux. Ils n'ont jamais vraiment dit à 100%, si je me souviens bien, exactement où le verrouillage se produisait. Mais le verrouillage se produit lorsqu'ils se disent, d'accord, je vais créer un verrou qui est un enregistrement DNS. Et en utilisant le fait que Route 53 a l'idée d'une opération atomique, c'est-à-dire, vous savez, je peux faire deux choses et si elles ne réussissent pas toutes les deux, alors ça n'en fera aucune. Ils ont essentiellement créé un système de verrouillage qui verrouille via Route 53. Donc les enregistrements DNS de Route 53 sont en fait l'enregistrement de verrouillage, si ça a du sens. Puis-je poser une question rapide ? Oui. Tu as dit que ça le fait par sérialisation ? Je ne comprends pas très bien ce que ça veut dire. Parce que je pensais que la sérialisation, c'est juste convertir d'une mémoire à une représentation mémoire différente de quelque chose. Je suis désolé, sérialisation différente. Donc oui, c'est de la sérialisation. Dans ce cas, nous voulons dire littéralement la sérialisation temporelle, ce qui signifie qu'ils voulaient que ces exécuteurs aient une sorte de moyen par lequel ils organiseraient leur comportement dans un ordre plutôt que d'être simplement arbitraires. Et la façon dont ils ont fait ça, c'était le verrouillage. Donc ce qui va se passer, c'est qu'au lieu que cette personne fasse juste ce qu'elle va faire, genre, d'accord, je vais genre, j'ai fini ça, je vais maintenant pointer ce type sur le plan 146. Au lieu de faire ça, elle tente d'acquérir un verrou sur genre ça, non ? Et si elle n'obtient pas le verrou, elle ne fera pas le changement. Donc un seul de ces exécuteurs peut être en train de mettre à jour ça à un moment donné. Ça a du sens ? Mm hmm. Maintenant encore une fois, exactement ce qu'ils essayaient de faire avec ça n'a jamais été expliqué. Ils ont juste dit que ça facilite le raisonnement et l'ont laissé là. Donc je ne sais pas pourquoi ils pensaient que c'était une amélioration. Et de façon amusante, c'est ce qui finit par révéler le bug. Donc ce n'était pas une amélioration. Si quoi que ce soit, c'était probablement mauvais. Mais donc Casey, tu dis qu'ils n'ont pas genre, ils n'ont pas une bonne raison pour, ils disent qu'on va faire en sorte que les exécuteurs s'exécutent presque comme un à la fois ? Pourquoi ont-ils, pourquoi ont-ils trois exécuteurs ? Je ne comprends pas. Genre, pourquoi n'en ont-ils pas juste un ? Ils ne le disent tout simplement pas. On ne sait pas pourquoi. Et ils n'ont pas vraiment expliqué, genre, je n'ai pas vraiment entendu d'explication sur comment on a trois exécuteurs concurrents. On s'attend à ce qu'ils puissent tomber en panne, c'est pourquoi on en a trois.
00:22:08D'accord.
00:22:18Mais ils prennent un verrou.
00:22:46Donc que se passe-t-il si ce type prend le verrou et tombe ensuite en panne ??
00:24:07Exactement.
00:24:13Genre, je n'ai pas entendu d'explication pour ça non plus.
00:24:17Donc tout ça m'a vraiment embrouillé.
00:24:19Genre je,
00:24:19je,
00:24:20je ne m'en plains pas dans le cadre de ce dont on parle ici,
00:24:23parce que ce n'est pas important pour la question qui nous occupe.
00:24:26Mais en tant que présentation,
00:24:28j'avais tellement de questions.
00:24:30Genre j'étais là,
00:24:31je ne comprends pas pourquoi vous avez fait tout ça pour être complètement honnête.
00:24:35Voilà.
00:24:36Et peut-être que c'est,
00:24:37encore une fois,
00:24:38en partie parce que je n'utilise pas les services AWS.
00:24:41C'est possible que certaines de ces choses seraient évidentes si vous êtes quelqu'un qui utilise régulièrement Route 53 ou quelque chose du genre,
00:24:48vous seriez là,
00:24:49oh,
00:24:50c'est parce que les verrous peuvent être définis avec un délai d'expiration ou je veux dire,
00:24:55j'en sais rien.
00:24:56Voilà.
00:24:56Mais bref, donc ouais, donc ils font ça.
00:24:58Et ce qui finit par arriver pour,
00:25:00pour ce,
00:25:01le truc qui révèle le bug c'est que ce qui finit par arriver c'est que ces acteurs,
00:25:05quand ils n'obtiennent pas le verrou,
00:25:07ils font juste genre un recul,
00:25:09non?
00:25:09Ils vont en gros juste se dire,
00:25:11ok,
00:25:11laisse-moi attendre et je vais réessayer.
00:25:14Donc un acteur,
00:25:14cet acteur essaie d'obtenir le verrou,
00:25:16mais quelqu'un d'autre a déjà le verrou.
00:25:19Donc il attend juste un petit moment.
00:25:21Il essaie d'obtenir le verrou à nouveau.
00:25:23C'est ce qui va se passer.
00:25:24Voilà.
00:25:25Et ce qu'ils ont dit s'est produit c'est qu'ils sont tombés sur un cas pathologique,
00:25:29entre guillemets,
00:25:30où l'un des acteurs est,
00:25:31vous savez,
00:25:32a exécuté un certain plan.
00:25:33Et ce plan, disons qu'il était assez ancien.
00:25:36Je crois qu'ils ont utilisé 110 comme exemple.
00:25:38Donc il a exécuté le plan 110.
00:25:40Et il veut pointer,
00:25:41vous savez,
00:25:42c'est genre,
00:25:42je dois configurer l'API pour pointer vers mon 110 essaie d'obtenir le verrou pour mettre à jour dynamodb.use.one ou peu importe,
00:25:49et échoue parce que quelqu'un d'autre est en train d'exécuter le plan 111 ou quelque chose comme ça.
00:25:55Voilà.
00:25:55Ou le plan 109 aurait pu être un plan précédent.
00:25:58Donc les autres acteurs le font.
00:25:59Il ne peut pas le faire.
00:26:01Il recule.
00:26:01Voilà..
00:26:02Et rappelez-vous cet acteur ici, on est sur le 110.
00:26:05Il essaie, il veut vraiment l'exécuter..
00:26:07Il réessaie.
00:26:08Quelqu'un d'autre a le verrou.
00:26:09Maintenant il réessaie, toujours verrouillé.
00:26:11Cette personne est bloquée sur le 110,
00:26:13essayant désespérément de l'exécuter.
00:26:15Il n'y arrive pas.
00:26:15Apparemment ça s'est produit tellement de fois que les autres acteurs et le planificateur continue à produire de nouveaux plans pendant tout ce temps.
00:26:22Voilà..
00:26:23Les autres acteurs,
00:26:24ils arrivent genre au 145 ou quelque chose et 146 ils exécutent des plans qui sont genre bien plus loin que le 110.
00:26:31Voilà.
00:26:31Et ce gars-là est toujours bloqué parce qu'il n'obtient juste jamais le verrou par malchance.
00:26:37Voilà.
00:26:37Finalement,
00:26:38à un moment donné après que genre le plan 145 a déjà été exécuté et pointé par un autre acteur et tout ce bazar,
00:26:45le plan 110,
00:26:45cet acteur inactif qui essaie toujours de le faire obtient finalement le verrou.
00:26:50Je veux dire, c'est genre, ouais.
00:26:52Et donc là il dit, ok, on pointe maintenant vers le 110.
00:26:56Oui.
00:26:56Voilà..
00:26:58Donc maintenant c'est sur un plan super ancien et obsolète,
00:27:00mais ça ne devrait vraiment pas être un problème.
00:27:02Voilà..
00:27:03Parce qu'à terme la prochaine fois qu'un acteur aura quelque chose,
00:27:06ça sera un plan bien plus récent.
00:27:07Ils vont juste exécuter le plan,
00:27:09vous savez,
00:27:09146 ou sept ou huit ou peu importe.
00:27:11Et on va le re-pointer vers ça et on revient à un plan frais.
00:27:13Donc tout le monde aura juste un mauvais équilibrage de charge pendant genre quelques minutes,
00:27:17mais ensuite ça ira.
00:27:18Voilà.
00:27:18Ils ont effectivement eu un mauvais équilibrage de charge pendant au moins quelques minutes..
00:27:22Voilà.
00:27:23Oui.
00:27:23C'est vrai.
00:27:24Enfin, c'est bien pire que ça.
00:27:26C'est ce qui était censé se passer.
00:27:29Voilà..
00:27:30C'est-à-dire que c'est comme ça qu'ils s'attendraient à ce que ça fonctionne aussi.
00:27:35D'accord.
00:27:35Le problème c'est ces,
00:27:36ils ne voulaient pas non plus que Route 53 se retrouve engorgé avec tous ces enregistrements.
00:27:41Parce que s'ils les laissaient juste traîner,
00:27:44à terme après,
00:27:44vous savez,
00:27:45trois mois,
00:27:46vous avez genre 8 milliards d'enregistrements que vous avez entassés dans Route 53 pour chaque,
00:27:51vous savez,
00:27:51toutes les quelques minutes vous insérez ce grand arbre de poids et tout.
00:27:55Ils se sont dit,
00:27:56ok,
00:27:57à un moment donné on devrait juste nettoyer ces plans..
00:28:00Donc les enactors recherchent aussi les plans qui datent d'un certain temps.
00:28:05Et s'ils sont trop anciens, ils les suppriment.
00:28:08Ce qui s'est passé,
00:28:09c'est qu'ils pointaient vers le plan 110.
00:28:12Cet enactor finit par obtenir le verrou.
00:28:15Il pointe vers 110.
00:28:16Un autre enactor se dit,
00:28:18oh,
00:28:18wow,
00:28:19110,
00:28:19mec,
00:28:20c'est vraiment vieux.
00:28:21On devrait s'en débarrasser et le supprime.
00:28:24Donc maintenant le DynamoDB us-east-1.api.aws pointe vers un enregistrement qui ne peut pas être résolu.
00:28:31C'est juste quelque chose,
00:28:32en fait,
00:28:33encore une fois,
00:28:34ça ne ressemblerait pas à plan 110.
00:28:36Ça ressemblerait à OAFE129A,
00:28:38un certain hash,
00:28:39point,
00:28:40enfin,
00:28:40DDB.aws.
00:28:41Mais ça pointe vers ce nom.
00:28:42Et si vous interrogez ce nom, vous n'obtenez rien..
00:28:46Donc ce qui se passerait à ce moment-là,
00:28:48c'est que tous ceux qui essayaient d'obtenir un endpoint pour envoyer des trucs recevraient un nom non résolvable,
00:28:54en gros.
00:28:55Et je ne sais pas vraiment ce qui se passe dans Route 53 quand ça arrive,
00:28:58mais vous recevriez fondamentalement quelque chose que vous ne pourriez pas utiliser ou juste du charabia comme IP,
00:29:04qui sait.
00:29:05Mais quoi qu'il en soit,
00:29:06si vous tentiez réellement de l'utiliser,
00:29:08vous n'alliez pas obtenir de réponse..
00:29:10Intéressant.
00:29:11Est-ce parce qu'AWS n'utilise pas assez de Rust,
00:29:13parce que c'est manifestement un bug de type use-after-free?
00:29:16Et donc je pense que Rust aurait résolu ça, non?
00:29:19Si vous réécriviez Route 53 entièrement en Rust,
00:29:21évidemment,
00:29:22tous ces problèmes ne seraient pas là.
00:29:24Non,
00:29:25pour être précis,
00:29:25je pense que dans la présentation,
00:29:27ils ont dit,
00:29:28pas à propos de Rust,
00:29:29mais ils ont dit ce qui se passerait spécifiquement,
00:29:32c'est-à-dire je pense que lorsque vous demandiez cette chose ou soit cette chose ou cette chose,
00:29:37je ne sais pas à laquelle ils faisaient référence,
00:29:39parce que je n'arrive pas à me rappeler exactement,
00:29:42vous recevriez juste un truc qui dit aucun enregistrement trouvé.
00:29:45Donc c'est le résultat final de ce qui se passerait,
00:29:48que ce soit en demandant ceci ou en demandant cela,
00:29:51je ne suis pas sûr,
00:29:52mais vous recevriez juste aucun enregistrement trouvé.
00:29:55C'est ce que vous auriez reçu lorsque vous essayiez d'appeler cette API.
00:29:58Donc quelle que soit la bibliothèque que vous utilisiez pour utiliser DynamoDB,
00:30:02elle vous dirait juste,
00:30:04hé,
00:30:04aucun enregistrement trouvé,
00:30:06mec.
00:30:06Désolé.
00:30:07Donc si vous demandez à n'importe qui sur internet,
00:30:09ils disent tous,
00:30:10oui,
00:30:11ils ont expliqué le bug.
00:30:12C'est le bug.
00:30:13Le bug, c'est qu'il y avait cette race condition.
00:30:15Tout le monde,
00:30:16parce que dès que vous dites race condition,
00:30:18le cerveau de tout le monde s'éteint.
00:30:20Ils se disent, oh, ok, eh bien, c'était une race condition.
00:30:23Terminé.
00:30:24Rien à voir ici.
00:30:25Donc ils disent, c'est une race condition.
00:30:27Ils l'expliquent.
00:30:28C'est comme, non, ils ne l'ont pas expliqué.
00:30:30Parce que si vous réfléchissez à ce qui se passerait ici,
00:30:33immédiatement après ça,
00:30:34tout le monde reçoit ça,
00:30:35c'est un nouvel enactor.
00:30:37Un nouvel enactor va juste en enacter un nouveau, non?
00:30:40Et donc le bug, c'est pourquoi ça ne s'est pas produit?
00:30:42C'est le véritable RCA que je voulais voir,
00:30:45c'est pourquoi l'enactor suivant n'est pas venu le corriger?
00:30:48Puis-je proposer autre chose?
00:30:49Ne serait-ce pas aussi un bug?
00:30:51Genre pourquoi écrire un enregistrement si ancien qu'il devrait être supprimé immédiatement?
00:30:56Eh bien,
00:30:56ce n'était pas,
00:30:57c'était parce que c'était ce type qui l'avait écrit il y a pas mal de temps.
00:31:01Et c'était le poids.
00:31:02Enfin,
00:31:03je veux dire,
00:31:03si vous demandez,
00:31:04pourquoi n'ont-ils pas écrit des enactors avec un meilleur code?
00:31:08Ouais, c'est plutôt cool..
00:31:11Ok, d'accord.
00:31:12Il semble que si vous mettez à jour vers quelque chose qui devrait être supprimé immédiatement,
00:31:16c'est pas comme si,
00:31:17ça ressemble au problème juste là.
00:31:19Vous avez fait quelque chose de mal bien avant.
00:31:21Ouais,
00:31:22même si ça ne corrige pas vraiment la structure théorique de ce truc,
00:31:25une simple vérification dans ce gars quand après qu'il a fini de reculer sur le verrou,
00:31:29il devrait peut-être vérifier s'il est sur le point de définir ça sur quelque chose qu'il supprimerait s'il exécutait son code de suppression est probablement une bonne mesure de sécurité.
00:31:39Mais ouais, donc tout à fait d'accord avec lui.
00:31:41Ok,
00:31:42mais un enactor a travaillé vraiment,
00:31:43vraiment dur pour obtenir cet enregistrement.
00:31:46Attendant longtemps.
00:31:47Oh, il va avoir ses cartes Pokémon..
00:31:49Quelqu'un a déjà attendu.
00:31:50Donc laissez-le juste écrire l'enregistrement.
00:31:53Ok.
00:31:53Donc, donc je veux entendre parler de ça..
00:31:56Malheureusement,
00:31:57si vous regardez la présentation et le RCA,
00:32:01c'est introuvable.
00:32:03La présentation comporte au moins un petit segment de 12 secondes où elle indique approximativement où se trouve le bug.
00:32:13Laissez-moi vous expliquer de quoi il s'agit.
00:32:17Apparemment,
00:32:18ce qui se passe en parallèle,
00:32:20c'est que lorsque vous faites DynamoDB us-east-one,
00:32:24mais que vous le pointez vers votre plan,
00:32:28vous effectuez également une autre opération en même temps.
00:32:33Et cette opération consiste à définir le rollback..
00:32:40Je crois que c'est DD.
00:32:41Est-ce que c'est DDB point rollback point AWS?
00:32:45Je ne me souviens plus exactement de quoi il s'agit ici..
00:32:49Il y a un enregistrement de rollback.
00:32:51Il définit cet enregistrement sur l'ancien plan,
00:32:54quel qu'il soit.
00:32:55Donc si nous étions ici en pointant sur 145,
00:32:58et que maintenant nous allons pointer sur 110,
00:33:01d'accord,
00:33:02cet ancien acteur,
00:33:03genre je passe au 110,
00:33:04il tente de le définir,
00:33:06de prendre ce nom actuel,
00:33:07peu importe lequel,
00:33:09et de déplacer ce nouveau...
00:33:10ce nom,
00:33:11qui aurait été le plan 145,
00:33:13de déplacer ça pour que l'adresse de rollback pointe sur l'ancien plan..
00:33:18Voilà.
00:33:18Et c'est juste pour le débogage.
00:33:20Ou,
00:33:20vous savez,
00:33:21c'est essentiellement juste pour faciliter le travail de l'opérateur,
00:33:24n'est-ce pas ??
00:33:24S'ils veulent revenir au plan précédent ou quelque chose comme ça,
00:33:28ou si vous voulez juste savoir quel était le plan précédent,
00:33:31vous pouvez le voir ici,
00:33:32d'accord?
00:33:33Ça,
00:33:33c'est la première partie de ce qu'ils ont dit sur la défaillance.
00:33:37Je voudrais souligner un point ici : ça n'avait aucun sens pour moi non plus.
00:33:41Parce que je me disais,
00:33:42d'accord,
00:33:43vous me dites que ces choses se mettent à jour toutes les minutes environ.
00:33:47À quoi bon en avoir un seul?
00:33:48Genre,
00:33:49le temps que vous vous connectiez,
00:33:50il est déjà passé de celui vers lequel vous vouliez revenir à quelque chose de nouveau.
00:33:55C'est justement le plan que vous ne voulez pas parce que tout est tombé en panne,
00:33:59pas vrai?
00:34:00Genre, c'est ça, non?
00:34:01Si vous...
00:34:01vous ne voulez pas ça,
00:34:03vous voulez juste ces noms dans une liste.
00:34:05Pour pouvoir dire, c'était quoi à 12h30.
00:34:07Celui-là, voilà.
00:34:08Donc ça n'avait aucun sens pour moi?
00:34:10Je n'ai littéralement aucune idée de pourquoi ça pourrait être bien,
00:34:13d'accord.
00:34:14Ça ne semblait pas faire ce que vous voudriez vraiment,
00:34:17c'est-à-dire pouvoir marquer un moment précis et dire,
00:34:20on doit revenir à 13h parce que tout est parti en vrille après ça,
00:34:23pas vrai ?.
00:34:26Bref, donc ça n'avait aucun sens pour moi.
00:34:28Mais encore une fois, pas vraiment lié au bug.
00:34:30Donc je n'ai pas demandé pourquoi,
00:34:32je me dis juste,
00:34:33d'accord,
00:34:33c'est ce qu'il fallait faire.
00:34:35Et on ne peut revenir qu'à une seule version,
00:34:37c'est ce que vous dites.
00:34:38Ouais, même si les autres arbres existent bel et bien.
00:34:40Donc on pourrait facilement le faire juste en connaissant le nom.
00:34:43Donc tout ça, c'est juste...
00:34:45c'est mettre un nom lisible par un humain sur quelque chose dont vous vous fichez probablement.
00:34:49Voilà.
00:34:49Mais ils ne peuvent pas vraiment...
00:34:51ils ne peuvent pas vraiment stocker tant de choses que ça..
00:34:54Casey,
00:34:54je ne pense pas qu'ils puissent vraiment mettre genre,
00:34:57je ne sais pas,
00:34:58Adam,
00:34:58comme ça,
00:34:59ils n'ont pas beaucoup de capacité là,
00:35:01pas vrai?
00:35:01Genre, c'est beaucoup de lignes.
00:35:03Si c'était moi, j'aurais juste fait de ça un horodatage.
00:35:06Si c'est ce que vous vouliez, pas vrai?
00:35:08J'aurais dit,
00:35:08quand est-ce que le planificateur ou quand est-ce que cette personne a pointé vers cette chose?
00:35:13Genre quand vous avez obtenu le verrou,
00:35:15vous changez ce nom en horodatage,
00:35:17et vous mettez à jour ça de manière atomique.
00:35:19Donc ensuite vous savez juste que si je veux revenir à 13h,
00:35:22je cherche juste...
00:35:23celui qui avait l'horodatage,
00:35:25vous savez,
00:35:25l'horodatage le plus ancien,
00:35:27pas après ce moment-là..
00:35:28Et c'est ce qui tournait à ce moment-là.
00:35:29C'est ce que j'aurais fait.
00:35:30Voilà.
00:35:31Mais je ne sais pas.
00:35:32Donc je n'ai aucune idée de pourquoi ils ont fait ça.
00:35:33Ils ont fait ce qu'ils ont fait.
00:35:35Je...
00:35:35vous savez, peut-être que ça pourrait avoir un sens parfait.
00:35:37Encore une fois, je ne connais pas leur système.
00:35:39Toutes ces choses, elles ont peut-être un sens parfait..
00:35:41Donc je ne suis pas vraiment...
00:35:42je dis juste que je ne les comprends pas.
00:35:43Je ne...
00:35:43ce ne sont peut-être pas de mauvaises idées, pas vrai ?.
00:35:45Ce sont peut-être de bonnes idées,
00:35:47si vous compreniez le reste du système.
00:35:49Donc bref,
00:35:49ce qu'ils disent,
00:35:50et c'est tout ce qu'on obtient,
00:35:52c'est cette opération,
00:35:53c'est-à-dire définir le rollback pour pointer vers l'ancien plan qui était en cours d'utilisation,
00:35:58vous savez,
00:35:59qui dans ce cas aurait en fait été plus récent dans certains cas,
00:36:03pas vrai?
00:36:03Donc ce n'est pas vraiment le plan pointé précédemment,
00:36:06qui peut être plus ancien,
00:36:07peut-être plus récent.
00:36:09Faire cette activité..
00:36:11Si ce plan n'existait plus,
00:36:12c'est-à-dire s'il avait été supprimé comme ceci,
00:36:16alors l'enactor s'arrête définitivement.
00:36:19Donc à chaque fois,
00:36:20une fois que vous êtes dans un état où dynamodb.usc est celui-là,
00:36:25non.
00:36:25On fait toute la séquence d'étapes qu'on a dite ici?
00:36:29Ce plan est supprimé..
00:36:31Donc maintenant,
00:36:32ceci pointe vers un nom invalide,
00:36:33genre impossible à résoudre,
00:36:34on ne peut pas résoudre plan plan-110,
00:36:36qui est en fait un code hexadécimal.
00:36:38Mais peu importe ce que c'était,
00:36:39on ne peut plus le résoudre..
00:36:41Une fois que cet état est vrai,
00:36:43la prochaine fois qu'un enactor arrive et essaie de le faire pointer vers un nouveau plan,
00:36:49quel que soit ce nouveau plan,
00:36:51il ne peut pas...
00:36:52quand il arrive vraiment jusque-là et essaie de définir le rollback,
00:36:56ça va planter définitivement.
00:36:58Par conséquent,
00:36:59les trois enactors vont maintenant s'arrêter parce qu'au final,
00:37:03tous les trois vont essayer d'exécuter un nouveau plan.
00:37:07Ils vont d'abord essayer de définir le rollback pour pointer vers l'ancien plan,
00:37:12quel qu'il soit,
00:37:13constater qu'il n'y a pas de plan là.
00:37:16Et apparemment, c'est juste un plantage brutal.
00:37:19Oh, c'est dingue.
00:37:20Je pensais que les trois enactors étaient censés apporter de la redondance.
00:37:25Encore une fois,
00:37:26c'est pour ça que je m'énerve avec les gens en ligne qui répondent genre : c'était une race condition.
00:37:32Ce n'était pas une race condition.
00:37:35La race condition n'est pas nécessaire pour ça.
00:37:38La race condition explique juste pourquoi vous vous êtes retrouvé avec ce nom impossible à résoudre.
00:37:44Mais si vous n'aviez pas eu le code qui a mal fait ça,
00:37:48ça aurait tout simplement fonctionné..
00:37:52Vous n'auriez jamais rien su.
00:37:53Vous auriez eu une panne momentanée d'une minute sur DynamoDB ou quelque chose comme ça,
00:37:58mais je suppose qu'il y a des pannes d'une minute sur DynamoDB de temps en temps.
00:38:02Ce n'est pas une actualité mondiale..
00:38:04Ce qui fait la une mondiale,
00:38:05c'est de le mettre hors service définitivement,
00:38:08ce qui s'est passé ici.
00:38:09Et tant qu'un humain réel n'intervient pas pour comprendre ça,
00:38:11le réinitialiser,
00:38:12relancer ces enactors,
00:38:13c'est tout simplement hors service.
00:38:15C'est hors service en permanence.
00:38:16Donc potentiellement pendant des heures.
00:38:18Et ça a duré assez longtemps,
00:38:19je suppose,
00:38:20dans ce cas pour ensuite avoir des pannes en cascade.
00:38:22Vous n'auriez jamais eu ça.
00:38:23C'est juste une panne momentanée.
00:38:25Si certaines personnes obtenaient momentanément un nom impossible à résoudre ou aucun enregistrement,
00:38:29elles réessaieraient simplement.
00:38:31C'est généralement comme avec le DNS,
00:38:33c'est comme votre téléphone,
00:38:34vous êtes passé dans un tunnel.
00:38:35C'est tout ce que ça aurait été..
00:38:37Donc je veux savoir à quoi ressemblait le code ici?
00:38:40Comment avez-vous écrit quelque chose qui,
00:38:43si ce n'était pas un nom valide,
00:38:45ce qui ne serait même pas le cas au démarrage,
00:38:47c'est-à-dire si vous lanciez ce système et que l'opérateur ne l'avait pas préconfiguré,
00:38:52ça ne pointerait vers rien.
00:38:54C'est le cas par défaut auquel on penserait commencer.
00:38:57Donc si vous faites ça,
00:38:59on penserait que vous géreriez simplement ce cas parce que l'adresse de rollback pourrait simplement ne pointer vers rien.
00:39:06Prenez juste ce que c'est.
00:39:08Si ce n'est rien,
00:39:09définissez l'adresse de rollback sur rien..
00:39:12Terminé.
00:39:12Donc il y a quelque chose de vraiment bizarre dans la façon dont ils ont écrit ce code.
00:39:17Et c'est ça qui aurait dû être dans le RCA.
00:39:19C'est tout le bug pour moi.
00:39:21Ceci n'est que du décor pour expliquer comment on s'est retrouvé avec ce truc qui pointait vers rien.
00:39:26Le même bug se serait produit si quelqu'un avait accidentellement supprimé cet enregistrement.
00:39:31Genre un opérateur qui aurait fait : oups,
00:39:33merde,
00:39:34je l'ai mis à rien..
00:39:35Ce même bug se serait produit selon la présentation.
00:39:38Donc la cause racine n'est pas la race condition.
00:39:41La race condition est une parenthèse.
00:39:43Ça a du sens?
00:39:44Question rapide.
00:39:45Donc je réfléchis vraiment à ça.
00:39:47Et donc ça veut dire que le truc qui définit le rollback suppose probablement qu'une sorte de struct avec plein de mémoire ou quelque chose a été passé,
00:39:55fait une sorte d'accès.
00:39:57Ça explose.
00:39:57Ou tu penses que c'est le même style de bug,
00:40:00celui de la ligne unique qui a mis Cloudflare hors service,
00:40:03où ils supposent juste que c'est là et l'unwrap..
00:40:07C'est en Rust.
00:40:08C'est du Rust memory safe.
00:40:10Ils l'unwrap, ça explose..
00:40:13Je ne sais vraiment pas.
00:40:14Mon intuition,
00:40:14dans ma tête,
00:40:15c'était genre,
00:40:16quelle est la chose que je vois les gens faire très souvent et où je me dis toujours,
00:40:20pourquoi feriez-vous ça?
00:40:21Mais c'est juste parce que c'est comme ça qu'ils ont appris à programmer.
00:40:25Et je me disais que si tu écrivais dans un de ces langages qui aiment lancer des exceptions pour les conditions d'erreur,
00:40:32ce serait un parfait exemple de ça.
00:40:33Donc si tu avais un truc où tu te dis,
00:40:35oh,
00:40:36je suis allé chercher l'enregistrement DNS vers lequel ce truc pointe..
00:40:40Et normalement,
00:40:41dans un environnement de programmation sensé,
00:40:43personne ne lance d'exception là.
00:40:45S'ils ne récupèrent rien, ils retournent simplement rien.
00:40:47Et ensuite,
00:40:48quand la personne va définir ddb.robot.js,
00:40:50elle le définit simplement à rien,
00:40:51ce qui est le comportement correct.
00:40:53Genre rien ne circule,
00:40:54littéralement la valeur rien circule correctement dans ce flux.
00:40:57Donc si tu l'écrivais pour être,
00:40:58puisque c'est un service fondamental du noyau,
00:41:00en supposant que tu essayais d'écrire quelque chose de tolérant aux pannes,
00:41:04tu ne ferais jamais un truc comme lancer une exception.
00:41:06Donc dans mon cerveau,
00:41:07je me dis,
00:41:08je parie que ce qui se passe ici,
00:41:09c'est que quand tu demandes cet enregistrement,
00:41:11ils utilisent juste un appel de bibliothèque ou quelque chose qui lance une exception quand l'enregistrement n'existe pas.
00:41:17Et ça a juste lancé une exception et l'acteur s'est arrêté.
00:41:20C'est mon hypothèse.
00:41:21Et je pourrais me tromper complètement parce que c'est juste une supposition au hasard.
00:41:25Mais c'est pour ça que je veux voir l'analyse post-incident.
00:41:27C'était quoi.
00:41:28Ça pourrait être exactement le truc dont Trash parlait.
00:41:30Je veux dire, ça pourrait être le truc dont Prime parlait?
00:41:33Ça pourrait être le truc que je viens de dire.
00:41:35Ça pourrait être n'importe quoi.
00:41:37Et je veux savoir parce que c'est là que se trouve la vraie leçon ici.
00:41:40Éviter cette condition de concurrence est complètement sans importance.
00:41:43Cette condition de concurrence aurait pu rester là.
00:41:45Et bien qu'il était important de la corriger à un moment donné,
00:41:48pour éviter ces pannes bizarres de cinq secondes une fois par an ou quelque chose comme ça,
00:41:52ce n'est pas vraiment la chose qu'on veut le plus apprendre.
00:41:55Ce qu'on veut le plus apprendre,
00:41:57c'est de ne pas écrire ce truc.
00:41:58Et on ne sait même pas ce que c'était ce truc.
00:42:00Alors comment ne pas l'écrire.
00:42:02C'est pour ça que je pense que c'était une mauvaise analyse post-incident.
00:42:05Tu vois ce que je veux dire?
00:42:06Oui.
00:42:07Oui?
00:42:07D'accord.
00:42:08Dans quoi est écrit la majorité d'AWS, Adam ?.
00:42:11C'était Java.
00:42:12J'étais sur le point de dire que quelqu'un du chat a dit Scala.
00:42:16Ils ont dit qu'ils avaient travaillé chez AWS pendant sept ans et ont dit que la majorité est écrite en Scala.
00:42:24Bon, techniquement c'est du Java avec des étapes en plus.
00:42:28Et ça va les énerver à l'infini.
00:42:30Donc c'est vraiment tout pour moi..
00:42:34C'était un truc où je me suis dit,
00:42:35j'ai l'impression de ne pas avoir vu l'explication.
00:42:37Et en fait,
00:42:38je pense que c'est important de l'entendre parce qu'il y avait une mauvaise pratique de programmation au fond de tout ça.
00:42:43Et je veux savoir ce que c'était,
00:42:44surtout parce que ça aide les gens comme moi quand,
00:42:46tu sais,
00:42:47je ne fais pas vraiment beaucoup de formation en architecture en ce moment,
00:42:50mais à un moment donné j'aimerais probablement en faire parce que je pense qu'il y a beaucoup de mauvaise architecture là-bas.
00:42:55Et donc j'essaie un peu de faire attention à ces choses.
00:42:57Genre quels sont les types d'erreurs architecturales que les gens font?
00:43:00Et je parie que c'en était une.
00:43:02Voilà.
00:43:02Et donc j'aimerais savoir.
00:43:03J'aimerais savoir..
00:43:04Ouais.
00:43:05Je pense que ce à quoi je m'attendrais,
00:43:07c'est au moins un exemple simple et reproductible de pourquoi ça a explosé,
00:43:11genre un petit bout de code complet.
00:43:13Et c'est quelque chose que tu as mentionné plus tôt,
00:43:15c'est un peu notre approche pour ce genre de choses.
00:43:18Si je revois le code de quelqu'un et que je vois quelque chose qui a l'air bizarre,
00:43:22je fais toujours de mon mieux pour créer mon propre petit bac à sable et tester ma théorie.
00:43:27Et ensuite,
00:43:28je leur montre concrètement le code en disant : voilà pourquoi c'est probablement faux.
00:43:32Voici un exemple simple et reproductible.
00:43:34Ça m'aide aussi à vraiment comprendre.
00:43:36Parce que beaucoup de gens,
00:43:38comme tu l'as dit,
00:43:39vont voir quelque chose qui a l'air bizarre,
00:43:41mais ils ne savent pas pourquoi ça a l'air bizarre,
00:43:43mais je ne peux pas m'arrêter là.
00:43:45Je dois vraiment le développer et ensuite comprendre.
00:43:48Donc c'est ce à quoi je m'attendrais.
00:43:50Et tu sais,
00:43:50comme je l'ai dit,
00:43:51les pannes de CrowdStrike et de Google,
00:43:53je les ai trouvées meilleures parce qu'ils te disaient clairement : écoute,
00:43:57c'était un pointeur nul déréférencé ici,
00:43:59ou c'était un dépassement de tableau parce qu'on pensait qu'il y en aurait que 20 et on en a mis 21 dans le fichier de config.
00:44:06Voilà.
00:44:06Et là,
00:44:07je sais exactement quel genre de code cause ce genre de problème.
00:44:10Et en plus,
00:44:11pour reprendre un commentaire précédent,
00:44:13littéralement,
00:44:13d'après ce que je sais,
00:44:15tous ceux qui programment en Rust ne le font que pour pouvoir dire de temps en temps,
00:44:19quand ils voient quelque chose comme ça : eh bien,
00:44:22si ça avait été écrit en Rust,
00:44:23ça ne serait pas arrivé.
00:44:24Mais là,
00:44:25ils n'ont même pas reçu assez d'informations pour faire ce commentaire..
00:44:29Ils l'ont probablement fait quand même,
00:44:32pour être honnête,
00:44:33mais ils n'ont pas reçu l'info.
00:44:35Donc il faut respecter une règle dans les RCA : il faut donner aux Rustacés assez d'informations pour qu'ils puissent,
00:44:42s'ils le souhaitent,
00:44:43dire correctement que ça aurait été évité en Rust..
00:44:46Et là, on n'a pas ça.
00:44:48On ne sait pas si ça aurait été évité en Rust..
00:44:51On n'en a aucune idée.
00:44:52Ça n'aurait probablement pas été le cas,
00:44:55mais on ne sait pas.
00:44:56Eh bien,
00:44:56Casey,
00:44:57on a quand même de bonnes chances parce que ça n'aurait probablement jamais été livré.
00:45:01Donc ça l'aurait évité..
00:45:03C'est vrai.
00:45:03On aurait zéro serveurs en prod parce qu'on serait encore en train de concevoir les serveurs.
00:45:09Ouais..
00:45:09CloudFlare fait vraiment du bon boulot sur ce point aussi.
00:45:13Ils montrent plein de lignes de code et disent : voilà exactement ce qui se passe.
00:45:17Même si le problème est en amont,
00:45:19c'est cette ligne qui a explosé à cause de toutes ces conditions précédentes.
00:45:24C'était moi qui me moquais de Rust avec le unwrap,
00:45:26ce qui n'était pas vraiment le problème.
00:45:29Mais tu vois, tous ces trucs s'accumulent.
00:45:31Donc ils font vraiment du bon boulot.
00:45:33Je suis surpris de voir à quel point AWS a fait un travail médiocre sur ce coup-là.
00:45:38Et l'autre truc aussi,
00:45:39c'est que maintenant ça me rend inutilement méfiant envers vous,
00:45:43tu vois ??
00:45:44Quand je lis ça, je me dis : vous cachez quelque chose?
00:45:46Vous n'avez pas vraiment compris ce qu'était le bug?
00:45:48Vous avez longuement parlé de cette condition de concurrence,
00:45:51mais même d'après votre propre présentation,
00:45:53je peux voir que la condition de concurrence n'était pas vraiment importante.
00:45:56C'était juste ce qui a conduit à ce que l'enregistrement soit mis à rien,
00:45:59mais on s'en fiche,
00:46:00non?
00:46:00C'est le genre de chose qu'il est bien de mettre dans l'ACR comme explication de pourquoi ce bug s'est produit maintenant plutôt qu'à un autre moment,
00:46:06mais ce n'est pas le bug.
00:46:07Donc ça me paraît bizarre.
00:46:08Quand je vois une ACR qui ne parle pas du bug,
00:46:10ça éveille mes soupçons.
00:46:11Et inutilement d'ailleurs,
00:46:12parce que si vous l'avez vraiment trouvé,
00:46:14dites-le-moi simplement,
00:46:15et là je sais que vous l'avez trouvé.
00:46:17Donc je pense que c'est aussi un coup de pouce à la confiance pour les gens de l'extérieur qui veulent savoir s'ils peuvent faire confiance à ce truc DynamoDB.
00:46:23Si on voit que vous avez vraiment trouvé le bug,
00:46:25j'ai un peu plus confiance en vous.
00:46:27Si on a l'impression que vous n'avez aucune idée de ce qu'était le bug,
00:46:30ou que vous ne semblez pas comprendre ce qu'était le bug,
00:46:32alors là,
00:46:32je suis plus inquiet.
00:46:33Et donc je pense que c'est aussi une autre raison de faire ça dans votre ACR..
00:46:37Ça donne confiance à vos clients.
00:46:39C'est peut-être aussi pour ça qu'ils ont viré Adam en tant qu'AWS hero..
00:46:43Peut-être que tout est lié.
00:46:44Possible.
00:46:45Ils ne voulaient pas qu'il révèle ces secrets inavouables..
00:46:48Ouais.
00:46:48Il en savait trop.
00:46:49Il en savait trop.
00:46:50Tu peux faire un résumé rapide de trois minutes du guitar shop?
00:46:54Genre ce que ça révélait?
00:46:55Parce que j'essaie de me rappeler ce que c'était,
00:46:58parce que ça impliquait un type qui était un point de défaillance unique et qui était absent pour cette panne aussi.
00:47:04Donc je ne sais pas comment concilier les deux choses.
00:47:07Et bien sûr on n'en a aucune idée.
00:47:09On n'a aucune idée si l'un ou l'autre nous dit la vérité maintenant,
00:47:13pas vrai?
00:47:13Parce que cette ACR était tellement mauvaise que je n'ai aucune idée si elle est correcte ou pas,
00:47:18mais bon,
00:47:19le mot de passe c'était wishbone 12,
00:47:21je crois..
00:47:22Voilà.
00:47:22Toujours essayer de me tuer.
00:47:24C'est ce dont je me souviens en tout cas..
00:47:26Donc ouais,
00:47:27cette histoire c'était qu'il y avait un truc conçu pour copier les configurations.
00:47:32Et ce truc était devenu incontrôlable et on ne pouvait pas l'arrêter.
00:47:36Genre il copiait juste les configurations complètement n'importe comment et il fallait le réparer ou le corriger ou quelque chose comme ça.
00:47:45Et on n'a pas plus d'informations parce que c'était une conversation surprise.
00:47:50Et donc est-ce que ça correspond à ça?
00:47:52Un peu,
00:47:53parce que ces enactors ressemblent bien au genre de chose qui exécuterait une copie de configuration,
00:47:59mais d'un autre côté,
00:48:00ce n'est pas vraiment une configuration pour les machines.
00:48:04Une entrée DNS c'est une entrée DNS.
00:48:06Ce n'est pas vraiment une configuration.
00:48:09Donc je dirais que les deux histoires ne correspondent pas très bien..
00:48:14Et donc c'est une autre raison pour laquelle j'espérais un peu que cette ACR soit un peu plus crédible parce que je voulais savoir avec certitude que l'histoire était fausse.
00:48:23Et je ne sais toujours pas vraiment vu à quel point cette ACR est mauvaise.
00:48:27Et si l'outil que le type a écrit pour copier les configs c'est juste littéralement l'enactor?
00:48:32Genre ils l'ont juste mis en production et ils n'y ont pas touché depuis sept ans.
00:48:37C'était un peu ma façon de relier les points.
00:48:39Il s'est dit : les gars,
00:48:40j'ai écrit ça comme un moyen pour moi de tester des trucs dans mon environnement local.
00:48:45Et vous avez juste décidé de faire trois enactors et de les mettre l'un à côté de l'autre en prod.
00:48:50Je ne sais pas comment c'est arrivé..
00:48:53J'ai des questions alternatives.
00:48:54Ouais.
00:48:55Alternativement, est-ce que c'est le rollback?
00:48:57Parce que c'est celui qui a fait la copie du genre,
00:48:59Hé,
00:48:59voilà le précédent.
00:49:00Exact.
00:49:01Et donc je vais copier le précédent.
00:49:02Ensuite ça devient comme ce problème de null qui se produit.
00:49:05Et puis c'est comme si le script n'avait jamais rencontré ça ou que la connaissance part en vrille et commence à écrire encore et encore et encore et encore au point où tu ne peux pas,
00:49:13tu ne peux rien faire.
00:49:14Je ne sais pas.
00:49:15Tout ce que je sais,
00:49:16c'est que d'après ce que je peux comprendre de leur explication,
00:49:19en me basant uniquement sur ce qu'ils fournissaient,
00:49:21je ne pense toujours pas que la condition de concurrence soit même pertinente parce que encore une fois,
00:49:26littéralement une mise à jour accidentelle du endpoint Route 53 aurait pu faire tomber les trois acteurs immédiatement.
00:49:31Parce que selon eux,
00:49:32tout ce qu'il faut pour les arrêter c'est que le endpoint pointe vers un nom non résolvable,
00:49:37c'est tout ce dont vous avez besoin.
00:49:38Et donc si c'est vraiment vrai,
00:49:40littéralement une faute de frappe d'un opérateur aurait pu tout faire tomber,
00:49:43aucune condition de concurrence nécessaire.
00:49:45Exact.
00:49:45Et donc encore une fois,
00:49:47le RCA ne fait tout simplement pas un bon travail pour me convaincre que vous avez parlé de ce qu'était le vrai bug,
00:49:52parce que je peux penser à tellement de façons dont vous auriez pu déclencher exactement la même chose qui n'impliquent pas cette condition de concurrence dont vous avez passé tout le RCA à me dire que c'était le bug,
00:50:02mais je ne pense pas que ce soit le cas.
00:50:03Donc merci,
00:50:04Casey,
00:50:04de nous avoir offert cette présentation extraordinaire.
00:50:07Je suis vraiment Greenwood,
00:50:08jalousie enragée pour cet instrument d'écriture quel qu'il soit.
00:50:11Je dois trouver comment configurer ce que tu as.
00:50:13Ce truc est fantastique..
00:50:15Merci à tous d'avoir regardé.
00:50:16Je,
00:50:16euh,
00:50:17pour ceux qui l'ont suivi en direct,
00:50:18j'espère que vous avez apprécié le pré-débat et probablement un peu du post-débat.
00:50:22Si vous souhaitez entendre l'étendue complète et toutes les interactions amusantes qui ne font pas partie de l'histoire principale,
00:50:28rendez-vous sur Spotify pour le podcast complet,
00:50:30qui est juste nous en train de papoter sur,
00:50:32je ne sais pas quelle poubelle mange et des snacks et tout le nom more yapping,
00:50:35more yapping again,
00:50:36et aussi Casey TJ et trash..
00:50:42Erreurs sur mon écran, café terminal et vivre le rêve.

Key Takeaway

Casey Muratori démontre que la panne d'AWS n'était pas simplement due à une condition de concurrence, mais à une faille architecturale profonde et une mauvaise gestion des erreurs qui ont neutralisé les mécanismes de redondance.

Highlights

Critique de l'analyse de cause racine (RCA) fournie par AWS pour la panne de DynamoDB, jugée trop vague par rapport à celles de Google ou CrowdStrike.

L'importance pour les développeurs, surtout les juniors, d'oser poser des questions et d'admettre qu'ils ne comprennent pas pour éviter des erreurs futures.

Explication technique du système de mise à jour DNS d'AWS impliquant un planificateur, trois exécuteurs et un mécanisme de verrouillage sérialisé.

Analyse de la condition de concurrence (race condition) qui a mené à l'utilisation d'un enregistrement DNS obsolète et supprimé.

Hypothèse selon laquelle le véritable bug réside dans la gestion des exceptions (potentiellement en Java ou Scala) plutôt que dans la condition de concurrence elle-même.

L'impact de la transparence technique sur la confiance des clients envers les services d'infrastructure cloud.

Comparaison avec les pratiques de Cloudflare qui publie des extraits de code précis lors de leurs analyses post-incident.

Timeline

L'importance de la compréhension réelle en ingénierie

Casey commence par introduire le concept de compréhension profonde par opposition à la simple apparence de savoir. Il explique que les développeurs juniors ressentent souvent une pression sociale pour faire semblant de comprendre des concepts flous afin de paraître plus compétents. Avec l'expérience, il affirme qu'il est devenu crucial de poser des questions, même si elles semblent basiques, pour éviter que des zones d'ombre ne cachent des bugs critiques. Il souligne que ne pas creuser un problème jusqu'au bout peut entraîner des conséquences graves sur les performances ou la stabilité des systèmes. Cette introduction pose le cadre éthique et professionnel de son analyse de la panne AWS.

Comparaison des rapports d'incidents : Google, CrowdStrike et AWS

L'analyste compare la qualité des analyses de cause racine (RCA) publiées récemment par les géants de la tech. Il loue la clarté de Google, qui a admis une erreur de manipulation de JSON, et de CrowdStrike, qui a détaillé un débordement de tableau dû à un trop grand nombre de règles. En revanche, il critique sévèrement AWS pour avoir fourni un résumé initial très évasif concernant la panne de DynamoDB. Même après avoir visionné une présentation complète lors de re:Invent en décembre, Casey estime que le véritable bug n'a jamais été explicitement montré. Cette section met en lumière le besoin de transparence technique pour que la communauté puisse réellement tirer des leçons des erreurs d'autrui.

Architecture du système DNS et équilibrage de charge d'AWS

Casey utilise un tableau blanc pour schématiser le fonctionnement des points de terminaison d'API DynamoDB et leur interaction avec Route 53. Il explique comment les requêtes sont dirigées vers un arbre DNS pondéré qui permet de répartir la charge entre différentes machines. Le système doit être mis à jour continuellement pour refléter l'état des serveurs, ce qui implique la création régulière de nouveaux 'plans' (par exemple, passer du plan 145 au plan 146). Il mentionne que ces noms ne sont pas lisibles par l'homme mais sont des hachages hexadécimaux complexes dans la réalité. Cette partie technique est essentielle pour comprendre comment une redirection DNS peut devenir un point de défaillance unique.

Le rôle du planificateur et des exécuteurs dans la panne

Le processus de mise à jour repose sur un unique planificateur et trois exécuteurs (enactors) destinés à assurer la tolérance aux pannes. Casey pointe une incohérence architecturale : si le planificateur tombe en panne, les trois exécuteurs n'ont plus de travail, rendant la redondance inutile à ce niveau. Pour 'faciliter le raisonnement', AWS utilise la sérialisation via un système de verrouillage (locking) basé sur des enregistrements DNS dans Route 53. Cela signifie qu'un seul exécuteur peut modifier un point de terminaison à la fois, ce qui introduit des délais si un verrou n'est pas obtenu. L'analyse suggère que cette complexité ajoutée pour la sécurité a paradoxalement créé le terrain fertile pour le bug.

Analyse de la condition de concurrence et de la suppression prématurée

Casey détaille le cas pathologique où un exécuteur est resté bloqué sur un plan obsolète (le plan 110) à cause d'échecs répétés d'obtention de verrou. Pendant ce temps, les autres exécuteurs ont progressé jusqu'au plan 145, tout en nettoyant les anciens enregistrements dans Route 53 pour éviter l'engorgement. Lorsque l'exécuteur retardataire obtient enfin le verrou, il pointe l'API vers le plan 110, qui est immédiatement supprimé par un autre processus de nettoyage car jugé trop vieux. Le résultat est un point de terminaison qui pointe vers un enregistrement inexistant, provoquant une erreur 'NXDOMAIN' ou 'aucun enregistrement trouvé'. L'analyste insiste sur le fait que la condition de concurrence n'est qu'un symptôme et non la cause profonde.

Le mécanisme de rollback et le plantage final des exécuteurs

La panne devient globale lorsque le système tente de mettre à jour l'enregistrement de 'rollback' (retour arrière). Normalement, chaque mise à jour définit un pointeur vers le plan précédent pour permettre aux opérateurs de revenir en arrière facilement en cas de problème. Cependant, lorsque le plan vers lequel on veut pointer le rollback n'existe plus, le code des exécuteurs semble planter brutalement au lieu de gérer l'absence d'enregistrement. Casey explique que les trois exécuteurs ont fini par s'arrêter définitivement les uns après les autres en rencontrant cette erreur. Ce comportement transforme une simple erreur de résolution DNS d'une minute en une panne totale nécessitant une intervention humaine manuelle.

Hypothèses sur le code et leçons pour l'architecture logicielle

Dans la conclusion, Casey spécule que le bug provient d'une mauvaise pratique de programmation, probablement liée à l'utilisation d'exceptions non gérées en Java ou Scala. Il soutient qu'un système robuste devrait simplement retourner une valeur vide au lieu de lancer une exception fatale lorsqu'un enregistrement DNS est introuvable. Il critique le fait que l'analyse d'AWS se concentre sur la 'race condition' pour détourner l'attention du fait que leur code n'était pas tolérant aux pannes logiques. Enfin, il souligne que la publication de fragments de code réels, comme le fait Cloudflare, est le seul moyen de restaurer pleinement la confiance des clients. La discussion se termine sur une note légère concernant les langages de programmation et les anecdotes de la communauté tech.

Community Posts

View all posts