Casey Analisa a Queda da AWS | The Standup

TThe PrimeTime
Computing/SoftwareManagementInternet Technology

Transcript

00:00:00Este episódio do stand up vai ser extra especial porque o Casey vai fazer a intro.
00:00:05Casey, sobre o que vamos falar hoje?
00:00:09Olá a todos e bem-vindos ao stand up.
00:00:13O 45º,
00:00:146º melhor podcast de tecnologia no Spotify de acordo com o mais recente algo.
00:00:23Verdade..
00:00:29Enfim, desculpa.
00:00:30Hoje no stand up, eu queria abordar algo.
00:00:33Vou falar sobre a interrupção da AWS que aconteceu em outubro,
00:00:38mas estou fazendo isso porque queria falar sobre uma coisa maior,
00:00:43que é a ideia de realmente entender algo versus dizer que você entende algo..
00:00:49Então,
00:00:49tipo,
00:00:50uma das coisas que acontece muito,
00:00:52especialmente acho que com pessoas que estão no início da carreira de programação,
00:00:57tipo se você é um programador júnior ou algo assim,
00:01:00você está chegando.
00:01:02E eu sei que certamente foi verdade para mim,
00:01:04é que você quer parecer que sabe das coisas,
00:01:07certo?
00:01:08Tipo,
00:01:08você não quer parecer que não entende o que está acontecendo.
00:01:12Então há muita pressão externa,
00:01:14esteja ela realmente lá ou não,
00:01:16você sente que deveria meio que dizer que entendeu algo ou fingir que entende algo,
00:01:21mesmo que seja tipo meio confuso ou você não tenha captado direito..
00:01:26E mesmo que não seja sua culpa,
00:01:28tipo mesmo que a coisa não tenha sido explicada direito ou não tenha incluído tipo informações importantes,
00:01:34você ainda é incentivado a basicamente agir como se soubesse o que era,
00:01:39certo?
00:01:39Porque isso simplesmente faz você parecer mais inteligente ou algo assim,
00:01:43ou pelo menos não faz você parecer júnior,
00:01:46certo?
00:01:46E então uma das coisas que pelo menos eu descobri à medida que fui ficando mais velho e programando,
00:01:52tive mais experiência em programação e coisas assim,
00:01:55é que hoje em dia eu tipo pergunto demais para as coisas serem explicadas.
00:01:59Tipo eu vou tipo, não me importo nada em parecer burro..
00:02:03Eu fico tipo, espera aí, volta.
00:02:04Tipo eu não entendi aquela parte.
00:02:06Tipo, o que você quer dizer com isso?
00:02:07Ou tipo, o que esse termo significa ou seja lá o que for?
00:02:10Porque agora eu simplesmente não me importo mais com isso..
00:02:12Tipo não estou tão preocupado.
00:02:14E eu quero realmente saber porque tive tanta experiência programando onde eu achava que sabia algo ou fingi que sabia algo e isso voltou para me morder..
00:02:22Eu fico tipo, eu quero realmente saber.
00:02:24Tipo eu quero ter certeza de que quando tenho uma explicação de um bug ou acho que sei o motivo de uma lentidão de performance,
00:02:31eu sempre no fundo da minha cabeça,
00:02:33fico tipo,
00:02:33se eu não cheguei realmente ao fundo disso,
00:02:35pode ser outra coisa.
00:02:37Pode ser,
00:02:37pode ser que a coisa real ainda esteja escondida lá.
00:02:40E eu simplesmente não sei porque não olhei direito até o fim.
00:02:43Estou apenas,
00:02:44estou seguindo em frente porque é conveniente ou seja lá o que for..
00:02:48E então,
00:02:49a razão pela qual eu queria falar sobre a interrupção do DynamoDB é porque recentemente tem havido uma série de interrupções de alto perfil.
00:02:57Então houve uma grande que derrubou o Google e descobriu-se que era uma situação em que eles não tratavam um campo vazio,
00:03:04certo?
00:03:05Então a programação deles,
00:03:06a forma como estavam programando,
00:03:08era tipo,
00:03:09ok,
00:03:09temos essa coisa.
00:03:10Carregamos um JSON e se não há nada no JSON,
00:03:13a gente tipo,
00:03:14desreferencia um ponteiro nulo ou algo assim,
00:03:16certo?
00:03:17Foi literalmente isso, certo?
00:03:18E depois teve uma com a CrowdStrike onde eles derrubaram o mundo inteiro com telas azuis.
00:03:24E nessa,
00:03:24eles deram uma explicação muito boa,
00:03:26foi tipo uma explicação realmente boa.
00:03:29Eles disseram,
00:03:29fazemos esse determinado dimensionamento de array e tínhamos regras demais.
00:03:34Então isso estourou o array, certo?
00:03:36E essas foram bem boas quando deram o que chamam de RCAs ou análise de causa raiz,
00:03:41certo?
00:03:41Quando disseram tipo, aqui está o motivo de termos caído.
00:03:45Quando eu li,
00:03:45não senti que havia muitas perguntas sem resposta na minha cabeça.
00:03:49Tipo,
00:03:50talvez eu não soubesse literalmente a linha de código,
00:03:53porque talvez não publicaram literalmente o trecho de código,
00:03:57mas me deram informação suficiente para eu ficar tipo,
00:04:00ok,
00:04:00entendo como alguém escreveu esse código e entendo a coisa estúpida que fizeram,
00:04:05certo?
00:04:05Tipo, ok, não faça isso.
00:04:07Entendo.
00:04:07E estou totalmente de acordo..
00:04:10Com o do DynamoDB, porque surgiu neste podcast, certo?
00:04:15Falamos sobre isso quando aquele cara no Guitar Center,
00:04:20certo?
00:04:20Foi tipo, ouvi alguém falando no bar, certo??
00:04:24Sim.
00:04:25Incrível.
00:04:25Aqui vemos o esquivo programador,
00:04:27uma criatura simples que passa a maior parte do tempo trabalhando sozinha,
00:04:31frequentemente na escuridão,
00:04:33mas o que é isso?
00:04:33Alguém está errado na internet.
00:04:35Nosso programador entra em ação,
00:04:37atingindo velocidades máximas de 120 palavras por minuto antes de piscar um site em modo claro..
00:04:42O inimigo natural desses amantes de código atordoa nosso amigo.
00:04:45A perseguição foi cancelada.
00:04:46Teremos que pegá-los da próxima vez.
00:04:48Quando não estão em seus computadores,
00:04:50podem passar horas desenhando símbolos grosseiros,
00:04:52algo que chamam de quadros brancos.
00:04:54Pesquisadores descobriram milhares de dialetos,
00:04:56frequentemente com mais de uma dúzia usados em um único escritório.
00:04:59No entanto,
00:05:00nenhum linguista decifrou ainda qual é o propósito deles..
00:05:03Criaturas vaidosas,
00:05:04seus corpos evoluíram ao longo de milênios para serem capazes de sentar em posturas incomuns enquanto se olham online.
00:05:11Isso frequentemente dura muitas horas usando a desculpa de que estão esperando por revisão de código,
00:05:17mas pressionados sobre por que estão tão inativos.
00:05:20E finalmente,
00:05:20após um longo dia de realizar muito pouco,
00:05:23nossos guerreiros de teclado se preparam para dormir.
00:05:26Leitura rápida e é hora de apagar as luzes..
00:05:29Boa noite, pequeno programador.
00:05:30Então, como durmo tão bem à noite?
00:05:32Bem, tenho o Sentry para me ajudar a esmagar esses bugs.
00:05:36E não estou,
00:05:36não estou falando sobre pequenos bugs minúsculos de Dakota do Sul que morrem no inverno.
00:05:42Estou falando sobre bugs grandes e malvados da selva.
00:05:46E não tenho medo de nenhum deles,
00:05:48a propósito,
00:05:49mas posso esmagar esses bugs com Seer by Sentry.
00:05:52Então fiquei um pouco mais motivado sobre aquele para ir tipo,
00:05:56ok,
00:05:56deixa eu ver quanto de informação eles postaram.
00:05:59E eu tinha lido,
00:06:00já tinha meio que lido depois,
00:06:02eles tinham um resumo onde postaram uma RCA e era muito vago.
00:06:06Tipo, a RCA realmente não explicava muita coisa.
00:06:10Então percebi que postaram uma apresentação completa tipo no re:Invent em dezembro,
00:06:15eles,
00:06:15ou acho que não sei se o re:Invent foi em dezembro,
00:06:19mas o vídeo foi publicado em dezembro da apresentação do re:Invent onde cobriram essa interrupção..
00:06:26Então fui e assisti tudo aquilo.
00:06:28E depois de ter lido toda a RCA e assistido toda a apresentação,
00:06:34ainda fiquei tipo.
00:06:35Não vejo uma explicação real do bug aqui, certo?
00:06:39Tipo,
00:06:39estou tentando descobrir qual era o bug real e nunca foi explicado..
00:06:45E então o que eu meio que queria fazer era simplesmente falar sobre isso,
00:06:48explicar por que acho que eles não explicaram qual foi o bug e usar isso como exemplo de tipo,
00:06:53não acho que as pessoas devam simplesmente ir,
00:06:55Ah,
00:06:55tá.
00:06:56Entendi qual foi o bug.
00:06:57Porque as pessoas tipo responderam para mim e falaram,
00:06:59Ah,
00:07:00deixa eu te explicar qual foi o bug.
00:07:02E aí elas simplesmente explicaram as mesmas coisas.
00:07:04Eu fico tipo, isso não é o bug.
00:07:05Certo.
00:07:06Então todo mundo tipo é incentivado a ir tipo, eu entendo.
00:07:08Porque eu li é tipo,
00:07:09não,
00:07:10se você não consegue me dizer qual foi o bug de verdade,
00:07:12então a gente não terminou aqui.
00:07:14Certo..
00:07:14Tipo, deveríamos ter essa explicação mais completa.
00:07:16Então, tudo isso faz sentido razoável?
00:07:18Tipo, o que estou dizendo?
00:07:19Sim.
00:07:20Primeiro,
00:07:20eu só quero dizer,
00:07:21eu sabia exatamente o que você estava dizendo,
00:07:23Casey..
00:07:23Tipo desde o início, certo.
00:07:25É tipo na hora.
00:07:27Você,
00:07:27você tipo,
00:07:28ok,
00:07:28eu sei,
00:07:29eu sei exatamente o que você está dizendo.
00:07:32Sem perguntas da minha parte.
00:07:35Sem impedimentos.
00:07:36Obrigado a todos.
00:07:38Estou ótimo..
00:07:39Te vejo amanhã, pessoal.
00:07:40Sabe, sem problema.
00:07:41Eu só quero dizer,
00:07:42eu realmente gosto de ouvir o Casey falar no podcast quando escuto no Spotify,
00:07:47mas também agora mesmo,
00:07:48tipo eu poderia te ouvir falar por uma hora.
00:07:51Ótima divulgação também, para o Spotify.
00:07:53Eu ia justamente dizer,
00:07:55eu ia dizer tipo,
00:07:56especialmente quando você escuta no Spotify,
00:07:58a qualidade é incrível.
00:08:00Você também ganha os extras bônus, certo?
00:08:02Você ganha toda a conversa antes e depois do extra propriamente dito.
00:08:06Começamos a postar versões mais longas,
00:08:09mais longas no Spotify que são tipo mais do extra.
00:08:12Sim.
00:08:12Menos coisas fora do tópico,
00:08:14mas um pouco mais de papo no Spotify porque a audiência ao vivo recebe o papo..
00:08:19Eles conseguem vir aqui.
00:08:21Eles conseguem ouvir sobre o Trash e seu vício em Pokémon,
00:08:23que você provavelmente nem sabe porque você não estava,
00:08:25você estava ouvindo isso no YouTube,
00:08:27certo?
00:08:28Você não,
00:08:28você não vai conseguir ouvir todas as coisas divertidas.
00:08:30Isso é meio difícil de vender nos primeiros 10 minutos de um vídeo do YouTube.
00:08:34É muito difícil de vender para um vídeo do YouTube.
00:08:36Tipo,
00:08:37vou assistir quatro caras falando sobre algo que eu nem entendo.
00:08:39E é chamado dynamo DB.
00:08:40Sim..
00:08:41Já que estamos começando o podcast,
00:08:42talvez devêssemos apresentar o Adam.
00:08:44Ah é.
00:08:44Isso é um ótimo ponto..
00:08:45Não fizemos nada disso.
00:08:46Olá.
00:08:47Nos conte um pouco sobre por que você está no podcast hoje..
00:08:50Porque estou na casa do TJ número um,
00:08:53motivo número um por que o TJ exige que todas as pessoas que visitam sua casa estejam no podcast.
00:09:01Foi meio estranho algumas vezes.
00:09:04Sim.
00:09:04Sim.
00:09:05Quem é você de verdade??
00:09:07Além de um herói da AWS.
00:09:09Eu nem sou isso.
00:09:10Eu não era herói da AWS.
00:09:12Tá bom..
00:09:13Expulso do grupo de super-heróis.
00:09:14Tipo como isso funciona?
00:09:16Você simplesmente não, você não é renovado..
00:09:18Eu fui um herói de um mandato só e eles decidiram,
00:09:21Ah,
00:09:21você,
00:09:22é tipo uma coisa paga?
00:09:23Você paga para ser um herói??
00:09:24Não,
00:09:24não,
00:09:25eu só,
00:09:25eu realmente não me importava mais com isso.
00:09:28Falar sobre isso sempre.
00:09:29Então eles ficaram tipo, talvez ele não seja mais um herói.
00:09:32Agora ele é um vilão.
00:09:33O Casey parece que faz parte de tipo algum mistério de assassinato.
00:09:36Ele está parado ali.
00:09:37Ah cara.
00:09:38Nós estamos,
00:09:38estamos prestes a receber,
00:09:39uh,
00:09:40tipo o,
00:09:40uh,
00:09:41qual é?
00:09:41Nick Hill.
00:09:42Qual é a pessoa que faz todos aqueles desenhos no quadro.
00:09:45E aí aparece.
00:09:45Casey Muratori.
00:09:46Esse é o que você está pensando.
00:09:48Muratori.
00:09:48É Muratori ou é Muratori?
00:09:50Meu Deus.
00:09:50Você está prestes a fazer visuais.
00:09:52Não é?
00:09:52Então eu sei que este é o melhor podcast..
00:09:54É literalmente, este é o melhor para fazer parte.
00:09:57Uh, é pronunciado Muratori pela minha família.
00:10:01Tipo quase como se tivesse um Y ali tipo Muratori,
00:10:04mas isso está correto.
00:10:05Não faz muito sentido porque é em italiano,
00:10:08é um nome italiano.
00:10:10E em italiano, seria Muratori ou Muratori..
00:10:13Não faz sentido.
00:10:14Então por que, como virou mur eu não faço ideia.
00:10:18Foi alguma coisa ítalo-americana tipo de imigrante que aconteceu.
00:10:23Eu acho.
00:10:23Não sei.
00:10:24Ok.
00:10:24Então aqui está efetivamente o que eles disseram..
00:10:28Eles têm essas coisas chamadas endpoints de API,
00:10:31mas eles chamam isso,
00:10:33certo.
00:10:33E esses são os endereços de domínio.
00:10:36Tipo,
00:10:36se você procurar no DNS,
00:10:38é o nome que você vai procurar para saber para quem você deve enviar suas requisições do DynamoDB.
00:10:44E essas coisas, eu acho, se parecem com isso..
00:10:47E o Adam provavelmente pode confirmar isso porque ele é,
00:10:52ou era,
00:10:52um herói.
00:10:53Eles se parecem com, Ah, está atrasado.
00:10:56Sim.
00:10:56Estamos alguns segundos atrasados.
00:10:59Porque nosso vídeo sumiu no river.
00:11:01Ah, aí está.
00:11:02Então eles se parecem com dynamodb.use-east-1.api.aws ou algo assim.
00:11:06E acho que depende se você está usando IPv6 ou IPv4.
00:11:09Tipo,
00:11:10eles têm nomes diferentes dependendo das coisas ou se você está usando um específico,
00:11:15tipo,
00:11:16eles falaram que governos usam um diferente ou algo assim.
00:11:19Então esses nomes são como nomes que você efetivamente codifica direto,
00:11:24eu acho,
00:11:25na sua aplicação onde você fica tipo,
00:11:27quando eu precisar fazer algo com o DynamoDB,
00:11:30eu vou perguntar por isso.
00:11:32Isso faz sentido.
00:11:33E parece certo.
00:11:34Adam, tipo, porque eu não uso coisas da AWS.
00:11:36Sim?
00:11:37Sim?
00:11:37Sim.
00:11:38Tudo bem..
00:11:38Então,
00:11:39sabe,
00:11:39você pede algo assim e vai enviar perfeitamente.
00:11:42Quer dizer, eu sei o que ele está dizendo.
00:11:45Sim.
00:11:45Então isso vai te redirecionar para algum lugar porque obviamente não existe tipo uma máquina que vai lidar com todo o tráfego do DynamoDB no universo inteiro.
00:11:55Mesmo se você subdividir por região,
00:11:58o que você pode ver aqui,
00:11:59você deveria escolher uma região.
00:12:01Acho que você não envia para algum endereço principal.
00:12:05Você envia para um endereço regional ou talvez exista um endereço principal que você pode usar que vai descobrir.
00:12:12Não sei..
00:12:13Mas de qualquer forma,
00:12:14em algum momento você está falando com isso e isso precisa apontar para efetivamente um esquema de balanceamento de carga.
00:12:22Então essa coisa deve apontar para efetivamente o que eles chamaram de árvore DNS..
00:12:27Embora eles nunca tenham realmente explicado a natureza de árvore disso.
00:12:31Pareceu mais apenas um,
00:12:32tipo um array ponderado,
00:12:33se você quiser,
00:12:34onde você simplesmente disse,
00:12:35aqui está um monte de máquinas e você vai escolher essas máquinas com base em pesos que definimos para que possamos balancear a carga,
00:12:42certo?
00:12:43Então se uma máquina fica para trás,
00:12:45talvez definamos seu peso mais baixo.
00:12:47E se uma máquina parece meio vazia,
00:12:48definimos seu peso mais alto.
00:12:50E então eles chamaram de árvore.
00:12:52Então estou assumindo que é uma árvore.
00:12:54Eles nunca explicaram qual era a parte da árvore,
00:12:56mas esse nome deve apontar.
00:12:58Posso interromper por um segundo??
00:13:00A propósito,
00:13:00alguém conseguiu sua promoção para L6 com base nessa árvore.
00:13:03Então eu acho que da próxima vez você deveria descobrir o que é essa árvore.
00:13:07Porque isso significou muito para alguém.
00:13:09Ok.
00:13:09Houve um pacote e engenheiros aconteceram.
00:13:11Concordo.
00:13:12A árvore provavelmente é importante.
00:13:14Só não é importante para o bug.
00:13:15E mesmo assim,
00:13:16então vou dizer que não havia necessidade deles explicarem a árvore..
00:13:19Então estou de boa com eles terem pulado o que a árvore está fazendo.
00:13:23Mas tenho uma pergunta rápida também..
00:13:25Sim.
00:13:26É chamada de árvore porque é uma análise de causa raiz ou não??
00:13:29Chega de piadas.
00:13:30Estamos muito fora do tópico.
00:13:32Desculpa.
00:13:33Desculpa.
00:13:33Então de qualquer forma, isso deve apontar para aquilo..
00:13:37E isso,
00:13:38esse tipo de,
00:13:38esse esquema de balanceamento de carga basicamente de entradas DNS e a forma como eles descreveram isso na apresentação deles é que eles usariam algo como,
00:13:47vamos dizer,
00:13:48plan one 45 dot dynamo DB,
00:13:49tipo DDB dot AWS,
00:13:50certo?
00:13:50Agora essa é a raiz dessa árvore,
00:13:52eu acho,
00:13:53não análise de causa raiz,
00:13:54mas tipo essa árvore,
00:13:55isso conteria tipo,
00:13:56esse é o registro de nível superior de um monte de registros que permitem fazer o balanceamento de carga.
00:14:02E eu presumo que o route 53 meio que tem essa capacidade de balanceamento de carga.
00:14:07Estou lendo nas entrelinhas da apresentação.
00:14:09Eles não disseram isso diretamente,
00:14:11mas estou presumindo que o route 53,
00:14:13através do qual estão fazendo tudo isso,
00:14:15sabe,
00:14:16que é o próprio sistema de DNS deles,
00:14:18permite que esse balanceamento de carga aconteça simplesmente configurando coisas aqui que dizem como o balanceamento de carga deveria funcionar naquele momento.
00:14:27E então ele vai escolher a máquina correta com base em algum tipo de aleatorização nos pesos ou algo assim.
00:14:33Agora,
00:14:33o que eles disseram foi que esse nome,
00:14:35que realmente existe.
00:14:37E aparentemente há uma árvore ou algo assim.
00:14:39Esse nome é um que eles meio que usaram apenas para a apresentação.
00:14:43Eles nunca usaram um nome legível por humanos para esse plano,
00:14:46tipo one 45 que eu escrevi aqui ou algo assim.
00:14:49Era realmente um hash de alguma coisa.
00:14:51Então seria realmente tipo,
00:14:52sabe,
00:14:53zero a F E um,
00:14:53dois,
00:14:54sabe,
00:14:54nove a ou algo assim,
00:14:56certo.
00:14:56É realmente o que estaria ali.
00:14:58Então se você fosse olhar,
00:14:59você não veria um nome legível por humanos,
00:15:02ou pelo menos naquela época,
00:15:03você não veria,
00:15:04eu acho que você não veria tipo plan one 45.
00:15:06Você apenas veria aquilo.
00:15:08E então a ideia era, ok, um usuário vai usar isso.
00:15:11Eles consultam esse nome,
00:15:12o route 53 vai direcioná-los tipo para aqui.
00:15:14E essa coisa é algum tipo de árvore de balanceamento de carga que o route 53 pode usar e que vai permitir que você chegue onde precisa ir.
00:15:22Certo.
00:15:23Eles vão te dar uma máquina real para a qual você pode enviar tráfego eventualmente.
00:15:27Novamente, eles não descreveram nada disso.
00:15:30Então eu não tenho ideia de como nada disso funciona.
00:15:33Nunca mexi nem usei o route 53.
00:15:34Então não tenho ideia,
00:15:35mas vamos apenas assumir que isso acontece porque não importa para esse bug..
00:15:41Nós temos um herói da AWS.
00:15:42Então se você tiver,
00:15:43se você estiver confuso,
00:15:45você sempre pode perguntar ao Adam e ele pode ter mais insights.
00:15:48Quer dizer, sim, pode ir em frente..
00:15:50Bem,
00:15:51o route 53 tem muitas formas diferentes de você dividir o tráfego.
00:15:54Então sim, ponderado é uma delas.
00:15:55E parece ser o que eles descreveram..
00:15:57Então de alguma forma eles configuraram esses registros com isso.
00:16:00E eles simplesmente não disseram como,
00:16:02mas algo,
00:16:02algo em um formato de árvore fez isso.
00:16:04Meu palpite é que há tipo um ponderado,
00:16:06tipo a árvore tem tipo ponderado,
00:16:07tipo há alguns pesos no topo que se ramificam para mais pesos ou algo assim,
00:16:10porque isso é mais fácil para lidar porque há muitos deles ou algo assim..
00:16:14Quem sabe?
00:16:14De qualquer forma, não tenho ideia.
00:16:16O ponto é,
00:16:17isso é o que deveria estar acontecendo normalmente..
00:16:20Agora,
00:16:20a razão pela qual isso é chamado de plan 145 aqui,
00:16:23mesmo que na verdade teria sido algum código hash,
00:16:26mas eles se referem a ele como tipo plan 145 é o balanceamento de carga,
00:16:30como você pode imaginar,
00:16:31tem que ser meio contínuo porque as máquinas do DynamoDB estão tipo fazendo coisas o tempo todo.
00:16:37Elas estão ficando mais sobrecarregadas.
00:16:39Há máquinas caindo ou travando ou quem sabe o quê, certo??
00:16:43Pode estar acontecendo, sendo retirado do ar.
00:16:45Nova capacidade pode ser adicionada.
00:16:48E então esse material tem que ser atualizado constantemente,
00:16:52tipo,
00:16:52o tempo todo.
00:16:53Então esse endpoint principal da API ao qual você se conecta,
00:16:57ele constantemente precisa ter aquela árvore para a qual ele está apontando ser ajustada.
00:17:03E então a maneira como eles fazem isso é criar outra árvore,
00:17:07a árvore para a qual eles vão migrar,
00:17:09certo?
00:17:10Eles criam tipo, sabe, plano 146 ou algo assim.
00:17:13E eles montam a árvore inteira aqui.
00:17:15E então quando estão prontos,
00:17:17tipo quando essa árvore está pronta,
00:17:19eles pegam esse,
00:17:20sabe,
00:17:21esse registro aqui,
00:17:22e em vez dele apontar para aquele,
00:17:24eles apontam para este,
00:17:26certo?
00:17:26Então você faz o novo,
00:17:27e eles migram para ele apenas mudando aquele nome.
00:17:31Agora,
00:17:31por alguma razão,
00:17:32e essa razão não é realmente explicada..
00:17:36A maneira como eles configuraram esse processo é dividindo-o em duas partes.
00:17:41Há algo chamado planejador,
00:17:43que basicamente descobre como a nova árvore deveria se parecer.
00:17:47Então você pode imaginar que há alguma máquina chamada planejador.
00:17:51E eu não sei se é uma máquina real ou se é apenas um processo rodando em alguma máquina que está executando outras coisas,
00:17:59quem sabe.
00:18:00Mas há algo chamado planejador.
00:18:02E pelo que pude perceber,
00:18:03há apenas um,
00:18:04ou seja,
00:18:04há apenas um planejador que fica lá e descobre como deveria ser o novo plano para o qual vamos migrar..
00:18:13E ele está constantemente fazendo isso.
00:18:16Então ele gera o plano 145,
00:18:18depois gera o plano 146,
00:18:20depois gera 147,
00:18:21148,
00:18:229,
00:18:2210,
00:18:23sabe,
00:18:23blá,
00:18:24blá,
00:18:24blá,
00:18:25blá,
00:18:25blá,
00:18:26certo?
00:18:26E ele simplesmente continua produzindo planos para toda a eternidade,
00:18:32porque esse é o seu trabalho.
00:18:34Agora, ele nunca os cria de fato, aparentemente.
00:18:38Seu trabalho não é criá-los no Route 53.
00:18:42É apenas descobrir como eles seriam se alguém fosse colocá-los no Route 53.
00:18:48Então eles têm três executores..
00:18:50Esses executores pegam o plano do planejador e o colocam no Route 53.
00:19:06Isso faz sentido?
00:19:07Agora,
00:19:08um planejador,
00:19:09pelo que entendo da pronúncia,
00:19:10três executores.
00:19:11Não houve explicação para por que esse seria o caso.
00:19:14Eles disseram que a razão de haver três executores é porque deveria ser tolerante a falhas,
00:19:20tipo se um deles cair ou algo assim.
00:19:22Mas eles nunca explicaram por que você não precisaria então de três planejadores,
00:19:27porque se o planejador caísse,
00:19:29então os executores não teriam nada para executar.
00:19:32Então não fez muito sentido.
00:19:33Então não havia uma explicação na coisa sobre por que essa estrutura se parece do jeito que se parece.
00:19:39Não é realmente tão importante para o bug que ela se pareça assim,
00:19:43embora meio que seja,
00:19:44como veremos mais tarde.
00:19:46Então eu fiquei um pouco intrigado pelo fato de que eles não justificaram isso,
00:19:50mas tudo bem.
00:19:51Então espero que isso faça sentido.
00:19:53Temos um planejador.
00:19:55Temos três executores.
00:19:56Os executores estão todos tentando executar esse plano.
00:19:59Agora,
00:20:00o que acontece aqui é que por,
00:20:01novamente,
00:20:02razões que a única coisa que eles disseram na apresentação foi que torna mais fácil de raciocinar.
00:20:08Esta é a única informação sobre.
00:20:10Eles disseram que torna mais fácil de raciocinar.
00:20:13Porque torna mais fácil de raciocinar,
00:20:15esses executores usam serialização.
00:20:17Então em vez deles simplesmente tentarem criar registros,
00:20:20e se os registros já estiverem lá,
00:20:22simplesmente não criá-los ou algo assim,
00:20:25em outras palavras,
00:20:26eu tenho três pessoas rodando..
00:20:29Todos nós queremos criar,
00:20:31sabe,
00:20:31digamos este registro de nível superior,
00:20:34plan146.ddb.aws,
00:20:35certo?
00:20:36Todos nós estamos tentando fazer isso.
00:20:38Um de nós faz primeiro.
00:20:40A próxima pessoa tenta fazer,
00:20:42e já está lá ou algo assim,
00:20:43certo?
00:20:44Todos nós estamos tentando criar o mesmo registro.
00:20:47Então,
00:20:47em teoria,
00:20:48poderíamos simplesmente ter três pessoas martelando aleatoriamente em qualquer parte do plano que estão tentando martelar,
00:20:55e em teoria deveria meio que funcionar,
00:20:58certo?
00:20:58E eu meio que tive a impressão,
00:21:00embora ele não tenha dito explicitamente,
00:21:02eu meio que tive a impressão do apresentador de que ele concordaria com o que acabei de dizer,
00:21:08ou seja,
00:21:09que eles poderiam simplesmente tê-los executado arbitrariamente e estaria ou deveria estar ok.
00:21:14Mas,
00:21:15ele disse,
00:21:15eles usam serialização para facilitar o raciocínio.
00:21:19O que isso significa é que,
00:21:20em vez desses enactors simplesmente martelarem assim,
00:21:23o que eles fazem é tentar adquirir um bloqueio para qualquer que seja o endpoint que estão tentando atualizar.
00:21:30Então,
00:21:31em outras palavras,
00:21:32se esta pessoa está tentando atualizar uma dessas coisas,
00:21:35e tive a impressão de que era se você está tentando atualizar esta aqui,
00:21:40mas poderia ter sido se você está tentando atualizar esta aqui,
00:21:43ou poderia ter sido em ambas.
00:21:45Eles nunca realmente disseram 100%,
00:21:47se me lembro corretamente,
00:21:49exatamente onde o bloqueio estava ocorrendo.
00:21:52Mas o bloqueio ocorre quando eles dizem,
00:21:54ok,
00:21:55vou criar um bloqueio que é um registro DNS.
00:21:57E ao usar o fato de que o Route 53 tem a ideia de atômico,
00:22:01que é,
00:22:01você sabe,
00:22:02posso fazer duas coisas e se ambas não tivessem sucesso,
00:22:05então não fará nenhuma delas..
00:22:08Eles basicamente criaram um sistema de bloqueio que bloqueia via Route 53.
00:22:13Então os registros DNS do Route 53 são na verdade o registro de bloqueio,
00:22:17se isso faz sentido.
00:22:18Posso fazer uma pergunta rápida?
00:22:20Sim.
00:22:21Você disse que faz isso através de serialização?
00:22:23Não entendo bem o que isso significa.
00:22:26Porque eu pensei que serialização é apenas converter de uma memória para uma representação de memória diferente de algo.
00:22:33Desculpe, serialização diferente.
00:22:35Então sim, isso é serialização.
00:22:36Neste caso,
00:22:37queremos dizer literalmente serialização temporal,
00:22:40ou seja,
00:22:40eles queriam que esses enactors tivessem algum tipo de maneira pela qual organizariam seu comportamento em uma ordem em vez de apenas serem arbitrários.
00:22:49E a maneira como fizeram isso foi bloqueio.
00:22:52Então o que vai acontecer é,
00:22:53em vez desta pessoa simplesmente fazer o que quer que seja que vá fazer,
00:22:58tipo,
00:22:58ok,
00:22:59vou tipo,
00:22:59terminei isso,
00:23:00vou apontar esse cara para o plano 146 agora.
00:23:02Em vez de fazer isso,
00:23:04ela tenta adquirir um bloqueio neste aqui,
00:23:06certo?
00:23:07E se não conseguir o bloqueio, não fará a mudança.
00:23:10Então apenas um desses enactors pode estar no processo de atualizar isso a qualquer momento.
00:23:15Isso faz sentido?
00:23:16Mm hmm.
00:23:16Agora novamente,
00:23:17exatamente o que eles estavam tentando fazer com isso nunca foi explicado.
00:23:22Eles apenas disseram facilita o raciocínio e deixaram por isso mesmo.
00:23:26Então não sei por que acharam que isso era uma melhoria.
00:23:29E curiosamente, é o que acaba descobrindo o bug.
00:23:32Então não foi uma melhoria.
00:23:33Se alguma coisa, provavelmente foi ruim.
00:23:36Mas então Casey,
00:23:37você está dizendo que eles não têm tipo,
00:23:39eles não têm uma boa razão para estarem dizendo vamos fazer os enactors rodarem quase como um de cada vez?
00:23:45Por que eles têm, por que eles têm três enactors?
00:23:48Não entendo.
00:23:49Tipo, por que eles não têm apenas um?
00:23:51Eles simplesmente não dizem isso.
00:23:53Não sabemos por quê.
00:23:54E eles não explicaram muito bem,
00:23:56tipo,
00:23:56eu realmente não ouvi uma explicação de como você tem três enactors concorrentes.
00:24:01Você espera que eles possam cair,
00:24:03e é por isso que você tem três..
00:24:07Certo.
00:24:08Mas eles estão pegando um bloqueio.
00:24:10Então o que acontece se esse cara pega o bloqueio e depois cai??
00:24:13Tipo, eu também não ouvi uma explicação para isso.
00:24:16Então tudo foi muito confuso para mim.
00:24:18Tipo,
00:24:19eu,
00:24:19eu,
00:24:20eu não estou reclamando disso como parte do que estamos falando aqui,
00:24:24porque não é importante para a causa na minha opinião.
00:24:27Mas como apresentação, eu tive tantas perguntas.
00:24:30Tipo,
00:24:30eu fiquei tipo,
00:24:31não entendo por que vocês fizeram nada disso,
00:24:34para ser completamente honesto.
00:24:35Certo.
00:24:36E talvez isso,
00:24:37novamente,
00:24:37parte disso pode ser simplesmente que eu não uso serviços AWS.
00:24:41Pode ser que algumas dessas coisas seriam óbvias se você fosse alguém que usa regularmente o Route 53 ou algo assim,
00:24:47você ficaria tipo,
00:24:48ah,
00:24:49é porque os bloqueios podem ser configurados para um timeout ou quero dizer,
00:24:53não sei.
00:24:54Certo.
00:24:54Mas enfim, sim, então eles estão fazendo isso.
00:24:57E o que acaba acontecendo para,
00:24:59para isso,
00:24:59a coisa que revela o bug é que o que acaba acontecendo é que esses executores,
00:25:04quando eles não conseguem o bloqueio,
00:25:06eles simplesmente fazem tipo um recuo,
00:25:08certo?
00:25:08Eles basicamente vão ficar tipo,
00:25:10ok,
00:25:11deixa eu esperar e vou tentar de novo.
00:25:13Então um executor,
00:25:14esse executor tenta conseguir o bloqueio,
00:25:16mas outra pessoa já tem o bloqueio.
00:25:18Então ele só espera um pouco.
00:25:20Ele tenta conseguir o bloqueio de novo.
00:25:22É isso que vai acontecer.
00:25:23Certo.
00:25:24E o que eles disseram que aconteceu foi que eles chegaram a um caso patológico,
00:25:28entre aspas,
00:25:29onde um dos executores está,
00:25:31você sabe,
00:25:31executou algum plano.
00:25:33E esse plano, digamos que era bem antigo.
00:25:35Acho que eles usaram 110 como exemplo que eles usaram.
00:25:38Então ele executou o plano 110.
00:25:40E ele quer apontar,
00:25:41você sabe,
00:25:41é tipo,
00:25:42eu tenho que configurar a API para apontar para o meu 110,
00:25:45tenta conseguir o bloqueio para atualizar dynamodb.use.one ou seja lá o que for,
00:25:50e falha porque outra pessoa está executando o plano 111 ou algo assim.
00:25:54Certo.
00:25:54Ou o plano 109 poderia ter sido um plano anterior.
00:25:57Então os outros executores estão fazendo isso.
00:26:00Ele não consegue fazer.
00:26:01Ele recua.
00:26:02Certo..
00:26:02E lembra que esse executor aqui, estamos no 110.
00:26:05Ele está tentando, ele realmente quer executá-lo..
00:26:07Ele tenta de novo.
00:26:08Outra pessoa tem o bloqueio.
00:26:10Agora ele tenta de novo, ainda bloqueado.
00:26:12Essa pessoa está presa no 110,
00:26:13tentando desesperadamente executar.
00:26:15Não consegue fazer.
00:26:16Aparentemente isso aconteceu tantas vezes que os outros executores e o planejador estão simplesmente produzindo novos planos esse tempo todo.
00:26:22Certo..
00:26:23Os outros executores,
00:26:24eles chegam tipo ao 145 ou algo assim e 146,
00:26:27eles estão executando planos que estão tipo muito à frente do 110.
00:26:31Certo.
00:26:32E esse cara ainda está travado porque ele simplesmente sem sorte nunca consegue o bloqueio.
00:26:37Certo.
00:26:38Finalmente,
00:26:38em algum momento depois que tipo o plano 145 já foi executado e apontado por algum outro executor e tudo mais,
00:26:45plano 110,
00:26:46esse executor inativo ainda tentando fazer isso finalmente consegue o bloqueio.
00:26:51Quero dizer, é tipo, é.
00:26:52E então ele diz, ok, estamos apontando para 110 agora.
00:26:55Sim.
00:26:56Certo..
00:26:58Então agora está em um plano super antigo e obsoleto,
00:27:00mas isso realmente não deveria ser um problema.
00:27:02Certo..
00:27:03Porque eventualmente na próxima vez que algum executor tiver algo,
00:27:06vai ser um plano muito mais recente.
00:27:07Eles vão simplesmente executar o plano,
00:27:09você sabe,
00:27:09146 ou sete ou oito ou seja lá o que for.
00:27:11E vamos reapontá-lo de volta para isso e estamos de volta a um plano novo.
00:27:14Então todo mundo vai simplesmente ter balanceamento de carga ruim por tipo alguns minutos,
00:27:18mas aí vai ficar tudo bem.
00:27:19Certo.
00:27:19Eles tiveram balanceamento de carga ruim por pelo menos alguns minutos..
00:27:22Certo.
00:27:23Sim.
00:27:23Verdade.
00:27:24Bem, é muito pior do que isso.
00:27:27É isso que deveria acontecer.
00:27:29Certo..
00:27:30Ou seja,
00:27:31é assim que eles esperariam que isso funcionasse também.
00:27:34Ok.
00:27:34O problema é que eles,
00:27:36eles também não queriam que o Route 53 ficasse entupido com todos esses registros.
00:27:40Porque se eles simplesmente os deixassem por aí,
00:27:43eventualmente depois de,
00:27:44você sabe,
00:27:45três meses,
00:27:46você tem tipo 8 bilhões de registros que você enfiou no Route 53 para cada,
00:27:50você sabe,
00:27:51alguns minutos você está colocando essa grande árvore de pesos e tal.
00:27:55Eles ficaram tipo,
00:27:56ok,
00:27:56em algum momento nós deveríamos simplesmente limpar esses planos..
00:28:00Então os enactors também procuram por planos mais antigos que um certo período.
00:28:05E se forem mais antigos que um certo período,
00:28:08eles os deletam.
00:28:09Então o que aconteceu foi que eles apontaram para o plano 110.
00:28:13Esse enactor finalmente consegue o bloqueio.
00:28:16Ele aponta para 110.
00:28:18Outro enactor fica tipo,
00:28:19oh,
00:28:20uau,
00:28:20110,
00:28:21cara,
00:28:21isso é muito antigo.
00:28:22Devemos nos livrar disso e o deleta.
00:28:25Então agora o DynamoDB us-east-1.api.aws está apontando para um registro que não pode ser resolvido.
00:28:31Certo.
00:28:32É apenas algo,
00:28:33na verdade,
00:28:34novamente,
00:28:34não seria parecido com plano 110.
00:28:36Seria parecido com OAFE129A,
00:28:38algum hash,
00:28:39ponto,
00:28:39certo,
00:28:40DDB.aws.
00:28:40Mas está apontando para esse nome.
00:28:43E se você perguntar esse nome, não obtém nada..
00:28:46Então o que aconteceria nesse ponto é que todos que estavam tentando obter um endpoint para enviar coisas receberiam de volta um nome não resolvível,
00:28:54basicamente.
00:28:55Certo.
00:28:55E eu realmente não sei o que acontece no Route 53 quando isso ocorre,
00:28:59mas você basicamente estaria recebendo de volta algo que não poderia usar ou apenas galimatias para um IP,
00:29:05quem sabe.
00:29:05Mas seja lá o que fosse,
00:29:06se você tentasse realmente usá-lo,
00:29:08não obteria uma resposta.
00:29:09Certo..
00:29:10Interessante.
00:29:11Isso é porque a AWS não usa Rust suficiente,
00:29:13porque isso obviamente é um bug de use-after-free?
00:29:16E então eu acho que Rust teria resolvido isso, certo?
00:29:19Se você reescrevesse o Route 53 inteiramente em Rust,
00:29:22obviamente,
00:29:23todos esses problemas não existiriam.
00:29:25Não,
00:29:25para ser específico,
00:29:26acho que na apresentação,
00:29:28eles disseram,
00:29:28não sobre Rust,
00:29:29mas disseram o que aconteceria especificamente,
00:29:32que é acho que quando você perguntava por essa coisa ou essa coisa ou essa coisa,
00:29:36não sei a qual eles estavam se referindo,
00:29:39porque não consigo me lembrar direito,
00:29:41você simplesmente receberia de volta uma coisa dizendo nenhum registro encontrado.
00:29:45Então esse é o resultado final do que aconteceria,
00:29:48seja perguntando por isso ou perguntando por aquilo,
00:29:51não tenho certeza,
00:29:52mas simplesmente recebe de volta nenhum registro encontrado.
00:29:55Isso é o que você teria recebido quando estava tentando chamar aquela API.
00:29:59Então,
00:30:00qualquer biblioteca que você estivesse usando para usar o DynamoDB,
00:30:03ela simplesmente diria,
00:30:05ei,
00:30:05nenhum registro encontrado,
00:30:07cara.
00:30:07Desculpa.
00:30:08Certo.
00:30:08Então isso,
00:30:09se você perguntar a qualquer um na internet,
00:30:11certo,
00:30:12todos ficam tipo,
00:30:13sim,
00:30:13eles explicaram o bug.
00:30:14Esse é o bug.
00:30:15O bug é que havia essa condição de corrida, certo?
00:30:18Todo mundo,
00:30:18porque todo mundo,
00:30:19assim que você diz condição de corrida,
00:30:22o cérebro de todo mundo desliga.
00:30:23Eles ficam tipo, oh, ok, bem, foi uma condição de corrida.
00:30:27Pronto.
00:30:27Nada para ver aqui, certo?
00:30:29Então eles dizem, é uma condição de corrida.
00:30:31Eles explicam.
00:30:32É tipo, não, eles não explicaram.
00:30:34Porque se você pensar no que aconteceria aqui,
00:30:36imediatamente depois disso,
00:30:38todo mundo está recebendo isso,
00:30:39é um novo enactor.
00:30:40Um novo enactor simplesmente executará um novo, certo?
00:30:43E então o bug, certo, é por que isso não ocorreu?
00:30:46Essa é a RCA real que eu queria ver é por que o próximo enactor não veio e consertou?
00:30:51Posso jogar algo mais?
00:30:52Não seria também um bug?
00:30:53Tipo,
00:30:54por que escrever um registro tão antigo que deveria ser deletado imediatamente?
00:30:58Bem,
00:30:59não era,
00:30:59era porque era esse cara tinha escrito há bastante tempo.
00:31:02E era, o peso.
00:31:03Bem,
00:31:04quer dizer,
00:31:04se você está perguntando,
00:31:06por que eles não escreveram enactors com código melhor?
00:31:09Sim, isso é bem legal..
00:31:11Ok, justo.
00:31:12Parece que se você está atualizando para algo que deveria ser deletado imediatamente,
00:31:16não é tipo,
00:31:17isso parece o problema bem aí.
00:31:18Você fez algo errado muito antes.
00:31:20Sim,
00:31:21mesmo que isso não conserte realmente a estrutura teórica dessa coisa,
00:31:24uma verificação simples nesse cara quando depois que ele terminou de recuar no bloqueio,
00:31:29ele deveria talvez verificar se está prestes a definir isso para algo que ele deletaria se estivesse executando seu código de deleção é provavelmente uma boa medida de segurança.
00:31:39Mas sim, então concordo 100% com ele.
00:31:41Ok,
00:31:41mas um enactor trabalhou muito,
00:31:43muito duro para conseguir aquele registro.
00:31:45Esperando muito tempo.
00:31:47Oh, vai ter suas cartas de Pokémon..
00:31:49Alguém já esperou.
00:31:50Então apenas deixe-o escrever o registro.
00:31:53Ok.
00:31:53Então, então eu quero ouvir sobre isso..
00:31:56Infelizmente,
00:31:57se você olhar a apresentação e a análise de causa raiz,
00:32:01não há menção alguma disso.
00:32:03A apresentação pelo menos tem um pequeno trecho de 12 segundos onde menciona aproximadamente onde o bug estaria.
00:32:13Então deixa eu explicar o que é isso.
00:32:17Aparentemente,
00:32:18o que ocorre junto com isso é que quando você faz o DynamoDB us-east-one,
00:32:25mas quando você aponta isso para o seu plano,
00:32:29você também faz outra operação ao mesmo tempo.
00:32:33E essa operação é definir o rollback..
00:32:40Acho que é DD.
00:32:41É DDB ponto rollback ponto AWS?
00:32:45Não me lembro exatamente como é..
00:32:49Existe um registro de rollback.
00:32:51Ele define esse registro para o que quer que fosse o plano antigo.
00:32:55Então se estávamos aqui apontando para o 145,
00:32:58e agora vamos apontar para o 110,
00:33:00certo,
00:33:01esses atores antigos,
00:33:02tipo,
00:33:03estou mudando para o 110,
00:33:04ele tenta definir,
00:33:05pegar qualquer que fosse esse nome,
00:33:08certo,
00:33:08atualmente,
00:33:09e mover esse novo,
00:33:10aquele nome,
00:33:11que teria sido o plano 145,
00:33:13mover isso para que o endereço de rollback aponte para o plano antigo..
00:33:18Certo.
00:33:18E isso é só para depuração.
00:33:20Ou,
00:33:21sabe,
00:33:21é basicamente só para facilitar para o operador,
00:33:24né??
00:33:24Se eles quiserem voltar para o plano anterior ou algo assim,
00:33:28ou se você simplesmente quiser saber qual era o plano anterior,
00:33:31você pode ver aqui,
00:33:33certo?
00:33:33Essa é a primeira parte de como eles explicaram sobre a falha.
00:33:37Eu gostaria de ressaltar uma coisa aqui que também não fez nenhum sentido para mim.
00:33:41Porque eu fiquei tipo,
00:33:43ok,
00:33:43você está me dizendo que essas coisas atualizam a cada minuto ou algo assim.
00:33:48De que adianta ter um desses?
00:33:49Tipo,
00:33:50quando você finalmente fizer login,
00:33:52já vai ter atualizado daquele para o qual você queria voltar para alguma coisa nova.
00:33:57Esse é justamente o plano que você não quer porque tudo caiu,
00:34:00certo?
00:34:01Tipo, é isso, né?
00:34:02Se você não quer isso,
00:34:03você só quer esses nomes em uma lista.
00:34:05Para poder ver tipo, qual era às 12h30?
00:34:07Aquele ali, certo?
00:34:08Então isso não fez nenhum sentido para mim.
00:34:11Eu literalmente não tenho ideia de por que isso seria bom,
00:34:14certo?
00:34:15Não parecia que faria a coisa que você realmente quer,
00:34:18que é poder marcar um ponto no tempo e dizer,
00:34:20precisamos voltar para a 1 da tarde porque tudo desandou depois disso,
00:34:24certo??
00:34:26Enfim, então isso não fez sentido para mim.
00:34:29Mas de novo, não diretamente relacionado ao bug.
00:34:31Então eu não perguntei por quê,
00:34:33só estou dizendo,
00:34:34ok,
00:34:34é isso que tinha que fazer.
00:34:36E só pode voltar uma versão é o que você está dizendo.
00:34:39É, mesmo que as outras árvores existam.
00:34:41Então você facilmente poderia apenas sabendo qual era o nome.
00:34:44Então tudo isso é,
00:34:45é colocar um nome legível para humanos em algo que você quase certamente não se importa.
00:34:50Certo.
00:34:51Mas eles não podem realmente armazenar tanta coisa assim..
00:34:54Casey,
00:34:54acho que eles não podem realmente colocar tipo,
00:34:57sei lá,
00:34:57Adam,
00:34:58tipo assim,
00:34:59eles não têm muita escala ali,
00:35:00certo?
00:35:01Tipo, são muitas linhas.
00:35:02Se fosse eu, teria simplesmente feito isso um timestamp.
00:35:05Se é isso que você queria, certo?
00:35:07Eu teria dito,
00:35:08quando o planejador ou quando essa pessoa apontou para essa coisa?
00:35:12Tipo quando você conseguiu o lock,
00:35:14você muda esse nome para o timestamp,
00:35:16e atualiza isso em uma operação atômica.
00:35:18Então você simplesmente sabe que se eu quiser voltar para a 1 da tarde,
00:35:22só procuro tipo,
00:35:23qual tinha o timestamp,
00:35:24sabe,
00:35:25o timestamp mais antigo,
00:35:26não depois daquele horário..
00:35:28E é isso que estávamos rodando naquele momento.
00:35:30É isso que eu teria feito.
00:35:31Certo.
00:35:32Mas eu não sei.
00:35:32Então não tenho ideia de por que fizeram isso.
00:35:34Eles fizeram o que fizeram.
00:35:35Eu, sabe, talvez faça todo o sentido.
00:35:37De novo, não tenho conhecimento do sistema deles.
00:35:39Todas essas coisas, elas fazem todo o sentido..
00:35:41Então não é que eu esteja realmente,
00:35:42estou só dizendo que não entendo.
00:35:43Não sei, podem não ser más ideias, certo??
00:35:45Podem ser boas ideias,
00:35:46se você entendesse o resto do sistema.
00:35:49Então enfim,
00:35:49o que eles dizem,
00:35:51e isso é tudo que temos,
00:35:52é essa operação,
00:35:53ou seja,
00:35:54definir o rollback para apontar para o plano antigo que estava sendo,
00:35:58sabe,
00:35:58que nesse caso teria sido na verdade mais novo em alguns casos,
00:36:02certo?
00:36:03Então não é realmente o plano apontado anteriormente,
00:36:06que pode ser mais antigo,
00:36:08pode ser mais novo.
00:36:09Fazer essa atividade..
00:36:11Se esse plano não existisse mais,
00:36:13ou seja,
00:36:13se tivesse sido deletado assim,
00:36:16então o enactor para permanentemente.
00:36:18Então toda vez,
00:36:19tipo,
00:36:20uma vez que você entra num estado onde dynamodb.usc é aquele,
00:36:24certo.
00:36:25Então fazemos toda a sequência de passos que dissemos aqui?
00:36:29Este plano é deletado..
00:36:31Então agora isso está apontando para um nome inválido,
00:36:33tipo irresolvível,
00:36:34não conseguimos resolver plan plan dash 110,
00:36:36que na verdade é um código hexadecimal.
00:36:38Mas seja lá o que era, não conseguimos mais resolver isso..
00:36:41Uma vez que esse estado é verdadeiro,
00:36:43então da próxima vez que um enactor vier e tentar fazê-lo apontar para um novo plano,
00:36:49seja lá qual for esse novo plano,
00:36:51ele não consegue,
00:36:52tipo,
00:36:53quando ele realmente chega até aqui e tenta definir o rollback,
00:36:57isso vai crashar permanentemente.
00:36:59Portanto,
00:37:00todos os três enactors vão parar agora porque eventualmente todos os três vão tentar executar um novo plano.
00:37:07Eles vão tentar definir o rollback primeiro para apontar para qualquer que fosse o plano antigo,
00:37:14descobrir que não há plano lá.
00:37:16E isso aparentemente é só um crash completo.
00:37:18Ah, isso é loucura.
00:37:20Eu pensava que os três enactors eram pra fazer com que tivesse redundância.
00:37:25Agora,
00:37:25de novo,
00:37:26é por isso que fico irritado com pessoas online que ficam respondendo.
00:37:30Tipo, foi uma condição de corrida.
00:37:33Não foi uma condição de corrida.
00:37:35A condição de corrida não é necessária pra isso.
00:37:38A condição de corrida é só o motivo de você ter acabado com esse nome sendo irresolvível.
00:37:44Mas se você não tivesse qualquer código que fez isso mal feito,
00:37:48teria simplesmente funcionado..
00:37:52Você nunca teria sabido.
00:37:53Você teria tido uma interrupção momentânea de um minuto do DynamoDB ou algo assim,
00:37:58mas imagino que há interrupções de um minuto do DynamoDB de tempos em tempos.
00:38:02Isso não é notícia global..
00:38:04O que é notícia global é derrubar permanentemente,
00:38:07que foi o que aconteceu aqui.
00:38:08E até que um humano real vá e descubra isso,
00:38:11reinicie,
00:38:11coloque esses enactors funcionando de novo,
00:38:13simplesmente acabou.
00:38:14Está fora permanentemente.
00:38:16Então potencialmente horas.
00:38:17E foi tempo suficiente,
00:38:18imagino,
00:38:19neste caso para então ter falhas em cascata.
00:38:21Você nunca teria tido isso.
00:38:22É só uma interrupção momentânea.
00:38:24Se algumas pessoas momentaneamente recebessem um nome irresolvível ou nenhum registro,
00:38:28então elas simplesmente tentariam de novo.
00:38:31Isso normalmente é tipo com DNS,
00:38:32é tipo seu telefone,
00:38:33você passou por um túnel.
00:38:34Isso seria tudo que teria acontecido..
00:38:37Então eu quero saber como era o código aqui?
00:38:40Como você escreve algo que se isso não fosse um nome válido,
00:38:43o que nem seria na inicialização,
00:38:45ou seja,
00:38:46se você estivesse iniciando este sistema e o operador não tivesse pré-configurado,
00:38:51não estaria apontando para nada.
00:38:53Esse é o caso padrão com o qual você pensaria que começaria.
00:38:56Então se você vai fazer isso,
00:38:58você pensaria que simplesmente lidaria com esse caso porque o endereço de rollback poderia simplesmente não apontar para nada.
00:39:06Apenas pegue o que quer que seja isso.
00:39:08Se for nada, defina o endereço de rollback como nada..
00:39:12Pronto.
00:39:12Então há algo realmente estranho sobre a forma como eles escreveram esse código.
00:39:17E isso é o que deveria ter estado no RCA.
00:39:19Esse é o bug inteiro pra mim.
00:39:21Isso é apenas cenário para como acabamos tendo essa coisa apontando para nada.
00:39:26O mesmo bug teria ocorrido se alguém tivesse acidentalmente deletado esse registro.
00:39:31Tipo algum operador simplesmente tipo,
00:39:33ops,
00:39:33droga,
00:39:34eu defini como nada..
00:39:35Esse mesmo bug teria acontecido de acordo com a apresentação.
00:39:39Então a causa raiz não é a condição de corrida.
00:39:41A condição de corrida é um detalhe à parte.
00:39:44Faz sentido?
00:39:44Pergunta rápida.
00:39:45Então estou legitimamente pensando nisso.
00:39:48E então isso significa que a coisa que define o rollback provavelmente assume algum tipo de struct com um monte de memória ou algo que foi passado,
00:39:56faz algum tipo de acesso.
00:39:57Explode.
00:39:58Ou você acha que esse é o mesmo estilo de bug,
00:40:00que é aquela linha que derrubou a Cloudflare,
00:40:03que é eles simplesmente assumem que está lá e fazem unwrap..
00:40:07É em Rust. É Rust memory safe. Faz unwrap, explode.
00:40:13Eu realmente não sei.
00:40:14Meu palpite,
00:40:14tipo na minha cabeça,
00:40:15eu pensei,
00:40:16qual é aquela coisa que eu vejo as pessoas fazerem várias vezes e eu sempre fico tipo,
00:40:20por que você faria isso?
00:40:21Mas é só porque essa é a forma como elas aprenderam a programar.
00:40:25E eu estava pensando tipo,
00:40:26se você estivesse escrevendo em uma dessas linguagens que gostam de lançar exceções para condições de erro,
00:40:32esse seria um ótimo exemplo disso.
00:40:33Então se você tivesse uma situação onde você fosse tipo,
00:40:36ah,
00:40:37eu fui buscar o registro DNS para onde essa coisa aponta..
00:40:40E normalmente em um ambiente de programação sensato,
00:40:43ninguém está lançando uma exceção ali.
00:40:45Se eles não recebem nada de volta,
00:40:47eles simplesmente retornam nada.
00:40:48E então quando a pessoa vai definir ddb.robot.js,
00:40:51eles simplesmente definem como nada,
00:40:52que é o comportamento correto.
00:40:54Tipo,
00:40:54nada flui,
00:40:55literalmente o valor nada flui corretamente através desse fluxo.
00:40:58Então se você estivesse escrevendo isso para ser,
00:41:01já que é um serviço de fundação central,
00:41:03assumindo que você estava tentando escrever algo que fosse tolerante a falhas,
00:41:06você nunca faria algo como lançar uma exceção.
00:41:09Então na minha cabeça,
00:41:10estou pensando,
00:41:11aposto que o que acontece aqui é que quando você pede esse registro,
00:41:14eles simplesmente usam alguma chamada de biblioteca ou algo assim que lança uma exceção quando o registro não existe.
00:41:20E simplesmente lançou uma exceção e o ator terminou.
00:41:22Esse é meu palpite.
00:41:23E eu posso estar muito errado sobre isso porque é só um palpite aleatório.
00:41:27Mas é por isso que eu quero ver o RCA.
00:41:29O que foi.
00:41:29Pode ser exatamente aquilo que o Trash estava falando.
00:41:32Quer dizer, pode ser as coisas que o Prime estava falando?
00:41:35Pode ser o que eu acabei de dizer.
00:41:37Pode ser qualquer coisa.
00:41:38E eu quero saber porque é aí que estaria a verdadeira educação aqui.
00:41:41Evitar essa condição de corrida é completamente sem importância.
00:41:44Essa condição de corrida poderia ter ficado ali.
00:41:47E embora fosse importante eventualmente corrigi-la,
00:41:49para evitar aquelas interrupções estranhas de cinco segundos uma vez por ano ou algo assim,
00:41:54não é na verdade a coisa que mais queremos aprender.
00:41:56O que mais queremos aprender é não escrever essa coisa.
00:41:59E nós nem sabemos o que essa coisa era.
00:42:01Então como não escrevemos ela.
00:42:03É por isso que eu acho que foi um RCA ruim.
00:42:05Faz sentido?
00:42:05Sim.
00:42:06Sim?
00:42:06Certo.
00:42:07Em que linguagem a maior parte da AWS é escrita, Adam?.
00:42:11Era Java.
00:42:12Eu ia dizer que alguém do chat disse Scala.
00:42:15Eles disseram que trabalharam na AWS por sete anos e disseram que a maior parte é escrita em Scala.
00:42:22Bom, isso é tecnicamente Java com passos extras.
00:42:26E isso vai irritar todos eles infinitamente.
00:42:29Então é basicamente isso para mim..
00:42:34Isso foi uma situação onde eu fiquei tipo,
00:42:36não sinto que vi a explicação.
00:42:37E eu realmente acho que é importante ouvir porque havia uma prática de programação ruim no fundo disso tudo.
00:42:42E eu quero saber o que era,
00:42:43especialmente porque ajuda pessoas como eu quando,
00:42:46sabe,
00:42:46eu não faço muito ensino de arquitetura agora,
00:42:48mas em algum momento eu provavelmente gostaria de fazer um pouco disso porque eu acho que há muita arquitetura ruim por aí.
00:42:54E então eu meio que tento prestar atenção nessas coisas.
00:42:56Tipo,
00:42:57quais são os tipos de erros arquiteturais que as pessoas estão cometendo?
00:43:00E aposto que esse era um deles.
00:43:02Certo.
00:43:02E então eu gostaria de saber.
00:43:03Eu gostaria de saber..
00:43:04Sim.
00:43:05Eu acho que o que eu esperaria é pelo menos um exemplo simples e reproduzível de por que eu explodiria,
00:43:10tipo um pequeno trecho de código.
00:43:12Então,
00:43:13e isso é algo que você mencionou antes,
00:43:15é meio que como abordamos esse tipo de coisa.
00:43:17Tipo,
00:43:18se eu estou revisando o código de alguém e vejo algo que parece estranho,
00:43:22eu sempre faço o meu melhor para criar meu próprio sandbox e comprovar minha teoria.
00:43:26E então mostro a eles o código tipo,
00:43:28é por isso que isso provavelmente está errado.
00:43:31Aqui está um passo simples e reproduzível.
00:43:33Então eu esperaria algo assim.
00:43:35E isso também me ajuda a realmente entender.
00:43:37Porque muitas pessoas,
00:43:38como você disse,
00:43:39veem algo que parece engraçado,
00:43:41mas não sabem por que parece engraçado,
00:43:43mas eu não posso parar por aí.
00:43:45Eu tenho que realmente construir e então entender.
00:43:47Então é isso que eu esperaria.
00:43:49E sabe,
00:43:50tipo,
00:43:50como eu disse,
00:43:51as interrupções do CrowdStrike e do Google,
00:43:53achei que foram melhores tipo apenas te dizendo que eram tipo,
00:43:57olha,
00:43:57foi um ponteiro nulo,
00:43:58desreferência aqui,
00:43:59ou foi um array fora dos limites porque achávamos que só ia ter 20 e colocamos 21 no arquivo de configuração.
00:44:05Certo.
00:44:06E tipo,
00:44:06ok,
00:44:07eu sei exatamente que tipo de código,
00:44:09você sabe,
00:44:09está causando esse tipo de problema.
00:44:11Certo.
00:44:12E além disso,
00:44:12além disso,
00:44:13para um comentário anterior,
00:44:14literalmente,
00:44:15até onde eu sei,
00:44:16todo mundo que programa em Rust só faz isso para que ocasionalmente quando veem algo assim,
00:44:21possam dizer,
00:44:22bem,
00:44:22se tivessem escrito em Rust,
00:44:24não teria acontecido.
00:44:25Eles não receberam informação suficiente para sequer fazer esse comentário..
00:44:29Eles provavelmente fizeram isso mesmo assim,
00:44:32para ser justo,
00:44:33mas não receberam a informação.
00:44:34Então você tem que dar uma regra que deveria ser seguida em RCAs é que você tem que dar aos Rustáceos informação suficiente para,
00:44:41se assim escolherem,
00:44:43dizerem corretamente que teria sido prevenido em Rust..
00:44:46E isso, nós não temos isso.
00:44:48Nós não sabemos se isso teria sido prevenido em Rust..
00:44:51Não temos ideia.
00:44:52Provavelmente não teria, mas não sabemos.
00:44:55Bem,
00:44:55Casey,
00:44:56nós temos uma boa chance porque é tipo,
00:44:59provavelmente nunca teria sido lançado.
00:45:01Então teria prevenido..
00:45:03Verdade.
00:45:03Teríamos zero atores porque estaríamos projetando atores definidos.
00:45:09Sim..
00:45:09A Cloudflare faz um trabalho realmente bom nisso também.
00:45:12Eles entram e mostram tipo muitas linhas de código e dizem tipo,
00:45:15isso é exatamente o que está acontecendo.
00:45:17Isso é,
00:45:18você sabe,
00:45:18embora o problema esteja aqui em cima,
00:45:20esta é a linha que explodiu devido a todas essas condições anteriores.
00:45:24Aquilo fui eu fazendo piada com Rust com o unwrap,
00:45:26que na verdade não era realmente o problema.
00:45:28Mas sabe, é tipo todas essas coisas meio que acontecem.
00:45:31Então eles, eles fazem um trabalho realmente bom.
00:45:34Estou surpreso com o quão ruim a AWS fez neste caso.
00:45:36Bem,
00:45:37e a outra coisa também,
00:45:38é que,
00:45:39foi uma daquelas coisas onde agora me faz,
00:45:41então me deixa desnecessariamente desconfiado de você,
00:45:43certo??
00:45:44Quando leio isso,
00:45:45fico tipo,
00:45:45você está escondendo alguma coisa?
00:45:47Você realmente não descobriu qual era o bug?
00:45:49Tipo,
00:45:49você falou tudo sobre essa condição de corrida,
00:45:51mas mesmo pela sua própria apresentação,
00:45:53dá pra perceber que a condição de corrida realmente não era importante.
00:45:56Era só,
00:45:57era só o que levou o registro a ser definido como nada,
00:45:59mas quem liga,
00:46:00certo?
00:46:00Tipo,
00:46:01isso é algo legal de colocar no RCA como uma explicação do por que esse bug ocorreu agora,
00:46:05ao invés de em outro momento,
00:46:06mas não é o bug.
00:46:07Então é estranho pra mim.
00:46:08Tipo,
00:46:09quando vejo um RCA que não fala sobre o bug,
00:46:11fico desconfiado.
00:46:11Certo.
00:46:12E desnecessariamente,
00:46:13porque se você realmente o encontrou,
00:46:15então só me diga,
00:46:15e agora eu sei que você o encontrou.
00:46:17Certo.
00:46:18Então é tipo,
00:46:18acho que também é um reforço de confiança para as pessoas que estão olhando de fora e querem saber,
00:46:23elas podem confiar nesse negócio de DynamoDB?
00:46:25Se parece que você realmente encontrou o bug,
00:46:27tenho um pouco mais de confiança em você.
00:46:29Se parece que você não tem ideia de qual era o bug,
00:46:31ou não parece entender qual era o bug,
00:46:33então eu fico,
00:46:33aí fico mais preocupado.
00:46:34E acho que essa é também outra razão para fazer isso no seu RCA..
00:46:37Isso, isso transmite confiança para seus clientes.
00:46:40Talvez seja por isso que eles demitiram o Adam como herói da AWS também..
00:46:43Talvez esteja tudo conectado.
00:46:44Pode ser.
00:46:45Eles não queriam que ele expusesse esses segredos sujos..
00:46:48É.
00:46:48Ele sabia demais.
00:46:49Ele sabia demais.
00:46:50Você poderia dar um,
00:46:52você poderia dar um resumo rápido de três minutos sobre a loja de guitarras?
00:46:56Tipo o que aquilo, o que aquilo estava revelando?
00:46:59Porque estou tentando lembrar o que era,
00:47:01porque envolvia tipo um cara de ponto único de falha que estava fora aqui durante essa falha também.
00:47:07Então não sei como reconciliar as duas coisas.
00:47:09E claro que não temos ideia.
00:47:11Não temos ideia se algum dos dois está nos dizendo a verdade agora,
00:47:15certo?
00:47:15Porque esse RCA foi tão ruim que não tenho ideia se está correto ou não,
00:47:20mas sim,
00:47:20a senha era wishbone 12,
00:47:21acho..
00:47:22Aí está.
00:47:22Sempre tentando me matar.
00:47:24Essa é a minha lembrança de qualquer forma..
00:47:26Então sim,
00:47:27aquela história era que,
00:47:28que havia o,
00:47:29havia uma coisa que foi projetada para copiar configurações.
00:47:33E aquela coisa tinha tipo saído do controle e não podia ser parada.
00:47:37Tipo,
00:47:38estava só tipo,
00:47:38estava só copiando configurações totalmente incorretamente e precisava ser tipo consertada ou reparada ou algo assim.
00:47:46E não temos mais informações porque foi uma conversa ouvida por acaso.
00:47:50Certo.
00:47:51E então isso se alinha com isso?
00:47:53Bom,
00:47:53um pouco,
00:47:54porque esses enactors realmente parecem o tipo de coisa que estaria executando uma cópia de configuração,
00:48:00mas por outro lado,
00:48:02não é realmente uma configuração para máquinas.
00:48:05É tipo uma entrada DNS é uma entrada DNS.
00:48:07Não é, não é realmente uma configuração.
00:48:10Então eu diria que as duas histórias não se alinham tão bem..
00:48:14E então essa é outra razão pela qual eu estava meio que esperando que esse RCA fosse um pouco mais acreditável porque eu queria saber com certeza que a história era falsa.
00:48:23E ainda não sei realmente baseado em quão ruim é esse RCA.
00:48:27E se,
00:48:27e se a ferramenta que o cara escreveu para copiar as configurações é literalmente apenas o enactor?
00:48:32Tipo eles simplesmente a colocaram em produção e ele,
00:48:35e tipo eles não a mudaram em sete anos.
00:48:37Foi assim que eu conectei os pontos.
00:48:39Havia,
00:48:40ele tipo,
00:48:40pessoal,
00:48:41eu escrevi isso como uma forma de eu testar coisas no meu ambiente local.
00:48:45E vocês simplesmente decidiram fazer três enactors e colocá-los um ao lado do outro em produção.
00:48:50Eu não, como isso aconteceu?
00:48:52Eu não sei..
00:48:53Tenho perguntas alternativas.
00:48:54É.
00:48:55Alternativamente, será que é o rollback?
00:48:57Porque é ele que fez a cópia tipo, ei, aqui está o anterior.
00:49:00Certo.
00:49:00E então vou copiar o anterior.
00:49:02Aí aparece esse problema de null.
00:49:04E tipo,
00:49:04o script nunca encontrou ou o conhecimento simplesmente sai do controle e começa a escrever sem parar,
00:49:09sem parar,
00:49:10sem parar,
00:49:10sem parar até o ponto em que você não consegue,
00:49:13não consegue fazer nada.
00:49:14Não sei.
00:49:15Tudo o que sei é que,
00:49:16pelo que posso deduzir da explicação deles,
00:49:18baseando-me apenas no que estavam fornecendo,
00:49:20ainda acho que a condição de corrida nem é relevante,
00:49:23porque de novo,
00:49:24literalmente uma atualização acidental no endpoint do Route 53 teria derrubado todos os três atores imediatamente.
00:49:30Porque segundo eles,
00:49:31tudo o que é necessário para pará-los é se o,
00:49:33se o endpoint apontar para um nome não resolvível,
00:49:35só isso basta.
00:49:36E se isso for realmente verdade,
00:49:38literalmente um erro de digitação de um operador poderia ter derrubado tudo isso,
00:49:42nenhuma condição de corrida necessária.
00:49:44Certo.
00:49:45E então de novo,
00:49:45a RCA simplesmente não faz um bom trabalho me convencendo de que você falou sobre qual foi o bug real,
00:49:51porque consigo pensar em tantas formas que você poderia ter acionado exatamente a mesma coisa que não envolvem essa condição de corrida sobre a qual você passou toda a RCA me dizendo que era o bug,
00:50:01mas não acho que seja.
00:50:02Então obrigado,
00:50:03Casey,
00:50:03por nos dar essa apresentação incrível.
00:50:05Estou genuinamente com uma inveja verde e furiosa desse instrumento de escrita que você tem.
00:50:10Preciso descobrir como configurar o que você tem.
00:50:13Essa coisa é fantástica..
00:50:15Obrigado a todos por assistirem.
00:50:16Eu,
00:50:17uh,
00:50:17para aqueles que pegaram ao vivo,
00:50:19espero que tenham curtido o bate-papo antes e provavelmente um pouco do bate-papo depois.
00:50:23Se quiserem ouvir a versão estendida e todas as interações divertidas que não fazem parte da história principal,
00:50:28vão lá no Spotify para o podcast completo,
00:50:30que é só a gente falando sobre,
00:50:32sei lá,
00:50:32o lixo que estamos comendo e lanches e tal,
00:50:34o nome é more yapping,
00:50:35more yapping again,
00:50:36e também Casey TJ and trash..
00:50:42Erros na minha tela, café no terminal e vivendo o sonho.

