«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Улучшение производительности запросов Golang API

Улучшение производительности запросов Golang API

Опубликовано 20 августа 2024 г.
Просматривать:806

Improving Golang API request performance

Проект

Недавно я начал работать над агрегатором обмена криптовалют. По сути, я рассылаю запросы на множество разных бирж и сравниваю курсы. Это нужно сделать как можно быстрее. В этом посте я покажу некоторые настройки, которые я внес, чтобы значительно повысить свою производительность.

Однако имейте в виду, что я не эксперт (особенно в области го) и просто делюсь результатами своего личного проекта.

Улучшения

Эти улучшения расположены в порядке наибольшего улучшения среды выполнения.

1. Использование горутин

В любой программе Go горутины необходимы для повышения скорости. Самым большим стимулом для меня стала одновременная отправка запросов. Поскольку мне нужно подключиться к 12 различным биржам, одновременная отправка этих запросов сократила время выполнения примерно с 24 секунд до всего ~3.

Горутины потрясающие и чрезвычайно простые в использовании. Вы должны включать их везде, где это возможно. Но всегда будьте осторожны с гонками данных

2. Обновление библиотеки JSON

Я заменил кодировку/json на github.com/json-iterator/go.jsoniter — это библиотека быстрой обработки JSON, которая работает как замена стандартной библиотеки, поэтому мне не пришлось менять какой-либо код , просто переключатель библиотеки.

Результаты сравнительного теста

Чтобы оценить улучшение производительности, я провел несколько тестов, сравнивая кодировку/json и jsoniter. Вот краткий обзор результатов:

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

Итак, jsoniter примерно в 6 раз быстрее стандартной библиотеки.

3. Повторное использование обработчиков HTTP

Я начал повторно использовать обработчики HTTP вместо того, чтобы создавать новые для каждого запроса. Настроив обработчик один раз и повторно используя его, я сократил затраты на создание новых обработчиков для каждого запроса.

Результаты сравнительного теста

Вот результаты тестов, сравнивающих повторно используемые обработчики с созданием новых обработчиков для каждого запроса:

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

Повторное использование обработчиков HTTP дало небольшой прирост производительности по сравнению с созданием нового обработчика для каждого запроса.

Заключение

Благодаря этим настройкам мне удалось сократить время, необходимое для сбора всей информации, с 24 секунд на начальном этапе до примерно 2 секунд. Довольно солидное улучшение!

Если вас интересует код моих тестов, он доступен здесь

Если вам понравился этот пост и вы хотите поддержать мою работу, вы можете сделать пожертвование здесь.

Заявление о выпуске Эта статья воспроизводится по адресу: https://dev.to/4rkal/improving-golang-api-request-performance-1ae4?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected], чтобы удалить его.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3