Fernando Ike - https://hachyderm.io/@fernandoike
18.8K posts

Fernando Ike - https://hachyderm.io/@fernandoike
@fernandoike
This account is almost inactive. Go to mastodon. 😉 Helping people, systems, servers and bots to improve their performance Opinions here are my own








Mandei minha primeira submissão pra @rinhadebackend, com #dotnet 8. Dessa vez sem estar na correria, da última não tive tempo pra otimizar muito. O resultado, no meu i7 de 7 anos (estou enrolando pra comprar outra), consegui 25ms em 95p, e 75ms em 99p. Nada mal! O que eu fiz? Peguei a experiência da rinha anterior, e reutilizei algumas ideias. Por exemplo, estou fazendo pooling de objetos pra evitar GC. Usei várias diretivas de compilação para retirar tudo que não fosse usar, como logging, swagger, métricas etc. Mas esses itens foram bons durante o desenvolvimento, me ajudaram a encontrar os gargalos, principalmente as métricas. Usei .NET Native, e opções agressivas de trimming, pra tirar tudo que não fosse necessário, como símbolos e código de runtime que poderia atrasar ou demandar mais memória, como código de globalização. E resolvi experimentar o Envoy como proxy reverso. Não comparei com o Nginx, mas nos benchmarks que analisei ele era o que se saia melhor nestes cenários. Mas talvez tenha pontos para melhorar aí. No banco de dados eu fui bem agressivo. Estou usando connection multiplexing, o que percebi que faz muita diferença, principalmente na demanda de memória e processamento do Posgresql. Além disso, na operação de escrita estou usando uma function, o que permitiu simplificar muito o código .NET, e, nela, fazendo a operação de criação com em único statement, evitando fazer um select e depois um update, o que pode gerar inconsistências. E não precisei bloquear com transações, o que deixa tudo mais rápido e leve. No fim, tunei tudo. Fiz o dev todo no Windows, tunei nele, e depois ajustei novamente no Linux. E vou mandar outras. Quero fazer uma com Rust. Vou deixar os links no próximo tuite.



















