"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Melhorando o desempenho da solicitação da API Golang

Melhorando o desempenho da solicitação da API Golang

Publicado em 2024-08-20
Navegar:406

Improving Golang API request performance

O projeto

Recentemente comecei a trabalhar em um agregador de exchanges de criptomoedas. Basicamente, envio solicitações para várias exchanges diferentes e comparo taxas. Isto tem que ser feito o mais rápido possível. Neste post, vou mostrar alguns ajustes que fiz para melhorar significativamente meu desempenho.

No entanto, tenha em mente que não sou um especialista (especialmente em Go) e estou apenas compartilhando minhas descobertas de meu próprio projeto pessoal.

Melhorias

Essas melhorias vêm na ordem de maior melhoria no tempo de execução.

1. Usando goroutines

Em qualquer programa Go, goroutines são essenciais para velocidade. O maior impulso que consegui foi enviar solicitações simultaneamente. Como preciso acessar 12 exchanges diferentes, enviar essas solicitações ao mesmo tempo reduziu meu tempo de execução de cerca de 24 segundos para apenas aproximadamente 3.

Goroutines são incríveis e extremamente fáceis de usar. Você deve incluí-los sempre que possível. Mas sempre tome cuidado com as corridas de dados

2. Atualizando a biblioteca JSON

Troquei encoding/json por github.com/json-iterator/go.jsoniter é uma biblioteca de processamento JSON rápido que funciona como um substituto imediato para a biblioteca padrão, então não precisei alterar nenhum código , apenas uma troca de biblioteca.

Resultados de referência

Para medir as melhorias de desempenho, executei alguns benchmarks comparando encoding/json e jsoniter. Aqui está um resumo dos resultados:

goos: linux
goarch: amd64
pkg: apiSpeedImprove
cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics      
BenchmarkEncodingJSON-12 140383 7381 ns/op
BenchmarkJSONIter-12 974605 1217 ns/op
PASS
ok apiSpeedImprove 3.216s

Portanto, jsoniter é cerca de 6 vezes mais rápido que a biblioteca padrão.

3. Reutilizando manipuladores HTTP

Comecei a reutilizar manipuladores HTTP em vez de criar novos para cada solicitação. Ao configurar um manipulador uma vez e reutilizá-lo, reduzi a sobrecarga de criar novos manipuladores para cada solicitação.

Resultados de referência

Aqui estão os resultados dos benchmarks comparando manipuladores reutilizados versus a criação de novos manipuladores para cada solicitação:

goos: linux
goarch: amd64
pkg: apiSpeedImprove/httpReuse
cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics      
BenchmarkReusedHandler-12 2179 505189 ns/op
BenchmarkNewHandlerPerRequest-12 2341 507525 ns/op
PASS
ok apiSpeedImprove/httpReuse 7.270s

A reutilização de manipuladores HTTP proporcionou um ligeiro aumento de desempenho em comparação com a criação de um novo manipulador para cada solicitação.

Conclusão

Com esses ajustes consegui reduzir o tempo necessário para reunir todas as informações de 24 segundos inicialmente para cerca de 2 segundos. Melhoria bastante sólida!

Se você estiver interessado no código dos meus benchmarks, ele está disponível aqui

Se você gostou deste post e quer apoiar meu trabalho, você pode doar aqui.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/4rkal/improving-golang-api-request-performance-1ae4?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3