"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > गोलांग एपीआई अनुरोध प्रदर्शन में सुधार

गोलांग एपीआई अनुरोध प्रदर्शन में सुधार

2024-08-20 को प्रकाशित
ब्राउज़ करें:923

Improving Golang API request performance

परियोजना

मैंने हाल ही में एक क्रिप्टोकरेंसी एक्सचेंज एग्रीगेटर पर काम करना शुरू किया है। मूलतः मैं विभिन्न एक्सचेंजों को अनुरोध भेजता हूं और दरों की तुलना करता हूं। इसे यथासंभव शीघ्र बनाना होगा। इस पोस्ट में, मैं कुछ बदलाव दिखाऊंगा जो मैंने अपने प्रदर्शन को उल्लेखनीय रूप से बढ़ाने के लिए किए हैं।

हालांकि ध्यान रखें कि मैं कोई विशेषज्ञ नहीं हूं (विशेषकर गो में) और मैं सिर्फ अपने निजी प्रोजेक्ट से अपने निष्कर्ष साझा कर रहा हूं।

सुधार

ये सुधार रनटाइम के सबसे बड़े सुधार के क्रम में आते हैं।

1. गोरोइन्स का उपयोग करना

किसी भी गो प्रोग्राम में, गति के लिए गोरोइन आवश्यक हैं। मैंने सबसे बड़ा प्रोत्साहन समवर्ती अनुरोध भेजकर किया। चूँकि मुझे 12 अलग-अलग एक्सचेंजों को हिट करने की आवश्यकता है, इन अनुरोधों को एक ही समय में भेजने से मेरा रनटाइम लगभग 24 सेकंड से घटकर केवल ~3 रह गया।

गोरूटीन्स अद्भुत और उपयोग में बेहद आसान हैं। जहां भी संभव हो आपको उन्हें शामिल करना चाहिए। लेकिन डेटा रेस से हमेशा सावधान रहें

2. JSON लाइब्रेरी का उन्नयन

मैंने encoding/json को github.com/json-iterator/go.jsoniter से बदल दिया है, यह एक तेज़ JSON प्रोसेसिंग लाइब्रेरी है जो मानक लाइब्रेरी के लिए ड्रॉप-इन प्रतिस्थापन के रूप में काम करती है, इसलिए मुझे कोई कोड नहीं बदलना पड़ा , बस एक लाइब्रेरी स्विच।

बेंचमार्क परिणाम

प्रदर्शन सुधारों को मापने के लिए, मैंने एन्कोडिंग/जेसन और जेसोनिटर की तुलना करते हुए कुछ बेंचमार्क चलाए। यहां परिणामों का सारांश दिया गया है:

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