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.