নেটওয়ার্কিং অপ্টিমাইজ করা

ক্লাউড ফাংশনগুলির সরলতা আপনাকে দ্রুত কোড বিকাশ করতে এবং এটি একটি সার্ভারহীন পরিবেশে চালাতে দেয়। মাঝারি স্কেলে, ফাংশন চালানোর খরচ কম, এবং আপনার কোড অপ্টিমাইজ করা একটি উচ্চ অগ্রাধিকার বলে মনে হতে পারে না। আপনার স্থাপনার স্কেল বাড়ার সাথে সাথে, আপনার কোড অপ্টিমাইজ করা ক্রমশ গুরুত্বপূর্ণ হয়ে ওঠে।

এই নথিটি বর্ণনা করে কিভাবে আপনার ফাংশনের জন্য নেটওয়ার্কিং অপ্টিমাইজ করা যায়। নেটওয়ার্কিং অপ্টিমাইজ করার কিছু সুবিধা নিম্নরূপ:

  • প্রতিটি ফাংশন কলে নতুন সংযোগ স্থাপনে ব্যয় করা CPU সময় হ্রাস করুন।
  • সংযোগ বা DNS কোটা শেষ হওয়ার সম্ভাবনা হ্রাস করুন।

অবিরাম সংযোগ বজায় রাখা

এই বিভাগটি একটি ফাংশনে কীভাবে অবিরাম সংযোগ বজায় রাখতে হয় তার উদাহরণ দেয়। এটি করতে ব্যর্থ হলে সংযোগ কোটা দ্রুত নিঃশেষ হয়ে যেতে পারে।

নিম্নলিখিত পরিস্থিতিতে এই বিভাগে আচ্ছাদিত করা হয়:

  • HTTP/S
  • Google API

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

Google API অ্যাক্সেস করা হচ্ছে

নীচের উদাহরণটি Cloud 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

এই কমান্ডটি 300 সেকেন্ডের জন্য 30 QPS-এ প্রদত্ত URL নিয়ে আসে।

পরীক্ষা করার পরে, ক্লাউড কনসোলে ক্লাউড ফাংশন API কোটা পৃষ্ঠায় আপনার সংযোগ কোটার ব্যবহার পরীক্ষা করুন। যদি ব্যবহার ধারাবাহিকভাবে প্রায় 30 (বা এর একাধিক) হয় তবে আপনি প্রতিটি আহ্বানে একটি (বা একাধিক) সংযোগ স্থাপন করছেন। আপনি আপনার কোড অপ্টিমাইজ করার পরে, আপনি দেখতে পাবেন কয়েকটি (10-30) সংযোগ শুধুমাত্র পরীক্ষার শুরুতে ঘটবে৷

আপনি একই পৃষ্ঠায় CPU কোটা প্লটে অপ্টিমাইজেশনের আগে এবং পরে CPU খরচ তুলনা করতে পারেন।