OutOfMemory, Arquitetura Celular, Trilhões de Volume no Discord, Modelos de Maturidade, Karpenter e várias coisas mais
Tamo ai colocando mais leitura no teu backlog sem nem avisar. Pra parar de moscar.
Chegamos com mais uma curadoria dos melhores atigos que cairam nos meus feeds nas ultimas semanas. Acho que vou manter uma frequencia menor das newsletters. Além de não ficar corrido pra caralho, acho que consigo trazer coisinhas mais dahorinhas pra sua caixa de e-mail dessa forma. Só o fino do fino. Vamos testando.
Bom, vamos lá:
Como o Discord guarda TRILHÕES de mensagens?
Um caso curioso de System Design utilizando ScyllaDB. O Discord em 2017 era talvez um dos big cases de Apache Cassandra, com impressionantes 12 nodes e bilhões de mensagens. Mas em 2022 com o boom da plataforma, muitas hot partitions e latência pra cacete ocasionaram a migração para o ScyllaDB, também compatível com as API's do Cassandra. Achei massa compartilhar.
Leia o Artigo: How Discord Stores Trillions of Messages — Curious Case of System Design
Entendendo o Exit Code 137, terror do Javinha Cloud Native
Está pra nascer algo tão díficil e volátil do que trabalhar com JVM's em ambientes cloud native, ainda mais quando qualquer coisa pode escalonar em um memory leak matador e causar vários transtornos em escala.
Não me entendam mal, eu gosto muito da stack moderna de Java, e ela paga minhas contas por alguns bons anos, mas a sensação de estar resolvendo todo dia o mesmo problema usando cores e adesivos diferentes é um pouco perturbadora.
Um desses problemas é a gestão de memória e CPU, onde muitas vezes os isolamentos e throtllings, que são recursos que deveriam ajudar a aplicação a escalar e performar na sua melhor forma e segurança, se tornam fatores inviabilizantes do workload.
Esse artigo da Moss, mostra uma explicação muito clara sobre talvez o problema mais recorrente desses moldes que citei: reboots constantes e inexplicáveis, consumo alto de memória e o tão famoso OOMKilled, ou Exit Code 137.
No Kubernetes, os recursos como CPU, memória e disco são gerenciados através de Cgroups do Linux. Quando um pod excede seu limite de memória, ele é terminado, resultando no código de saída 137. A equipe percebeu que o uso de memória dos pods aumentava gradualmente, mas não conseguia identificar onde a memória estava sendo consumida.
Eles descobriram que a memória nativa do Java não é limitada pelas configurações de memória Java padrão. Usando a ferramenta Java Native Memory Tracker (JNMT), eles descobriram que o aumento da memória estava relacionado ao uso interno, provavelmente devido a um agente de monitoramento Java. Após atualizar o agente de monitoramento e implementar medidas de monitoramento de uso de memória mais eficazes, a equipe conseguiu resolver o problema e evitar reinícios inesperados de pods.
É um guia muito bacana de troubleshooting, estratégias e tooling para trabalhar nesses casos.
Leia o Artigo da Moss Finance sobre o Exit Code 137
Guia do System Design 2023 para Entrevistas
Achei um guia sensacional sobre System Design publicado pelo Erin Schaffer no Educative onde ele aponta de forma muita organizada, os principais tópicos para estudar System Design com os critérios dele em 2023.
System Design é uma disciplina que eu tinha o hábito de exercitar por mim mesmo, não necessariamente para entrevistas, é uma dinâmica legal de pensar em um problema aleatório e tentar resolver arquiteturalmente, pra saber o que usar, onde usar e quando usar algum conceito, tecnologia e afins, e principalmente saber como cada um desses componentes e possibilidades funciona.
É humanamente impossível realizar descrições tão aprofundadas de tudo que ele colocou lá, mas o guia serve como um apontador de portas, se tu quiser abrir e ir mais a fundo algum deles, só vai bebê. Tá facinho.
Leia o artigo “The complete guide to System Design in 2023”
Uso de Containers para Arquiteturas Celulares
Aqui vou deixar 2 artigos, ambos da AWS, sobre arquitetura celular. Um deles com um viés mais cientítico e conceitual, publicado na Amazon Science e outro com viés arquitetural de uma série chamada “Journey to Cloud-Native Architecture Series”.
Arquietura celular é um tipo de design muito maneiro de se pensar sobre, embora seja caro, complexo e dificil manutenção, pra gente que gosta de nerdolagem é bacana poder meter a mão e estudar esse tipo de proposta.
O primeiro artigo mostra apresenta o conceito de “Physalia", também conhecida como “Caravela-Portuguesa”, que no seu conceito é um “Hidrozoário colonial flutuante, constituído por vários organismos diferentes e especializados, designados pólipos”. Basicamente um um organismo unico que é composto por vários outros organismos independentes que compõe o todo. Meio fumado, eu sei…
Mas esse conceito permeia inspirando e sendo inspirado por outros produtos criados pela propria AWS como o Elastic Block Storage (EBS), DynamoDB e o CosmosDB da Microsoft.
O Segundo artigo é uma proposta arquitetural mais paupável, com uma proposta de sharding celular com AZ's isoladas em cada celula. Esse tipo de arquitetura é bem bacana para lidar com cisnes negros em larga escala, porém, tende a ficar caro pra c@#$$Lh0.
Leia o Artigo: Millions of Tiny Databases
Leia o Artigo: Using Containers and Cell-based design for higher resiliency and efficiency
Platform Engineering - Maturity Model
A CNCF lancou um whitepaper sobre “Modelos de Maturidade” para as empresas que aplicam Platform Engineering na cadeia de seus produtos.
Como todo processo de adoção de qualquer coisa, as curvas de aprendizado, evangelização são sempre desafiadoras, cansativas e onerosas de diversas formas quando olhamos o esforço, então o guia foi desenhado de maneira progressiva, para ajudar os times a identificarem onde estão e quais serão os proximos passos que podem fazer sentido nos que diz respeito a pessoas, processos, políticas e tecnologias.
Veja o Whitepaper sobre Maturity Levels de Platform Engineering
Boilerplate de EKS atualizado pra versão 1.28
Falando um pouquinho de Jabá agora, esses dias aproveitei uns segundinhos de paz pra fazer upgrade do meu blueprint de “EKS With Istio” para a versão 1.28 do Kubernetes. Já estão com os Addons atualizados e ainda incluimos os exemplos de implmentação do Node Termination Handler e do Karpenter.
Só isso mesmo, tenha um ótimo dia kkkkkkkk.
Veja o Repositório do eks-with-istio e deixe sua estrelinha
Conceitos de Concorrência e Multithreading para entrevistas
Imagem pouquíssimo bizarra gerada pelo DALL-E.
Ainda falando de coisinhas pra ter fresca na cabeça pra entrevistas técnicas, esse artigo detalha muito bem os conceitos de concorrência e multithread de forma bem didática.
Eu gosto de usar exemplos lúdicos para explicar conceitos de computação, me ajuda a firmar melhor trazendo pro mundo real coisas do meu trabalho no cyber espaço da rede mundial de computadores.
Eu gosto de pensar em Concorrência e Multithreading dessa forma:
Multithreading: Imagine que você está num churrasco e é responsável pela churrasqueira. Multithreading seria se você tivesse vários espetos ou grelhas na brasa, uma com picanha, outra com franguinho, outra com linguiça. Cada uma das grelhas (“threads”) funciona de forma independente, assando carne ao mesmo tempo.
Concurrency: Imagine que além da churrasqueira, você precisa preparar caipirinha, gelar a cerveja, fazer o vinagrete, cortas as carnes, gerenciar espaço da geladeira e etc. Você da as costas pra churrasqueira, vê o gelo do cooler, depois faz uma capirinha, depois vai colocar a playlist de Chitãozinho e Xororó Só as Melhores pra tocar. É como se você tivesse gereciando várias partes do churrasco mudando de uma tarefa pra outra conforme o necessário.
Mas enfim, recomendo a leitura do artigo em si pois a pessoa é mais séria que eu pra explicar as coisas.
Leia o Artigo: Multithreading and Concurrency Concepts I Wish I Knew Before the Interview
Top 100 Perguntas de Kubernetes para Entrevistas
Usei esse artigo aqui pra treinar o inglês durante a semana. Foi bem bacana.
Esse artigo publicado pelo Bijit Ghosh reune um compilado de perguntas e respostas conceituais sobre Kubernetes para te entrevistas técnicas. Eu acho chatão processos seletivos que te fazem sentir no SARESP do ensino fundamental, mas infelizmente elas acontecem com muita frequencia. Ter esses conceitos na ponta da lingua podem ser um baita game chance. Caso não esteja procurando entrevistas no momento, ter essas definições na ponta da lingua pode ser um grande aliado nos estudos e entendimento do ecossistema também.
Vou deixar esse trabalho maneiro aqui pra você criar seus flashcards de decoreba do kubernetico.
Leia o Artigo: Top 100 Kubernetes Interview Questions and Answer
O que muda no Karpenter a partir das versões 0.32.x?
O Karpenter finalmente está se preparando para sua versão 1.0. Nem parece que essa bagaça já está rodando nos clusters mais críticos do Brasil bem pra caralho e ainda tá em teste kkkkkkkkkk.
Pra quem já testou bastante o Karpenter, saiba que algumas coisinhas vão mudar pra quando o mesmo for promovido para a v1beta1, como por exemplo o Provisioner agora será renomeado para NodePool e o AWSNodeTemplate is the new EC2NodeClass.
Meu amigo Edson Ferreira, famoso @tuxpilgrim fez um compilado das principais mudanças que vão ocorrer, já dando exemplos do que vai ser alterado. Maluco é muito eficiente, puta que pariu…
Leia o Artigo: O que muda no Karpenter a partir das versões 0.32.x?
No Geral galera, é isso ai! Não se esqueçam de compartilhar essa newsletterzinha aqui que nasceu com o objetivo de entreter meus amigos e eu novamente perdi totalmente o controle.
Me sigam no Twitter e fiquem de olho que já já estarei lançamento meu blog pessoal bem longe do Medium. #NoMorePaywalls.
valeu pelo conteúdo, quanto ao blog, https://dev.to/t/braziliandevs é daora como tapa buraco, tem uma comunidade br legal :)
Costumo pegar pelo menos alguns likes, o que nao acontecia no medium