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.
Estas mejoras se presentan en orden de mayor mejora en el tiempo de ejecución.
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
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.
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.
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í.
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