"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Mejora del rendimiento de las solicitudes de la API de Golang

Mejora del rendimiento de las solicitudes de la API de Golang

Publicado el 2024-08-20
Navegar:757

Improving Golang API request performance

el proyecto

Recientemente comencé a trabajar en un agregador de intercambio de criptomonedas. Básicamente envío solicitudes a varios intercambios diferentes y comparo tarifas. Esto debe hacerse lo más rápido posible. En esta publicación, mostraré algunos ajustes que hice para mejorar significativamente mi rendimiento.

Sin embargo, tenga en cuenta que no soy un experto (especialmente en go) y solo estoy compartiendo mis hallazgos de mi proyecto personal.

Mejoras

Estas mejoras se presentan en orden de mayor mejora en el tiempo de ejecución.

1. Usando gorutinas

En cualquier programa Go, las gorutinas son esenciales para la velocidad. El mayor impulso que logré fue enviar solicitudes al mismo tiempo. Como necesito realizar 12 intercambios diferentes, enviar estas solicitudes al mismo tiempo redujo mi tiempo de ejecución de aproximadamente 24 segundos a solo ~3.

Las gorutinas son increíbles y extremadamente fáciles de usar. Debes incluirlos siempre que sea posible. Pero ten siempre cuidado con las carreras de datos

2. Actualización de la biblioteca JSON

Cambié encoding/json por github.com/json-iterator/go.jsoniter es una biblioteca de procesamiento JSON rápido que funciona como reemplazo directo de la biblioteca estándar, por lo que no tuve que cambiar ningún código , solo un cambio de biblioteca.

Resultados comparativos

Para medir las mejoras de rendimiento, realicé algunos puntos de referencia comparando encoding/json y jsoniter. Aquí hay un resumen de los 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

Entonces, jsoniter es aproximadamente 6 veces más rápido que la biblioteca estándar.

3. Reutilización de controladores HTTP

Comencé a reutilizar controladores HTTP en lugar de crear nuevos para cada solicitud. Al configurar un controlador una vez y reutilizarlo, reduzco la sobrecarga de crear nuevos controladores para cada solicitud.

Resultados comparativos

Estos son los resultados de los puntos de referencia que comparan los controladores reutilizados con la creación de nuevos controladores para cada solicitud:

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

La reutilización de controladores HTTP aumentó ligeramente el rendimiento en comparación con la creación de un nuevo controlador para cada solicitud.

Conclusión

Con estos ajustes logré reducir el tiempo que me llevó recopilar toda la información de 24 segundos inicialmente a aproximadamente 2 segundos. ¡Mejora bastante sólida!

Si está interesado en el código de mis pruebas comparativas, está disponible aquí

Si te ha gustado esta publicación y quieres apoyar mi trabajo, puedes donar aquí.

Declaración de liberación Este artículo se reproduce en: https://dev.to/4rkal/improving-golang-api-request-performance-1ae4?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3