Golang API リクエストのパフォーマンスの向上

PHPz
リリース: 2024-08-20 18:38:07
オリジナル
575 人が閲覧しました

Improving Golang API request performance

プロジェクト

私は最近、暗号通貨交換アグリゲーターに取り組み始めました。基本的に、私はさまざまな取引所にリクエストを送信し、レートを比較します。これはできるだけ早く行う必要があります。この投稿では、パフォーマンスを大幅に向上させるために行った調整をいくつか紹介します。

ただし、私は (特に Go の) 専門家ではなく、私自身の個人プロジェクトから得た発見を共有しているだけであることに留意してください。

改善点

これらの改善点は、ランタイムの改善が最も大きかった順に記載されています。

1. ゴルーチンの使用

どの Go プログラムでも、速度を上げるためにゴルーチンは不可欠です。私が行った最大の効果は、リクエストを同時に送信したことです。 12 の異なる取引所にアクセスする必要があるため、これらのリクエストを同時に送信すると、ランタイムが約 24 秒からわずか約 3 秒に短縮されました。

Goroutine は素晴らしく、非常に使いやすいです。可能な限りそれらを含める必要があります。ただし、データ競合には常に注意してください

2. JSON ライブラリのアップグレード

encoding/json を github.com/json-iterator/go.jsoniter に置き換えました。これは、標準ライブラリのドロップイン置換として機能する高速 JSON 処理ライブラリであるため、コードを変更する必要はありませんでした。 、単なるライブラリのスイッチです。

ベンチマーク結果

パフォーマンスの向上を測定するために、encoding/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 ハンドラーを作成するのではなく、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 秒に短縮することができました。かなり確実に改善されました!

私のベンチマークのコードに興味がある場合は、ここから入手できます

この投稿を気に入っていただき、私の活動をサポートしたい場合は、ここから寄付していただけます。

以上がGolang API リクエストのパフォーマンスの向上の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!