Key Takeaway

Casey Muratori argumenta que a queda da AWS não foi causada apenas por uma condição de corrida, mas por uma arquitetura de software frágil que falhou ao lidar com registros DNS inexistentes, resultando em um erro sistêmico que as explicações oficiais não detalharam suficientemente.

Highlights

Diferença entre entender profundamente um problema técnico versus apenas fingir conhecimento para parecer experiente.

Crítica à análise de causa raiz (RCA) da AWS sobre a queda do DynamoDB, considerada vaga e incompleta.

Explicação detalhada da arquitetura de 'Planejadores' e 'Executores' que gerenciam os registros DNS do DynamoDB.

Identificação de uma condição de corrida que levou à delegação de registros ativos, causando falha na resolução de nomes.

Discussão sobre como o mecanismo de 'rollback' e o tratamento inadequado de erros (exceções) contribuíram para a queda permanente.

Comparação com as falhas da CrowdStrike e Google, onde as explicações técnicas foram consideradas mais transparentes e educativas.

Timeline

Introdução e a Psicologia do Programador Júnior

O episódio começa com uma introdução descontraída sobre o status do podcast no Spotify antes de mergulhar no tema principal. Casey discute a pressão que programadores juniores sentem para fingir que entendem conceitos complexos, mesmo quando as explicações são confusas. Ele destaca que essa necessidade de parecer inteligente pode ser prejudicial a longo prazo na carreira de tecnologia. O palestrante enfatiza que, com a experiência, aprendeu a importância de perguntar e admitir quando não entende algo. Este segmento estabelece a base para a análise crítica que virá a seguir sobre a transparência técnica.

