Rumah >pembangunan bahagian belakang >Golang >Meningkatkan prestasi permintaan API Golang

Meningkatkan prestasi permintaan API Golang

PHPz
PHPzasal
2024-08-20 18:38:07598semak imbas

Improving Golang API request performance

Projek itu

Baru-baru ini saya mula mengusahakan agregator pertukaran mata wang kripto. Pada asasnya saya menghantar permintaan kepada sekumpulan pertukaran yang berbeza dan membandingkan kadar. Ini perlu dibuat secepat mungkin. Dalam siaran ini, saya akan menunjukkan beberapa tweak yang saya buat untuk meningkatkan prestasi saya dengan ketara.

Namun perlu diingat bahawa saya bukan pakar (terutamanya dalam perjalanan) dan saya hanya berkongsi penemuan saya daripada projek peribadi saya sendiri.

Penambahbaikan

Peningkatan ini datang dalam urutan peningkatan terbesar masa jalan.

1. Menggunakan goroutine

Dalam mana-mana program Go, goroutine adalah penting untuk kelajuan. Rangsangan terbesar yang saya buat adalah dengan menghantar permintaan secara serentak. Memandangkan saya perlu mendapatkan 12 pertukaran yang berbeza, menghantar permintaan ini pada masa yang sama mengurangkan masa jalan saya daripada sekitar 24 saat kepada hanya ~3.

Gorutin sangat mengagumkan dan sangat mudah digunakan. Anda harus memasukkannya di mana mungkin. Tetapi sentiasa berhati-hati dengan Data Races

2. Menaik taraf Pustaka JSON

Saya menukar pengekodan/json untuk github.com/json-iterator/go.jsoniter ialah perpustakaan pemprosesan JSON pantas yang berfungsi sebagai pengganti drop-in untuk perpustakaan standard, jadi saya tidak perlu menukar sebarang kod , hanya suis perpustakaan.

Keputusan Penanda Aras

Untuk mengukur peningkatan prestasi, saya menjalankan beberapa penanda aras membandingkan pengekodan/json dan jsoniter. Berikut ialah ringkasan keputusan:

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

Jadi, jsoniter adalah kira-kira 6 kali lebih pantas daripada perpustakaan standard.

3. Menggunakan Semula Pengendali HTTP

Saya mula menggunakan semula pengendali HTTP dan bukannya membuat yang baharu untuk setiap permintaan. Dengan menyediakan pengendali sekali dan menggunakannya semula, saya mengurangkan kos pengeluaran untuk membuat pengendali baharu untuk setiap permintaan.

Keputusan Penanda Aras

Berikut ialah hasil penanda aras yang membandingkan pengendali yang digunakan semula berbanding membuat pengendali baharu untuk setiap permintaan:

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

Menggunakan semula pengendali HTTP memberikan sedikit peningkatan prestasi berbanding dengan membuat pengendali baharu untuk setiap permintaan.

Kesimpulan

Dengan tweak ini saya berjaya mengurangkan masa yang diambil untuk mengumpulkan semua maklumat daripada 24 saat pada mulanya kepada kira-kira 2 saat. Peningkatan yang cukup mantap!

Jika anda berminat dengan kod untuk penanda aras saya, ia boleh didapati di sini

Jika anda menyukai siaran ini dan ingin menyokong kerja saya, anda boleh menderma di sini.

Atas ialah kandungan terperinci Meningkatkan prestasi permintaan API Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn