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

אופטימיזציה של רשת

הפשטות של Cloud Functions מאפשרת לך לפתח במהירות קוד ולהפעיל אותו בסביבה נטולת שרתים. בקנה מידה מתון, עלות ההפעלה של פונקציות נמוכה, ואופטימיזציה של הקוד שלך אולי לא נראית כעדיפות גבוהה. אולם ככל שהפריסה שלך הולכת וגוברת, אופטימיזציה של הקוד שלך הופכת להיות יותר ויותר חשובה.

מסמך זה מתאר כיצד לייעל את הרשת עבור הפונקציות שלך. כמה מהיתרונות של אופטימיזציה של רשתות הם כדלקמן:

  • צמצם את זמן המעבד שהוקדש להקמת חיבורים חדשים בכל שיחת פונקציה.
  • להפחית את הסבירות של ואוזל של חיבור או DNS מכסה .

שמירה על קשרים מתמשכים

חלק זה נותן דוגמאות כיצד לשמור על קשרים מתמשכים בפונקציה. אי ביצוע זה עלול לגרום למכסות חיבור מתישות במהירות.

התרחישים הבאים מכוסים בפרק זה:

  • HTTP/S
  • ממשקי API של Google

בקשות HTTP/S

קטע הקוד המותאם להלן מראה כיצד לשמור על קשרים מתמשכים במקום ליצור חיבור חדש בכל פנייה לפונקציה:

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();
});

גישה לממשקי API של Google

הדוגמה הבאה שימושים ענן Pub / Sub , אך גישה זו פועלת גם עבור ספריות-עבור לקוחות אחרים, למשל, ענן שפה טבעית או בענן Spanner . שים לב ששיפור הביצועים עשוי להיות תלוי ביישום הנוכחי של ספריות לקוחות מסוימות.

יצירת 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

פקודה זו מביאה את כתובת האתר הנתונה ב- 30 QPS למשך 300 שניות.

לאחר ביצוע הבדיקה, לבדוק את השימוש של מכסת החיבור שלך על הדף במכסות פונקציות הענן ב Cloud Console. אם השימוש הוא בעקביות בסביבות 30 (או המרובה שלו), אתה יוצר קשר אחד (או מספר) בכל פנייה. לאחר ייעול הקוד שלך, אתה אמור לראות כמה (10-30) חיבורים מתרחשים רק בתחילת הבדיקה.

תוכל גם להשוות את עלות המעבד לפני ואחרי האופטימיזציה בחלקת מכסת המעבד באותו הדף.