Causas Raízes e Comparações de Interrupções

Casey explica que agora prefere parecer 'burro' ao fazer perguntas básicas para garantir que compreendeu a raiz de um bug ou problema de performance. Ele menciona interrupções recentes de alto perfil, como as do Google e da CrowdStrike, para exemplificar o que considera boas explicações técnicas. No caso do Google, o problema foi um ponteiro nulo em um JSON vazio, enquanto a CrowdStrike teve um erro de estouro de array. Essas análises de causa raiz (RCAs) foram satisfatórias porque permitiram aos desenvolvedores entender exatamente onde o código falhou. O contexto aqui é a valorização da clareza técnica sobre a obscuridade corporativa.

A Estrutura de Endpoints e Árvores DNS do DynamoDB

A discussão se volta especificamente para a interrupção do DynamoDB, com a participação de Adam, um ex-Herói da AWS. Casey utiliza visuais para explicar como os endpoints de API da AWS funcionam como endereços de domínio que precisam ser resolvidos via DNS. Ele descreve a existência de uma 'árvore DNS' ou esquema de balanceamento de carga ponderado que direciona o tráfego para as máquinas corretas. O grupo brinca sobre como certas arquiteturas complexas, como essa árvore, podem ter servido apenas para promoções internas de engenheiros. Este trecho é crucial para entender a infraestrutura que falhou durante o incidente relatado.

