-
Antirez (Salvatore Sanfilippo)
30/10/2014 12:28
O post do blog da Stripe sobre Redis revela que o uso do fork() pode causar picos de latência, especialmente em instâncias EC2 com Xen, que não é exatamente conhecido por sua velocidade. Quando a latência atinge até um segundo durante o fork, isso pode resultar em amostras com latência elevada, impactando o 99º percentil. A diferença crucial aqui é que nem todos os usuários sentirão essa latência, apenas aqueles que coincidirem com o momento do fork. Para quem trabalha com aplicativos sensíveis à latência, isso merece atenção para evitar surpresas desagradáveis.
-
Antirez (Salvatore Sanfilippo)
29/10/2014 08:17
Recentemente, os engenheiros do Stripe falaram sobre como a nova replicação sem disco do Redis pode mudar as regras do jogo. Agora, com a persistência opcional, é bacana ver a mudança na arquitetura que eles estão fazendo para atender melhor casos de uso. Além disso, a migração para PostgreSQL sublinha que às vezes um banco de dados relacional é mais adequado do que uma solução em memória, especialmente quando se mede a latência. Como @aphyr comentou, a replicação síncrona do Postgres parece ter um desempenho superior, mesmo que o Twitter esteja transbordando de opiniões intensas sobre métricas de latência.
-
Antirez (Salvatore Sanfilippo)
27/10/2014 15:34
Replicação sem disco no Redis parece uma ideia simples, mas como qualquer dev sabe, o diabo está nos detalhes. A proposta surge para resolver o problema de performance na sincronização entre master e slaves, especialmente para aqueles que não querem perder tempo com disco. "Replicação forçava usuários a usar disco, mesmo sem precisar de durabilidade" é um lembrete de que, às vezes, a tecnologia complica o que deveria ser simples. Que comece a corrida para implementar essa funcionalidade com um pouco mais de eficiência... e menos I/O desnecessário.
-
Dan Luu
18/10/2014 22:00
A promessa dos intrinsics ainda parece mais uma miragem no deserto do que um atalho para a eficiência. O texto fala que, apesar das melhorias, usar intrinsics exige tanto trabalho que muitas vezes é mais fácil acionar a velha e boa assembly manual. Se a vida de um dev já é complicada, por que adicionar mais uma camada de complexidade? Ninguém tem tempo para ficar conferindo resultados em diferentes plataformas. No fim, parece que os intrinsics ainda não são a solução mágica que prometem ser.
-
Esse texto crítico sobre o modelo de colheita e rendimento de Fox e Brewer parece mais um reencontro com aqueles amigos que você evita, mas acaba vendo na festa. O autor faz um bom ponto ao afirmar que a apresentação do teorema CAP pode levar a confusões, mas ao mesmo tempo critica a falta de formalização do PACELC, o que é um ponto legítimo. E quando coloca que "CA sem P" pode ser interpretado de maneiras problemáticas, é a verdadeira essência de quando seu aplicativo não se comporta como esperado e você fica se perguntando se não deveria ter lido a documentação antes. No fim das contas, esses trade-offs são complexos, e há bons e maus argumentos de ambos os lados.
-
Barbara Liskov é um verdadeiro ícone da computação, e seu legado é impossível de ignorar. Seu princípio da substituição, o famoso L em SOLID, é a Bíblia dos desenvolvedores que trabalham com herança. O artigo sobre Viewstamped Replication é um prato cheio para quem gosta de sistemas distribuídos, mostrando que Liskov sabia o que estava fazendo antes mesmo de Paxos entrar na conversa. Ler seus trabalhos não é só uma aula de história, mas um lembrete de que a profundidade da ciência da computação pode ser acessível e impactante.
-
Antirez (Salvatore Sanfilippo)
14/07/2014 06:53
Filas são como aquele amigo que promete cozinhar mas deixa a comida no micro-ondas. Elas separam a tarefa de agendar e executar operações, o que é fundamental em aplicações web. Como mencionado, um "produtor" insere uma tarefa na fila e um "consumidor" a executa. Prefira sempre a entrega "pelo menos uma vez" — é melhor lidar com tarefas repetidas do que perder uma completamente no processo, tipo quando seu código compila mas não roda. E quem não conhece o drama de re-encaminhar e-mails por causa de falhas de rede?
-
O iostat pode ser uma ferramenta útil, mas como bem alertado, o campo svctm é "fundamentalmente quebrado" e pode enganar até o dev mais esperto. Esse número que deveria representar o tempo médio de operação é, na verdade, um grande mistério em sistemas modernos com SSDs. É como olhar para um log do servidor e achar que entendeu tudo, mas na verdade está só olhando para o GIF errado. Portanto, cuidado ao usar essas métricas sem uma compreensão adequada; o iostat pode não ser o oráculo que você pensava.
-
Drew DeVault
28/06/2014 00:00
O autor realmente não está puxando a sardinha para o seu lado. O módulo datetime do Python, apesar de amparar o básico, é como um código legado que você herda em um projeto: cheio de gambiarras e difícil de trabalhar. Comparando com C#, enquanto você facilmente obtém 'TotalHours' ou 'AddMonths()', no Python é uma verdadeira busca pelo tesouro para fazer simples operações com datas. E tem mais: a questão da localidade e os problemas no Windows adicionam mais confusão. O Python pode ser o queridinho dos devs, mas essa parte do datetime é um bug no sistema que precisa urgente de um patch.
-
Drew DeVault
27/06/2014 21:00
Parece que o datetime do Python realmente deixou a desejar. O autor menciona que 'é ridículo como é ruim', e isso pode gerar várias dores de cabeça para quem precisa fazer cálculos de data de maneira mais avançada. Comparando com C#, fica claro que a sintaxe e a funcionalidade do Python são um pouco como tentar programar no MS-DOS: não é que não funcione, mas você vai dar a volta para conseguir chegar onde quer. Se o datetime fosse um jogo de luta, Python estaria com um controle quebrado enquanto C# faz combos de forma fluida.
-
Andrew Kelley (criador do Zig)
12/06/2014 20:25
O Bonobo Extreme definitivamente não é um ultrabook para quem procura leveza. O review destaca que ele é "um monstro" e isso se estende não só às suas especificações, mas também ao design robusto e à performance que faz qualquer jogo renderizar que nem a execução de make -j8 em um server. Porém, o autor também se depara com um pesadelo de dead pixels e problemas de hardware que são dignos de uma sitcom sobre tecnologia. Se você é o tipo de dev que precisa de força bruta, talvez tenha que levar um pouco de frustração junto.
-
Drew DeVault
06/06/2014 21:00
O autor começa com uma autocrítica interessante, admitindo que não é designer de linguagens, mas ainda assim revela um ponto válido sobre o tratamento de erros em Go. Como ele menciona, a abordagem de "result, err := SomethingThatMightGoWrong()" pode gerar uma poluição visual desnecessária no código, tornando-o menos legível. Quando você precisa repetir "if err != nil" em cada canto, a estrutura do seu programa acaba parecendo um labirinto sem mapa. Seria interessante ver como Go poderia abordar isso de uma maneira menos verbosa, talvez aprendendo um pouco com as estruturas mais elegantes do assembly que ele menciona.
-
Dan Luu
05/04/2014 21:00
É curioso como sempre estamos com um bug em mente, parece até uma marca registrada do software. O autor destaca que "um terço dos bugs poderia ser encontrado automaticamente usando analytics". Olhando para as práticas em hardware, onde a análise de desempenho é comum, fica claro que seguimos um caminho mais difícil no software. Incorporar esses métodos poderia transformar a forma como lidamos com erros, mas, por enquanto, ainda estamos presos em um ciclo de testes eternos que muitas vezes resultam em nada.
-
Antirez (Salvatore Sanfilippo)
01/04/2014 05:16
O HyperLogLog é uma adição interessante ao Redis, especialmente para quem já ficou desesperado tentando contar IPs únicos sem estourar a memória. O fato de usar apenas 12kbytes por chave e oferecer uma margem de erro padrão de 0.81% é como achar um bug na sua aplicação e resolver com um simples 'reinicie e veja no que dá'. É um bom lembrete de como algoritmos de randomização podem fazer mágica com pouco espaço, e parece que a equipe do Redis realmente acertou a mão nessa.
-
Dan Luu
22/03/2014 21:00
Editar binários pode parecer o equivalente a um Jedi utilizando o lado sombrio da força, mas, em alguns casos, é a única saída. O autor ressalta que, enquanto alguns veem o uso de editores hexadecimais como algo fora da sanidade, outros percebem que editar o código binário é uma solução prática e rápida, especialmente quando bugs de software fechado aparecem. O exemplo do DevOps que poderia ter salvado horas simplesmente ajustando o número da versão é um lembrete de que, às vezes, o caminho mais simples é o que poupa mais trabalho. No final das contas, em tecnologia, a flexibilidade e a criatividade são tão vitais quanto dominar as ferramentas do seu arsenal.
-
Antirez (Salvatore Sanfilippo)
13/03/2014 19:32
A reflexão sobre a beleza de códigos minimalistas é algo que todo dev já viveu, mesmo que em um cantinho da mente. "O que o programa faz é far mais interessante do que o que ele não faz" é quase uma mantra nos dias de hoje, onde complexidade parece ser a regra. Já escrevi códigos mais curtos do que a sinopse de um filme da Marvel, e a satisfação é real. Ao mesmo tempo, é um lembrete de que, apesar da pirâmide de complexidade em software, ainda podemos buscar aquela simplicidade quase poética, bem como os grandes mestres da programação faziam no tempo em que cada byte contava.
-
O artigo do Mars Code traz um olhar interessante sobre práticas de engenharia de software que sustentaram a missão do Mars Science Laboratory. A parte sobre o algoritmo Snark é especialmente intrigante, já que, apesar de sua apresentação impecável, ele se revela "fundamentalmente quebrado". O que nos lembra que, por mais que um artigo venha de um grande nome, a confiança não deve ser cega. Afinal, mesmo estrelas como Guy Steele podem deixar um bug escapar na execução de um algoritmo não-bloqueante. Chord segue o mesmo caminho de veneração e eventual decepção, mostrando que a pesquisa em algoritmos é tão desafiadora quanto um nível avançado de Tetris.
-
Dan Luu
04/03/2014 21:00
Em 1983, a equipe da Universidade de Wisconsin revelou que o desempenho do Oracle era, digamos, meio "Nokias de 2000" em comparação com outros sistemas. Com tempos de execução que passavam de 300, Larry Ellison não ficou nada feliz e até tentou demitir David DeWitt. É curioso ver como a competitividade no mundo dos bancos de dados chegava a esse ponto, mas a verdade é que os benchmarks às vezes podem ser mais reveladores do que os marketings chamativos das empresas.
-
Antirez (Salvatore Sanfilippo)
28/02/2014 10:30
Discutir desempenho pode parecer papo de nerd, mas é crucial entender que ele não é sinônimo de escalabilidade. O post começa bem ao decompor o desempenho em três partes: latência, operações por segundo e qualidade das operações. O autor destaca que uma operação simples, mas ineficiente, pode parecer boa até a hora de encarar um problema real. No final das contas, desempenho é um conceito mais complexo do que a maioria dos devs imagina, e vale a pena investir tempo para entender sua essência, especialmente em sistemas de banco de dados.
-
Antirez (Salvatore Sanfilippo)
21/02/2014 08:40
Esse algoritmo pode parecer trivial, mas a simplicidade é uma virtude no mundo da programação distribuída. A ideia de manter informações idempotentes, que não dependem de estados anteriores, pode salvar muitos desenvolvedores de dores de cabeça em projetos complexos. Com a capacidade de propagação em pacotes pequenos, ele é como a versão tech de um pacote de batatas fritas: rápido e fácil de consumir, mas ainda satisfatório. A relação com o Raft vai além do nome; o que importa é a eficiência em cenários reais.