J'ai parlé lors d'une conférence l'année dernière sur les sujets de DevOps, la configuration en tant que code et la livraison continue et utilisé l'histoire suivante pour démontrer l'importance de faire des déploiements entièrement automatisée et répétable dans le cadre d'une initiative de livraison DevOpsContinuous. Depuis cette conférence, plusieurs personnes m'ont demandé de partager l'histoire à travers mon blog. Cette histoire est vraie ce qui s'est vraiment passé. C'est mon récit de l'histoire basée sur ce que j'ai lu (je n'étais pas impliqué dans ce). C'est l'histoire de la faillite d'une entreprise avec près de 400 millions d'actifs en 45 minutes en raison d'un déploiement défaillant. Contexte Knight Capital Group est une société américaine de services financiers internationaux qui s'engage dans la fabrication de marchés. L'exécution électronique et les ventes et le commerce institutionnels. En 2012, Knight a été le plus gros trader dans les actions américaines avec une part de marché d'environ 17 sur le NYSE et le NASDAQ. Knights Electronic Trading Group (ETG) a géré un volume de transactions journalier moyen de plus de 3,3 milliards de transactions quotidiennes, en négociant plus de 21 milliards de dollars par jour. Ce n'est pas une blague Le 31 juillet 2012, Knight avait environ 365 millions de dollars en espèces et équivalents. Le NYSE prévoyait de lancer un nouveau programme de liquidité de détail (un programme visant à fournir des prix améliorés aux investisseurs de détail par le biais de courtiers de détail, comme Knight) le 1er août 2012. En préparation pour cet événement, Knight a mis à jour son algorithme automatisé, à haute vitesse, algorithmique Routeur qui envoie des ordres dans le marché pour l'exécution connu sous le nom SMARS. L'une des fonctions principales de SMARS est de recevoir des ordres d'autres composants de la plate-forme de négociation Knights (ordres parents) et d'envoyer ensuite une ou plusieurs ordres enfants pour exécution. En d'autres termes, SMARS recevrait de grandes commandes de la plate-forme de négociation et les diviser en plusieurs commandes plus petites afin de trouver un match acheteur pour le volume d'actions. Plus l'ordre parent est grand, plus les ordres enfants seront générés. La mise à jour de SMARS était destinée à remplacer le vieux code inutilisé appelé Power Peg fonctionnalité que Knight hadnt utilisé en 8 ans (pourquoi le code qui avait été mort pour 8 ans était encore présent dans la base de code est un mystère, mais thats Pas le point). Le code qui a été mis à jour repurposed un vieux drapeau qui a été utilisé pour activer la fonctionnalité Power Peg. Le code a été entièrement testé et prouvé pour fonctionner correctement et de manière fiable. Ce qui pourrait aller mal Ce qui pourrait éventuellement aller mal En effet Entre le 27 juillet 2012 et le 31 juillet 2012 Knight a déployé manuellement le nouveau logiciel à un nombre limité de serveurs par jour huit (8) serveurs au total. C'est ce que le dépôt SEC dit sur le processus de déploiement manuel (BTW s'il ya un dépôt SEC sur votre déploiement quelque chose peut-être terriblement mal). Pendant le déploiement du nouveau code, cependant, un des techniciens de Knights n'a pas copié le nouveau code à l'un des huit serveurs d'ordinateur de SMARS. Knight n'a pas eu un deuxième technicien examiner ce déploiement et personne à Knight a réalisé que le code Power Peg n'avait pas été retiré du huitième serveur, ni le nouveau code RLP ajouté. Knight n'avait pas de procédure écrite qui exigeait un tel examen. Numéro de dépôt SEC 70694 16 octobre 2013 À 9 h 30, heure de l'Est, le 1er août 2012, les marchés ont été ouverts et Knight a commencé à traiter les commandes des courtiers pour le compte de leurs clients pour le nouveau programme de liquidité de détail. Les sept (7) serveurs ayant le bon déploiement SMARS ont commencé à traiter correctement ces commandes. Les ordres envoyés au huitième serveur déclenché le supposable repurposed drapeau et ramené des morts l'ancien Power Peg code. Attaque des Zombies du Code des Tueurs Il est important de comprendre ce que le code Power Peg mort était censé faire. Cette fonctionnalité était censée compter les actions boughtsold contre une commande parent comme les ordres fils ont été exécutés. Power Peg ordonnerait au système d'arrêter l'acheminement des ordres enfants une fois l'ordre parent rempli. Fondamentalement, Power Peg suivrait les ordres des enfants et les arrêterait une fois que l'ordre des parents était terminé. En 2005, Knight a déplacé cette fonctionnalité de suivi cumulatif vers un stade antérieur de l'exécution du code (ce qui supprime le suivi du comptage de la fonctionnalité Power Peg). Lorsque l'indicateur Power Peg sur le huitième serveur a été activé, la fonctionnalité Power Peg a commencé à acheminer des ordres enfants pour exécution, mais n'a pas suivi la quantité d'actions par rapport à l'ordre parent, comme une boucle sans fin. 45 minutes d'enfer Imaginez ce qui se passerait si vous aviez un système capable d'envoyer des ordres automatisés à grande vitesse sur le marché sans aucun suivi pour voir si suffisamment de commandes avaient été exécutées. Oui, c'était si mal. Lorsque le marché a ouvert à 9 h 30, les gens savaient rapidement que quelque chose n'allait pas. À 9 h 31, il était évident pour beaucoup de gens à Wall Street que quelque chose de grave se produisait. Le marché a été inondé avec des ordres hors de l'ordinaire pour les volumes de négociation régulière sur certains stocks. À 9 h 32, beaucoup de gens de Wall Street se demandaient pourquoi il ne s'était pas arrêté. C'était une éternité en termes de négociation à grande vitesse. Pourquoi hadnt quelqu'un a frappé le kill-switch sur n'importe quel système faisait cela Comme il s'avère qu'il n'y avait pas de commutateur kill. Au cours des 45 premières minutes de négociation Knights exécutions constituées plus de 50 du volume de négociation, la conduite de certains stocks de plus de 10 de leur valeur. En conséquence, d'autres stocks ont diminué en valeur en réponse aux métiers erronés. Pour aggraver les choses, le système Knights a commencé à envoyer des messages électroniques automatisés plus tôt dans la journée dès 8h01 (lorsque SMARS avait traité des commandes admissibles à la négociation avant la mise en marché). Les messages de courrier électronique font référence à SMARS et identifient une erreur en tant que Power Peg désactivée. Entre 8 h 01 et 9 h 30, 97 de ces courriels ont été envoyés au personnel de Knight. Bien sûr, ces courriels n'étaient pas conçus comme des alertes système et donc personne ne les regardait tout de suite. Oops. Pendant les 45 minutes de Hell que Knight a expérimenté, ils ont essayé plusieurs contre-mesures pour essayer d'arrêter les métiers erronés. Il n'y avait pas d'interrupteur de mort (et pas de procédures documentées pour savoir comment réagir), ils ont donc été laissés à essayer de diagnostiquer le problème dans un environnement commercial en direct où 8 millions d'actions étaient échangées à chaque minute. Comme ils n'étaient pas en mesure de déterminer ce qui causait les commandes erronées, ils ont réagi en désinstallant le nouveau code des serveurs sur lesquels il a été déployé correctement. En d'autres termes, ils ont supprimé le code de travail et laissé le code brisé. Cela n'a fait qu'amplifier les problèmes entraînant l'activation de la commande Power Peg par tous les serveurs, et pas seulement celle qui n'a pas été déployée correctement. Finalement, ils ont été en mesure d'arrêter le système après 45 minutes de négociation. Dans les 45 premières minutes, le marché a été ouvert le code Power Peg reçu et traité 212 commandes parent. En conséquence SMARS a envoyé des millions d'ordres d'enfant dans le marché résultant dans 4 millions de transactions contre 154 stocks pour plus de 397 millions d'actions. Pour vous, drogués du marché boursier, cela signifiait que le chevalier supposait environ 3,5 milliards de positions longues nettes sur 80 actions et 3,15 milliards de positions courtes nettes sur 74 actions. En termes laymen8217s, Knight Capital Group a réalisé une perte de 460 millions en 45 minutes. Rappelez-vous, Knight n'a que 365 millions de dollars en espèces et équivalents. En 45 minutes, Knight est passé d'être le plus gros trader des actions américaines et un important market maker au NYSE et NASDAQ à la faillite. Ils avaient 48 heures pour réunir le capital nécessaire pour couvrir leurs pertes (ce qu'ils ont réussi à faire avec un investissement de 400 millions d'environ une demi-douzaine d'investisseurs). Knight Capital Group a finalement été acquis par Getco LLC (décembre 2012) et la société fusionnée s'appelle maintenant KCG Holdings. Une leçon à apprendre Les événements du 1er août 2012 devraient être une leçon pour toutes les équipes de développement et d'exploitation. Il ne suffit pas de construire de grands logiciels et de tester, vous devez également vous assurer qu'il est livré sur le marché correctement afin que vos clients obtiennent la valeur que vous fournissez (et donc vous ne faillir votre entreprise). Les ingénieurs qui ont déployé SMARS ne sont pas seuls à blâmer ici le processus que Knight avait mis en place n'était pas approprié pour le risque qu'ils ont été exposés. En outre, leur processus (ou leur absence) était intrinsèquement enclin à l'erreur. Chaque fois que votre processus de déploiement repose sur la lecture des humains et les instructions suivantes, vous vous exposez à des risques. Les humains font des erreurs. Les erreurs pourraient être dans les instructions, dans l'interprétation des instructions, ou dans l'exécution des instructions. Les déploiements doivent être automatisés et répétables et exempts d'erreurs humaines possibles. Si Knight avait mis en place un système de déploiement automatisé complet avec configuration, déploiement et automatisation de test, l'erreur qui cause le Knightmare aurait été évitée. Un couple des principes pour la livraison continue s'appliquent ici (même si vous ne mettez pas en œuvre un processus complet de livraison continue): Libérer le logiciel devrait être un processus répétable et fiable. Automatiser autant que cela est raisonnable. Un scénario: supposons qu'ils avaient de très bons DevOps. Donc, tous les serveurs seraient synchronisés. Mais 8211 supposent que le nouveau code avait un bug. Donc, tous les serveurs sont en synchronisation, mais ont le même code buggy. Que faire si deux versions du code, c'est-à-dire les 2 derniers déploiements avaient ce bogue. Donc, une fois qu'ils se rendent compte que quelque chose ne va pas, they8217d roll back le code, le bug reste encore 8230 Minutes précieuses ont disparu. Peut-être 20 minutes au lieu de 45 minutes dans votre article. Donc, en bref 8211 leur catastrophe kill-switch est un déploiement de rétablissement de code dans un environnement en direct. Ce serait toujours une conception défectueuse. Ce qu'ils auraient besoin serait un grand commutateur rouge (presque littéralement, quelque part dans leur tableau de bord) pour s'arrêter immédiatement. Où est la règle d'entreprise qui dit 8220first ne pas nuire8221. VJ si le déploiement sur tous les serveurs avait fonctionné, ils auraient été ok. Mais dans ce cas, 7 sur 8 pour un sous-système ont été déployés correctement. Parce que le mauvais comportement, ils ont roulé les 7 autres pensant que le nouveau code dans ce sous-système était le problème. Cela a multiplié le problème jusqu'à ce que le commutateur tuer. Les catastrophes sont presque toujours complexes. Dans ce cas, il s'agissait de mauvaises pratiques de codage, plus pratiques d'inspection de code de test douteuses, plus une erreur dans le déploiement, plus un retour à la granularité du sous-système plutôt que le système entier. Si vous résolvez l'un de ces problèmes, vous n'obtiendrez pas un désastre. L'une des choses que j'ai vu dans les entreprises qui ne reconnaissent pas la véritable importance et l'impact de leurs systèmes informatiques est qu'elles ne fournissent pas de budget pour les mises à jour de code héritées. Par exemple: J'ai vu des situations où les TI n'ont pas de budget. Il doit justifier tout ce qu'il fait contre une dépense d'entreprise. Ce qui signifie constamment brouiller pour aligner de nouveaux projets. Les entreprises voient rarement la nécessité de mettre à jour les anciens logiciels qui fonctionnent actuellement, de sorte qu'ils refusent de payer pour cela. Le résultat est un nouveau code constant, réalisé par les codeurs les moins chers possibles, sans pour autant investir dans les technologies qui amélioreraient les performances et réduiraient les risques. Pourquoi Parce que ceux-ci sont considérés comme 8220IT problèmes8221 et non la portée de tout projet sur les gens de TI travaillent, de sorte que personne ne paiera pour cela. Une grande lecture au sujet de cette pratique est le projet Phoenix par Gene Kim, Kevin Behr et George Spafford. Merci d'avoir appliqué le cerveau à la hype. Probablement on devrait demander pourquoi les techniciens impliqués ont réussi à prendre le blâme, mais n'a pas obtenu l'autorité de tuer le commutateur sur leurs propres. Oh bien, c'est pourquoi vous avez mis OpsSRE en place de toute façon. 8220R8221 est pour responsable, appât de flamme d'aka. J'ai écrit un peu sur cet événement, et je voudrais avertir quiconque d'utiliser le rapport de la SEC comme quoi que ce soit autrement que pour ce que la SEC avait besoin de lui. Kitchensoap20131029counterfactuals-knight-capital Fascinant lire. J'ai travaillé dans une grande maison de vente de fruits et légumes une fois où une nouvelle version de logiciel a été installée et a échoué, menant aux pertes importantes aux commerçants (mais pas aussi massif que ceux-ci). Il s'agissait également d'un déploiement inapproprié et d'un repli. La leçon à apprendre est qu'il ya des domaines où l'ordinateur ne devrait pas prendre de décision sans validation humaine. Qu'en est-il des personnes qui ont perdu leur emploi parce que, oops, il y avait un bogue Qu'en est-il les autres entreprises qui peut-être entré en trubble en raison de changement soudain de la valeur de stock Automation de 8220high niveau decisions8221 doit être manipulé avec soin8230 Nice and educational post Btw. L'utilisation du cadre Cynefin fournit une meilleure caractérisation de cette 8216DevOps8217 échec Ce poste semble avoir été écrit à partir d'une perspective DevOps. Les solutions suggérées sont compatibles avec une perspective de DevOps 8211 examiner le processus de libération, d'automatiser davantage et de concevoir un commutateur de kill avec des capacités de restauration. Quelqu'un peut lire le message et mettre trop d'emphase sur le technicien Knight qui n'a pas copié l'ancien code à l'un des huit serveurs. Quelqu'un peut trop simplifier une relation de cause à effet. 8211 Augmenter la diversité pour analyser la situation et synthétiser de meilleures options 8211 Améliorer la communication entre les spécialités 8211 Améliorer la coordination implicite entre les spécialités 8211 Recruter des individus avec plus Expertise pour écrire et réviser le code Un facteur majeur qui a limité l'amélioration de la capacité de l'équipe de neuf ans avant l'événement de défaillance significatif a été mal caractériser le système. Dans un cadre Cynefin, confiner cette défaillance à un problème DevOps est d'associer le système avec le domaine 8220Obvious8221 où il ya des relations de cause à effet simples qui sont reconnaissables par 8216professionals.8217 L'échec ne doit pas être associée au domaine Cynefin 8220Complicated8221 où une analyse significative Par 8216specialists8217 aurait empêché l'échec. Le système doit être associé au domaine 8257Complex8221 de Cynefin 8211, un système adaptatif complexe. Le système est dispositionnel. Les mêmes conditions initiales ne produiront pas la même défaillance (sauf par accident). Pour plus d'informations sur Cynefin, visitez en. wikipedia. orgwikiCynefin et CognitiveEdge. J'apprécie que vous souligniez les facteurs tacites dans une telle catastrophe. Comme l'auteur, je travaille aussi dans les opérations, et il est facile de tomber dans les mêmes vieux modèles de pensée sur les causes et les solutions. J'apprécie particulièrement votre point de vue sur la diversité (qui se présente sous toutes les formes: niveau d'expérience, niveau culturel et pédagogique, compétences, âge, etc.), car je pense que c'est le moteur du succès de DevOps lui-même. Ayant une variété de perspectives, à la fois dans et sans votre équipe, en regardant votre projet a forte, le potentiel démontrable et peut aider à freiner les oublis tels que celui soulevé dans cet article. Gt pourquoi le code qui avait été mort pour 8 ans était encore présent dans la base de code est un mystère, mais thats pas le point Au contraire, that8217s exactement le point. Code avec des possibilités de configuration non utilisées et donc non testées est un désastre qui attend. C'est pourquoi I8217m est très sceptique quant aux approches basées sur le drapeau caractéristique. La configuration fait partie de votre programme comme le code est, et les changements de configuration devraient passer par le même cycle de vie 8211 demande de traction, examen de code, la libération, déployer à l'étagement 8211 comme toute autre modification. Si votre processus de libération est trop lourd et que vous devez apporter des modifications rapides à la production, corrigez votre processus de validation. Il y avait trop d'erreurs pour attribuer l'échec épique à Just DevOps (bien que je suis entièrement d'accord que l'automatisation et les tests est le seul moyen): 8211 Pas de travail d'équipe et des listes de contrôle tout en faisant une mise à jour sur les serveurs de production. Toute mise à jour sur la production doit exiger une équipe de surveiller les uns les autres, et en passant par une liste de contrôle. 8211 8 ans d'ancien code inutilisé en production. Cela vous dit beaucoup sur le manque de compréhension des risques de dangling 8220unused8221 code. 8211 Journalisation insuffisante du code et surveillance insuffisante du journal en temps réel, corrélation et analyse. Cela aurait déclenché assez d'indices tôt un aux ingénieurs et aux gens d'ops. 8211 Pas de basculement hot-hot vers un cluster avec la version précédente. Cela aurait arrêté toutes les questions après 1 ou 2 minutes. Si vous avez également été l'architecture des logiciels, des systèmes et des entreprises pendant une longue période, vous savez catastrophe se produit, vous savez que certains bugs ne sont capturés dans la nature et pas pendant les simulations, tout comme vous Savoir machines vont descendre. Vous devez vous préparer au pire des cas dans les deux scénarios. Murphy8217s La loi est si vrai dans notre monde I8217ve été dans ce qui est maintenant appelé l'espace 8220DevOps8221 pendant près de 20 ans, plus de la moitié de celui dans le monde financier. Knight était à la fois vendeur et concurrent de la société pour laquelle je travaille actuellement. L'automatisation du déploiement aurait pu vous aider. Peut être. Mais peu d'entreprises peuvent se permettre des environnements exactement dupliqués, et cela est essentiellement dû à des différences environnementales. Même la validation automatisée du déploiement n'aurait peut-être pas aidé dans ce cas si l'automation ne connaissait pas la différence environnementale. L'automatisation est seulement aussi bonne que la connaissance des gens qui la mettent en place. Si une installation manuelle n'était pas au courant de l'ancien système, alors il ya une bonne chance que le système automatisé n'aurait pas su vérifier non plus. L'automatisation d'un rollback n'est pas aussi bonne que la prise de décision quant à savoir si le roll back doit être effectué. Et si l'automatisation a par inadvertance démarré l'ancien système, il n'y a pas non plus de garantie que la commutation du système contemporain aurait arrêté l'ancien système 8211, vous pourriez avoir fini avec le même problème, même après un recul automatisé du système contemporain. Ce qui m'amène à un point final: L'automatisation est une exigence dans les grands, les environnements modernes. Mais une trop grande dépendance à cet égard peut conduire à ce que les personnes qui exploitent le système ignorent ce qu'elles font. L'automatisation est la plus utile pour les validations, car la validation des choses est effectuée correctement est fastidieuse et facile à minimiser lorsqu'elle est effectuée manuellement. Même lorsque l'automatisation, la mise en place de points d'arrêt impliquant des personnes ou des étapes guidées par l'homme, aident les opérateurs à connaître le système et son fonctionnement, améliorant considérablement leur capacité à résoudre les problèmes, à diagnostiquer les problèmes et à faire des suggestions appropriées sur les étapes à suivre. Arrêter ou atténuer un problème. L'automatisation est un outil, mais il ne s'agit que d'un seul outil et il lui faut encore un artisan pour le manipuler de façon appropriée. L'expertise est ce qui fait et maintient grands systèmes grands. Reblogué ceci sur Garrett S. Y. Hampton et commenté: Incroyable. Il a commencé dans un magasin d'un armurier connu pour des milles autour comme un maître artisan, un inventeur, et un huntsman qui a eu le temps de voir, documenter et examiner vos déploiements. Traînaient les champs pendant des décennies. Il s'appelait Tony Knight et, dans son atelier du comté de Putnam, dans le Missouri, il écoutait les histoires de chasseurs qui utilisaient leurs fusils à ballots. Il a étudié l'histoire, les forces et les problèmes de la chargeuse frontale, depuis les fermoirs les plus primitifs jusqu'aux chargeurs de bouche d'aujourd'hui. Ces fusils avaient changé peu dans plus d'un siècle, l'incitant à aller travailler créant un chargeur muzzle vraiment moderne. En conséquence, Knight Rifles est né. En quelques années, ce qui a commencé comme une vision a conduit à la plus fine, plus sûre et plus polyvalente fusil en poudre noire jamais forgée. Un chargeur de bouche manuel léger et léger qui surpasse tous les autres en termes de précision, de fonctionnement en douceur et d'une puissance d'arrêt mortelle en aval. Un baril et un système de tir capable de livrer toute forme de munitions à sa cible avec une fiabilité impressionnante et une précision mortelle. Cela reste vrai aujourd'hui comme chevalier rifles continuer à être le meilleur dans tous les aspects, à tous les niveaux. Riche d'histoire et de performance, nous créons l'avenir de muzzleloading basé sur la base solide posée par ceux qui sont venus avant nous. Dans les années à venir, vous pouvez vous attendre à ce que le meilleur de Knight Muzzleloaders. Field Stream Ampère ajoute le chevalier MK-85 aux 50 meilleurs pistolets jamais fait liste Tony Knight est un autre armurier du pays qui a changé la façon dont les choses sont faites. En 1985, il a construit un chargeur avec le mamelon à l'arrière du canon, directement derrière la charge de poudre au lieu de côté. Cela a rendu l'allumage beaucoup plus fiable et a commencé la Grande Révolution de Poudre Noire, ce qui a abouti à des chargeurs de bouche qui sont pratiquement aussi précis, fiable et rapide à charger que les bras de tir de cartouches. Tout cela conduit les traditionalistes fous. Mais les chasseurs ordinaires l'adorent. 8211 Field amp Stream En vedette Muzzleloaders Chevalier Rifles sur le webCeci est probablement le rapport le plus douloureux rapport Irsquove jamais lu. Décrivant en technicolor glorieuse les étapes menant à Knight Capitalrsquos 465m perte de négociation en raison d'un bug logiciel qui a frappé la fin de l'année dernière, effectivement la banqueroute de la société. Le conte a toutes les caractéristiques de la dette technique dans un énorme, unmaintained, bitrotten codebase (le bug lui-même en raison de code qui hadnrsquot été utilisé pendant 8 ans), et un très pauvre, indiscipliné devops histoire. Afin de permettre à ses clients de participer au Retail Liquidity Program (ldquoRLPrdquo) à la Bourse de New York5, qui devait commencer le 1er août 2012, Knight a apporté un certain nombre de modifications à ses systèmes et à son code logiciel lié à ses processus de traitement des commandes . Ces changements comprenaient le développement et le déploiement de nouveaux codes logiciels dans SMARS. SMARS est un routeur algorithmique automatisé, à grande vitesse qui envoie des ordres sur le marché pour l'exécution. Une fonction principale de SMARS est de recevoir des ordres passés d'autres composants de la plate-forme de négoce de Knightrsquos (ordres ldquoparentrdquo) et ensuite, selon les besoins en fonction de la liquidité disponible, envoyer un ou plusieurs ordres représentatifs (ou ldquochildrdquo) à des sites externes pour exécution. 13. Lors du déploiement, le nouveau code RLP dans SMARS était destiné à remplacer le code inutilisé dans la partie pertinente du routeur de commande. Ce code non utilisé auparavant avait été utilisé pour la fonctionnalité appelée ldquoPower Peg, rdquo que Knight avait cessé d'utiliser plusieurs années plus tôt. Malgré le manque d'utilisation, la fonctionnalité Power Peg est restée présente et appelable au moment du déploiement du RLP. Le nouveau code RLP a également réutilisé un drapeau qui était autrefois utilisé pour activer le code Power Peg. Knight avait l'intention de supprimer le code Power Peg de sorte que lorsque ce drapeau était réglé sur ldquoyes, rdquo le nouveau RLP fonctionnalitémdashrather que Power Pegmdashwould être engagé. 14. Lorsque Knight a utilisé le code Power Peg précédemment, à mesure que les ordres enfants étaient exécutés, une fonction de quantité cumulée comptait le nombre d'actions de l'ordre parent qui avait été exécuté. Cette fonction a demandé au code d'arrêter l'acheminement des ordres fils après que l'ordre parent ait été complètement rempli. En 2003, Knight a cessé d'utiliser la fonctionnalité Power Peg. En 2005, Knight a déplacé la fonction de suivi des actions cumulées dans le code Power Peg vers un point antérieur de la séquence de code SMARS. Knight n'a pas retest le code Power Peg après avoir déplacé la fonction de quantité cumulée pour déterminer si Power Peg fonctionnerait toujours correctement si appelé. 15. À partir du 27 juillet 2012, Knight a déployé le nouveau code RLP dans les SMARS par étapes en le plaçant sur un nombre limité de serveurs dans SMARS sur des jours successifs. Pendant le déploiement du nouveau code, cependant, un des techniciens de Knightrsquos n'a pas copié le nouveau code à l'un des huit serveurs d'ordinateur de SMARS. Knight n'a pas eu un deuxième technicien examiner ce déploiement et personne à Knight a réalisé que le code Power Peg n'avait pas été retiré du huitième serveur, ni le nouveau code RLP ajouté. Knight n'avait pas de procédure écrite qui exigeait un tel examen. 16. Le 1er août, Knight a reçu des ordres de courtiers dont les clients étaient admissibles à participer au RLP. Les sept serveurs qui ont reçu le nouveau code ont correctement traité ces commandes. Cependant, les commandes envoyées avec l'indicateur repurposed au huitième serveur déclenché le défaut Power Peg code encore présent sur ce serveur. En conséquence, ce serveur a commencé à envoyer des ordres enfants à certains centres de négociation pour exécution. 19. Le 1er août, Knight a également reçu des commandes admissibles au RLP, mais celles-ci étaient désignées pour les opérations avant la mise en marché6. SMARS a traité ces commandes et, à compter d'environ 8 h 01 HE, un système interne de Knight a généré un courriel automatisé (Appelé ldquoBNET rejectsrdquo) qui a référencé SMARS et a identifié une erreur décrite comme ldquoPower Peg disabled. rdquo Le système de Knightrsquos a envoyé 97 de ces messages à un groupe de personnel de Knight avant le marché de 9:30 am ouvert. Knight n'a pas conçu ces types de messages comme étant des alertes de système, et le personnel de Knight ne les a généralement pas revus lorsqu'ils ont été reçus. 27. Le 1er août, Knight n'avait pas de procédures de supervision concernant la réponse aux incidents. Plus précisément, Knight n'avait pas de procédures de supervision pour guider son personnel pertinent lorsque des problèmes importants se développaient. Le 1er août, Knight s'est appuyé principalement sur son équipe de technologie pour tenter d'identifier et d'aborder le problème SMARS dans un environnement commercial en direct. Le système de Knightrsquos a continué à envoyer des millions d'ordres d'enfant tandis que son personnel essayait d'identifier la source du problème. Dans une de ses tentatives pour résoudre le problème, Knight a désinstallé le nouveau code RLP des sept serveurs où il avait été déployé correctement. Cette action a aggravé le problème, provoquant l'arrivée de commandes parentales supplémentaires pour activer le code Power Peg qui était présent sur ces serveurs, semblable à ce qui s'était déjà produit sur le huitième serveur. Le reste du document vaut vraiment la peine d'être lu, mais il est important de recommander de nouveaux procédés humains pour éviter une tragédie semblable. Aucun des échecs ops conduisant à la bogue étaient liés aux humains, mais plutôt, en raison de la plus probable horrible scripts de déploiement et la surveillance de la production lamentable. Quel genre de magasin de cow-boys n'a même pas de surveillance pour s'assurer qu'un cluster exécute une version logicielle cohérente. Sans oublier les scripts de déploiement qui vérifient les codes de retour. Nous pouvons aussi seulement espérer que les références à des procédures d'essai ldquowritten pour le code inutilisé se réfèrent à des tests systématiques, par opposition à une page wiki de 10 ans. La meilleure partie est l'amende: 12m, malgré l'audit résultant également révélant que le système était systématiquement envoyer shorts nue. Edit: semble que cela a été affiché un peu trop vite: la perte finale était de 460m et le code était mort pour près de 9 ans, pas 8
No comments:
Post a Comment