O Ciclo de Planejamento e Execução da AWS

O processo de atualização das máquinas do DynamoDB é detalhado, envolvendo um 'Planejador' e três 'Executores' (enactors). O Planejador gera novos planos de balanceamento de carga constantemente, enquanto os Executores implementam esses planos no Route 53. Casey questiona a lógica de ter redundância apenas nos executores e não no planejador, apontando uma possível falha de design. Ele explica que os executores usam serialização e bloqueios (locks) atômicos no Route 53 para evitar conflitos durante as atualizações. Esta seção ilustra a complexidade do sistema de gerenciamento de configuração que estava em operação.

A Condição de Corrida e a Delegação de Registros

Casey detalha como um executor ficou preso tentando adquirir um bloqueio para um plano antigo (plano 110) enquanto outros já estavam no plano 145. Quando esse executor finalmente conseguiu o bloqueio e apontou a API para o plano obsoleto, um processo de limpeza deletou o registro por considerá-lo velho demais. O resultado foi um endpoint de API apontando para um nome DNS irresolvível, causando falha total para os usuários. Ele critica a explicação da AWS, afirmando que chamar isso de apenas uma 'condição de corrida' é simplista e ignora o problema real. O ponto central é que o sistema deveria ser capaz de se recuperar automaticamente dessa inconsistência.

