Catch up on everthing we announced at this year's Firebase Summit. Learn more

नेटवर्किंग का अनुकूलन

क्लाउड फ़ंक्शंस की सादगी आपको कोड को जल्दी से विकसित करने और सर्वर रहित वातावरण में चलाने देती है। मध्यम स्तर पर, कार्यों को चलाने की लागत कम होती है, और आपके कोड को अनुकूलित करना उच्च प्राथमिकता की तरह नहीं लग सकता है। हालाँकि, जैसे-जैसे आपका परिनियोजन बढ़ता है, वैसे-वैसे आपके कोड को अनुकूलित करना अधिक महत्वपूर्ण होता जाता है।

यह दस्तावेज़ बताता है कि आपके कार्यों के लिए नेटवर्किंग को कैसे अनुकूलित किया जाए। नेटवर्किंग के अनुकूलन के कुछ लाभ इस प्रकार हैं:

  • प्रत्येक फ़ंक्शन कॉल पर नए कनेक्शन स्थापित करने में खर्च किए गए CPU समय को कम करें।
  • कनेक्शन या DNS से बाहर चल रहा है की संभावना को कम कोटा

लगातार कनेक्शन बनाए रखना

यह खंड उदाहरण देता है कि किसी फ़ंक्शन में लगातार कनेक्शन कैसे बनाए रखें। ऐसा करने में विफलता के परिणामस्वरूप कनेक्शन कोटा जल्दी समाप्त हो सकता है।

निम्नलिखित परिदृश्य इस खंड में शामिल हैं:

  • एचटीटीपी/एस
  • गूगल एपीआई

एचटीटीपी/एस अनुरोध

नीचे दिया गया अनुकूलित कोड स्निपेट दिखाता है कि प्रत्येक फ़ंक्शन आमंत्रण पर एक नया कनेक्शन बनाने के बजाय लगातार कनेक्शन कैसे बनाए रखें:

const http = require('http');
const functions = require('firebase-functions');

// Setting the `keepAlive` option to `true` keeps
// connections open between function invocations
const agent = new http.Agent({keepAlive: true});

exports.function = functions.https.onRequest((request, response) => {
    req = http.request({
        host: '',
        port: 80,
        path: '',
        method: 'GET',
        agent: agent, // Holds the connection open after the first invocation
    }, res => {
        let rawData = '';
        res.setEncoding('utf8');
        res.on('data', chunk => { rawData += chunk; });
        res.on('end', () => {
            response.status(200).send(`Data: ${rawData}`);
        });
    });
    req.on('error', e => {
        response.status(500).send(`Error: ${e.message}`);
    });
    req.end();
});

Google API तक पहुंचना

नीचे का उपयोग करता है उदाहरण के बादल Pub / Sub ,, लेकिन इस दृष्टिकोण भी अन्य क्लाइंट लाइब्रेरी-उदाहरण के लिए के लिए काम करता बादल प्राकृतिक भाषा या बादल स्पैनर । ध्यान दें कि प्रदर्शन में सुधार विशेष क्लाइंट लाइब्रेरी के वर्तमान कार्यान्वयन पर निर्भर हो सकता है।

एक बनाना PubSub एक कनेक्शन और मंगलाचरण प्रति दो DNS क्वेरी में ग्राहक वस्तु का परिणाम है। अनावश्यक कनेक्शन और DNS क्वेरी से बचने के लिए बनाने के PubSub वैश्विक क्षेत्र में ग्राहक वस्तु के रूप में नीचे दिए नमूने में दिखाया गया है:

const PubSub = require('@google-cloud/pubsub');
const functions = require('firebase-functions');
const pubsub = PubSub();

exports.function = functions.https.onRequest((req, res) => {
    const topic = pubsub.topic('');

    topic.publish('Test message', err => {
        if (err) {
            res.status(500).send(`Error publishing the message: ${err}`);
        } else {
            res.status(200).send('1 message published');
        }
    });
});

लोड-टेस्टिंग योर फंक्शन

यह मापने के लिए कि आपका फ़ंक्शन औसतन कितने कनेक्शन निष्पादित करता है, बस इसे एक HTTP फ़ंक्शन के रूप में परिनियोजित करें और कुछ QPS पर इसे लागू करने के लिए एक प्रदर्शन-परीक्षण ढांचे का उपयोग करें। एक संभावित विकल्प है आर्टिलरी , जो आप एक पंक्ति के साथ आह्वान कर सकते हैं:

$ artillery quick -d 300 -r 30 URL

यह आदेश दिए गए URL को 300 सेकंड के लिए 30 QPS पर प्राप्त करता है।

परीक्षण करने के बाद, पर अपने कनेक्शन कोटा के उपयोग की जांच बादल कार्य API कोटे पेज क्लाउड कंसोल में। यदि उपयोग लगातार 30 (या इसके कई) के आसपास है, तो आप प्रत्येक आमंत्रण में एक (या कई) कनेक्शन स्थापित कर रहे हैं। अपने कोड को ऑप्टिमाइज़ करने के बाद, आप देखेंगे कि कुछ (10-30) कनेक्शन केवल परीक्षण की शुरुआत में होते हैं।

आप उसी पृष्ठ पर सीपीयू कोटा प्लॉट पर अनुकूलन से पहले और बाद में सीपीयू लागत की तुलना भी कर सकते हैं।