O Bug Real: Rollback e Falha Crítica de Código

Nesta fase, Casey identifica o que acredita ser o verdadeiro bug: o mecanismo de 'rollback' que tentava salvar o estado anterior. Quando os executores tentavam atualizar para um novo plano, o código falhava ao tentar referenciar o plano antigo que havia sido deletado. Casey especula que o código, possivelmente escrito em uma linguagem que lança exceções como Java ou Scala, crashava completamente ao encontrar um registro nulo. Ele argumenta que um sistema robusto deveria simplesmente ignorar o erro de rollback e prosseguir com a atualização. A falta dessa informação no RCA oficial é o que mais irrita o analista, pois impede o aprendizado da comunidade.

Conclusão: Transparência e Confiança na Engenharia

O vídeo encerra com uma discussão sobre como a AWS poderia ter fornecido exemplos de código ou sandboxes para provar sua teoria de falha. Casey compara novamente a transparência da Cloudflare com a obscuridade da AWS neste caso específico. Ele afirma que um bom RCA deve transmitir confiança aos clientes, mostrando que a empresa realmente entendeu e corrigiu a falha arquitetural. O grupo conclui que práticas de programação seguras e tratamento correto de valores nulos teriam evitado o desastre global. Por fim, os participantes convidam os ouvintes para a versão estendida no Spotify, mantendo o tom informal do podcast.

Community Posts

View all posts