Firebase is back at Google I/O on May 10! Register now

ফাংশন পরিচালনা করুন

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

আপনি Firebase CLI কমান্ডগুলি ব্যবহার করে বা আপনার ফাংশন সোর্স কোডে রানটাইম বিকল্পগুলি সেট করে ফাংশন স্থাপন, মুছতে এবং সংশোধন করতে পারেন।

ফাংশন স্থাপন

ফাংশন স্থাপন করতে, এই Firebase CLI কমান্ডটি চালান:

$ firebase deploy --only functions

ডিফল্টরূপে, Firebase CLI একই সময়ে index.js এর মধ্যে সমস্ত ফাংশন স্থাপন করে। যদি আপনার প্রজেক্টে 5টির বেশি ফাংশন থাকে, আমরা সুপারিশ করি যে আপনি শুধুমাত্র আপনার সম্পাদনা করা ফাংশনগুলি স্থাপন করতে নির্দিষ্ট ফাংশনের নামের সাথে --only পতাকা ব্যবহার করুন৷ এইভাবে নির্দিষ্ট ফাংশন স্থাপন করা স্থাপনার প্রক্রিয়াকে গতিশীল করে এবং আপনাকে স্থাপনার কোটা এড়াতে সহায়তা করে। উদাহরণ স্বরূপ:

$ firebase deploy --only functions:addMessage,functions:makeUppercase

প্রচুর সংখ্যক ফাংশন স্থাপন করার সময়, আপনি আদর্শ কোটা অতিক্রম করতে পারেন এবং HTTP 429 বা 500 ত্রুটি বার্তা পেতে পারেন। এটি সমাধান করতে, 10 বা তার কম গোষ্ঠীতে ফাংশন স্থাপন করুন।

উপলব্ধ কমান্ডের সম্পূর্ণ তালিকার জন্য Firebase CLI রেফারেন্স দেখুন।

ডিফল্টরূপে, Firebase CLI সোর্স কোডের functions/ ফোল্ডারে দেখায়। আপনি যদি পছন্দ করেন, আপনি কোডবেস বা ফাইলের একাধিক সেটে ফাংশন সংগঠিত করতে পারেন।

ফাংশন মুছুন

আপনি এই উপায়ে পূর্বে স্থাপন করা ফাংশন মুছে ফেলতে পারেন:

  • ফায়ারবেস CLI-তে functions:delete সহ স্পষ্টভাবে
  • ফায়ারবেস কনসোলের ফাংশন তালিকায় স্পষ্টভাবে প্রসঙ্গ মেনু ব্যবহার করে
  • মোতায়েন করার পূর্বে index.js থেকে ফাংশনটি অপসারণ করে নিহিত

সমস্ত মুছে ফেলার ক্রিয়াকলাপ আপনাকে উত্পাদন থেকে ফাংশন অপসারণের আগে নিশ্চিত করতে অনুরোধ করে।

Firebase CLI-তে স্পষ্ট ফাংশন মুছে ফেলা একাধিক আর্গুমেন্টের পাশাপাশি ফাংশন গোষ্ঠীকে সমর্থন করে এবং আপনাকে একটি নির্দিষ্ট অঞ্চলে চলমান একটি ফাংশন নির্দিষ্ট করার অনুমতি দেয়। এছাড়াও, আপনি নিশ্চিতকরণ প্রম্পট ওভাররাইড করতে পারেন।

# Delete all functions that match the specified name in all regions.
$ firebase functions:delete myfunction

# Delete a specified function running in a specific region.
$ firebase functions:delete myfunction --region us-east-1

# Delete more than one function
$ firebase functions:delete myfunction myotherfunction

# Delete a specified functions group.
$ firebase functions:delete groupA

# Bypass the confirmation prompt.
$ firebase functions:delete myfunction --force

অন্তর্নিহিত ফাংশন মুছে ফেলার সাথে, firebase deploy index.js পার্স করে এবং ফাইল থেকে মুছে ফেলা যে কোনও ফাংশন উত্পাদন থেকে সরিয়ে দেয়।

একটি ফাংশনের নাম, অঞ্চল বা ট্রিগার পরিবর্তন করুন

আপনি যদি অঞ্চলগুলির পুনঃনামকরণ বা পরিবর্তন করেন বা উত্পাদন ট্র্যাফিক পরিচালনা করে এমন ফাংশনগুলির জন্য ট্রিগার করেন তবে পরিবর্তনের সময় ইভেন্টগুলি হারানো এড়াতে এই বিভাগে পদক্ষেপগুলি অনুসরণ করুন৷ আপনি এই পদক্ষেপগুলি অনুসরণ করার আগে, প্রথমে নিশ্চিত করুন যে আপনার ফাংশন idempotent , যেহেতু পরিবর্তনের সময় আপনার ফাংশনের নতুন সংস্করণ এবং পুরানো সংস্করণ উভয়ই একই সময়ে চলবে৷

একটি ফাংশন পুনঃনামকরণ করুন

একটি ফাংশনের নাম পরিবর্তন করতে, index.js এ ফাংশনের একটি নতুন নামকরণকৃত সংস্করণ তৈরি করুন এবং তারপরে দুটি পৃথক স্থাপনার কমান্ড চালান। প্রথম কমান্ডটি নতুন নামযুক্ত ফাংশন স্থাপন করে এবং দ্বিতীয় কমান্ডটি পূর্বে স্থাপন করা সংস্করণটিকে সরিয়ে দেয়। উদাহরণস্বরূপ, যদি আপনার webhook নামে একটি ফাংশন থাকে যা আপনি webhookNew এ পরিবর্তন করতে চান, তাহলে কোডটি নিম্নরূপ সংশোধন করুন:

// before
const {onRequest} = require('firebase-functions/v2/https');

exports.webhook = onRequest((req, res) => {
    res.send("Hello");
});

// after
const {onRequest} = require('firebase-functions/v2/https');

exports.webhooknew = onRequest((req, res) => {
    res.send("Hello");
});

তারপরে নতুন ফাংশন স্থাপন করতে নিম্নলিখিত কমান্ডগুলি চালান:

# Deploy new function called webhookNew
$ firebase deploy --only functions:webhooknew

# Wait until deployment is done; now both webhooknew and webhook are running

# Delete webhook
$ firebase functions:delete webhook

একটি ফাংশনের অঞ্চল বা অঞ্চল পরিবর্তন করুন

আপনি যদি এমন একটি ফাংশনের জন্য নির্দিষ্ট অঞ্চলগুলি পরিবর্তন করেন যা উত্পাদন ট্র্যাফিক পরিচালনা করে, আপনি এই পদক্ষেপগুলি ক্রমানুসারে সম্পাদন করে ইভেন্ট ক্ষতি রোধ করতে পারেন:

  1. ফাংশন পুনঃনামকরণ করুন, এবং পছন্দ অনুযায়ী এর অঞ্চল বা অঞ্চল পরিবর্তন করুন।
  2. পুনঃনামকৃত ফাংশন স্থাপন করুন, যার ফলে অঞ্চলের উভয় সেটে সাময়িকভাবে একই কোড চালানো হয়।
  3. আগের ফাংশন মুছুন।

উদাহরণস্বরূপ, যদি আপনার কাছে webhook নামে একটি ফাংশন থাকে যা বর্তমানে us-central1 এর ডিফল্ট ফাংশন অঞ্চলে রয়েছে এবং আপনি এটিকে asia-northeast1 এ স্থানান্তর করতে চান, আপনাকে প্রথমে ফাংশনের নাম পরিবর্তন করতে এবং অঞ্চলটি সংশোধন করতে আপনার সোর্স কোড পরিবর্তন করতে হবে .

// before
const {onRequest} = require('firebase-functions/v2/https');

exports.webhook = onRequest((req, res) => {
    res.send("Hello");
});

// after
const {onRequest} = require('firebase-functions/v2/https');

exports.webhookasia = onRequest({
        region: 'asia-northeast1'
    }, (req, res) => {
    res.send("Hello");
});

তারপর চালানোর মাধ্যমে স্থাপন করুন:

$ firebase deploy --only functions:webhookAsia

এখন দুটি অভিন্ন ফাংশন চলছে: webhook চলছে us-central1 , এবং webhookasia চলছে asia-northeast1 এ।

তারপর, webhook মুছুন:

$ firebase functions:delete webhook

এখন শুধুমাত্র একটি ফাংশন আছে - webhookasia , যা asia-northeast1 এ চলছে।

একটি ফাংশনের ট্রিগার প্রকার পরিবর্তন করুন

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

শুধুমাত্র সোর্স কোড পরিবর্তন করে এবং firebase deploy চালানোর মাধ্যমে একটি ফাংশনের ইভেন্টের ধরন পরিবর্তন করা সম্ভব নয়। ত্রুটিগুলি এড়াতে, এই পদ্ধতি দ্বারা একটি ফাংশনের ট্রিগার প্রকার পরিবর্তন করুন:

  1. পছন্দসই ট্রিগার প্রকারের সাথে একটি নতুন ফাংশন অন্তর্ভুক্ত করতে উত্স কোডটি পরিবর্তন করুন৷
  2. ফাংশনটি স্থাপন করুন, যার ফলে অস্থায়ীভাবে পুরানো এবং নতুন উভয় ফাংশন চালানো হয়।
  3. ফায়ারবেস CLI ব্যবহার করে প্রোডাকশন থেকে পুরানো ফাংশনটি স্পষ্টভাবে মুছে দিন।

উদাহরণস্বরূপ, যদি আপনার একটি ফাংশন অবজেক্ট objectchanged থাকে যার উত্তরাধিকার onMetadataUpdated ইভেন্ট টাইপ আছে, এবং আপনি এটিকে onObjectFinalized এ পরিবর্তন করতে চান, প্রথমে ফাংশনটির নাম পরিবর্তন করুন এবং onObjectFinalized ইভেন্ট টাইপ থাকতে এটি সম্পাদনা করুন।

// before
const {onMetadataUpdated} = require('firebase-functions/v2/storage');

exports.objectchanged = onMetadataUpdated((event) => {
    return console.log('File name is: ', event.data.name);
});

// after
const {onObjectFinalized} = require('firebase-functions/v2/storage');

exports.objectchanged = onObjectFinalized((event) => {
    return console.log('File name is: ', event.data.name);
});

তারপরে পুরানো ফাংশনটি মুছে ফেলার আগে প্রথমে নতুন ফাংশন তৈরি করতে নিম্নলিখিত কমান্ডগুলি চালান:

# Create new function objectFinalized
$ firebase deploy --only functions:objectFinalized

# Wait until deployment is done; now both objectChanged and objectFinalized are running

# Delete objectChanged
$ firebase functions:delete objectChanged

রানটাইম বিকল্প সেট করুন

ফায়ারবেসের জন্য ক্লাউড ফাংশন আপনাকে রানটাইম বিকল্পগুলি নির্বাচন করতে দেয় যেমন Node.js রানটাইম সংস্করণ এবং প্রতি-ফাংশন টাইমআউট, মেমরি বরাদ্দকরণ এবং সর্বনিম্ন/সর্বোচ্চ ফাংশন দৃষ্টান্ত।

একটি সর্বোত্তম অনুশীলন হিসাবে, এই বিকল্পগুলি (Node.js সংস্করণ ব্যতীত) ফাংশন কোডের ভিতরে একটি কনফিগারেশন অবজেক্টে সেট করা উচিত। এই RuntimeOptions অবজেক্ট হল আপনার ফাংশনের রানটাইম বিকল্পগুলির জন্য সত্যের উৎস, এবং অন্য কোনো পদ্ধতির মাধ্যমে সেট করা বিকল্পগুলিকে ওভাররাইড করবে (যেমন Google ক্লাউড কনসোল বা gcloud CLI-এর মাধ্যমে)।

যদি আপনার ডেভেলপমেন্ট ওয়ার্কফ্লোতে Google ক্লাউড কনসোল বা gcloud CLI-এর মাধ্যমে রানটাইম বিকল্পগুলি ম্যানুয়ালি সেট করা জড়িত থাকে এবং আপনি প্রতিটি স্থাপনায় এই মানগুলিকে ওভাররাইড করতে না চান, তাহলে preserveExternalChanges বিকল্পটিকে true সেট করুন। এই বিকল্পটি true সেট করার সাথে, Firebase আপনার কোডে সেট করা রানটাইম বিকল্পগুলিকে নিম্নলিখিত অগ্রাধিকারের সাথে আপনার ফাংশনের বর্তমানে-নিয়োজিত সংস্করণের সেটিংসের সাথে একত্রিত করে:

  1. বিকল্প ফাংশন কোডে সেট করা আছে: বহিরাগত পরিবর্তন ওভাররাইড করুন।
  2. ফাংশন কোডে বিকল্পটি RESET_VALUE এ সেট করা হয়েছে: ডিফল্ট মান সহ বহিরাগত পরিবর্তনগুলি ওভাররাইড করুন৷
  3. বিকল্প ফাংশন কোডে সেট করা নেই, কিন্তু বর্তমানে স্থাপন করা ফাংশনে সেট করা হয়েছে: স্থাপন করা ফাংশনে নির্দিষ্ট করা বিকল্পটি ব্যবহার করুন।

preserveExternalChanges: true বিকল্পটি বেশিরভাগ পরিস্থিতিতে সুপারিশ করা হয় না কারণ আপনার কোডটি আর আপনার ফাংশনের জন্য রানটাইম বিকল্পের জন্য সত্যের সম্পূর্ণ উৎস হবে না। আপনি যদি এটি ব্যবহার করেন তবে Google ক্লাউড কনসোল দেখুন বা একটি ফাংশনের সম্পূর্ণ কনফিগারেশন দেখতে gcloud CLI ব্যবহার করুন৷

Node.js সংস্করণ সেট করুন

ক্লাউড ফাংশনগুলির জন্য Firebase SDK (2nd gen) Node.js রানটাইম নির্বাচন করার অনুমতি দেয়৷ আপনি এই সমর্থিত Node.js সংস্করণগুলির একটির সাথে সম্পর্কিত রানটাইম পরিবেশে একচেটিয়াভাবে একটি প্রকল্পে সমস্ত ফাংশন চালানোর জন্য চয়ন করতে পারেন:

  • Node.js 16
  • Node.js 14

Node.js সংস্করণ সেট করতে:

package.json ফাইলে engines ফিল্ডে ভার্সন সেট করুন যা ইনিশিয়ালাইজেশনের সময় আপনার functions/ ডিরেক্টরিতে তৈরি হয়েছিল। উদাহরণস্বরূপ, শুধুমাত্র সংস্করণ 16 ব্যবহার করতে, package.json এ এই লাইনটি সম্পাদনা করুন:

  "engines": {"node": "16"}

engines ক্ষেত্র প্রয়োজন; আপনি ফাংশন স্থাপন এবং চালানোর জন্য এটিকে অবশ্যই সমর্থিত Node.js সংস্করণগুলির একটি নির্দিষ্ট করতে হবে । বর্তমানে firebase init functions এই ক্ষেত্রটিকে 16 এ সেট করে।

আপনার Node.js রানটাইম আপগ্রেড করুন

আপনার Node.js রানটাইম আপগ্রেড করতে:

  1. নিশ্চিত করুন যে আপনার প্রকল্পটি ব্লেজ প্রাইসিং প্ল্যানে রয়েছে।
  2. নিশ্চিত করুন যে আপনি Firebase CLI v9.17.0 বা তার পরবর্তী ব্যবহার করছেন।
  3. শুরু করার সময় আপনার functions/ ডিরেক্টরিতে তৈরি করা package.json ফাইলে engines মান পরিবর্তন করুন। উদাহরণস্বরূপ, আপনি যদি সংস্করণ 10 থেকে সংস্করণ 16-এ আপগ্রেড করছেন, তাহলে এন্ট্রিটি এইরকম হওয়া উচিত: "engines": {"node": "16"}
  4. Firebase CLI v9.17.0 বা তার পরে ব্যবহার করে ফাংশন পুনরায় স্থাপন করুন।

স্কেলিং আচরণ নিয়ন্ত্রণ করুন

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

একইভাবে, আপনি ইনকামিং অনুরোধের প্রতিক্রিয়া হিসাবে দৃষ্টান্তের স্কেলিং সীমিত করতে সর্বোচ্চ সংখ্যা সেট করতে পারেন। এই সেটিংটি আপনার খরচ নিয়ন্ত্রণ করার উপায় হিসাবে ব্যবহার করুন বা একটি ব্যাকিং পরিষেবা যেমন একটি ডাটাবেসের সাথে সংযোগের সংখ্যা সীমিত করুন৷

প্রতি-ইনস্ট্যান্স কনকারেন্সি সেটিং (২য় জেনারে নতুন) সহ এই সেটিংসগুলি ব্যবহার করে, আপনি আপনার ফাংশনের জন্য স্কেলিং আচরণ নিয়ন্ত্রণ এবং সুর করতে পারেন। আপনার অ্যাপ্লিকেশন এবং ফাংশনের প্রকৃতি নির্ধারণ করবে কোন সেটিংস সবচেয়ে বেশি সাশ্রয়ী এবং এর ফলে সর্বোত্তম কার্যক্ষমতা হবে।

কম ট্রাফিক সহ কিছু অ্যাপের জন্য, মাল্টি-কনকারেন্সি ছাড়া একটি কম CPU বিকল্প সর্বোত্তম। অন্যদের জন্য যেখানে ঠাণ্ডা শুরু হওয়া একটি গুরুত্বপূর্ণ সমস্যা, সেখানে উচ্চ একযোগে এবং ন্যূনতম দৃষ্টান্ত স্থাপনের অর্থ হল ট্র্যাফিকের বড় স্পাইকগুলি পরিচালনা করার জন্য দৃষ্টান্তের একটি সেট সবসময় উষ্ণ রাখা হয়।

ছোট আকারের অ্যাপগুলির জন্য যেগুলি খুব কম ট্র্যাফিক পায়, উচ্চ একযোগে কম সর্বাধিক দৃষ্টান্ত সেট করার অর্থ হল অ্যাপটি অতিরিক্ত খরচ না করেই ট্র্যাফিকের বিস্ফোরণ পরিচালনা করতে পারে৷

সমসাময়িক অনুরোধের অনুমতি দিন

Firebase (1st gen) এর জন্য ক্লাউড ফাংশনে, প্রতিটি উদাহরণ একবারে একটি অনুরোধ পরিচালনা করতে পারে, তাই স্কেলিং আচরণ শুধুমাত্র minInstances এবং maxInstances সেটিংসের সাথে সেট করা হয়েছিল। দৃষ্টান্তের সংখ্যা নিয়ন্ত্রণ করার পাশাপাশি, ক্লাউড ফাংশন ফর ফায়ারবেস (২য় জেনারে)-এ আপনি concurrency বিকল্পের সাথে প্রতিটি ইন্সট্যান্স একই সময়ে পরিবেশন করতে পারে এমন অনুরোধের সংখ্যা নিয়ন্ত্রণ করতে পারেন। কনকারেন্সির ডিফল্ট মান হল 80, কিন্তু আপনি এটিকে 1 থেকে 1000 এর মধ্যে যেকোনো পূর্ণসংখ্যাতে সেট করতে পারেন।

উচ্চতর কনকারেন্সি সেটিংস সহ ফাংশনগুলি কোল্ড স্টার্টিং ছাড়াই ট্রাফিকের স্পাইকগুলিকে শোষণ করতে পারে কারণ প্রতিটি উদাহরণে সম্ভবত কিছু হেডরুম থাকে। যদি একটি উদাহরণ 50টি সমবর্তী অনুরোধগুলি পরিচালনা করার জন্য কনফিগার করা হয় তবে বর্তমানে শুধুমাত্র 25টি পরিচালনা করছে, এটি কোল্ড স্টার্টের জন্য একটি নতুন উদাহরণের প্রয়োজন ছাড়াই 25টি অতিরিক্ত অনুরোধের একটি স্পাইক পরিচালনা করতে পারে। এর বিপরীতে, মাত্র 1 এর একযোগে সেটিং সহ, অনুরোধের এই স্পাইক 25টি ঠান্ডা শুরু হতে পারে।

Firebase (2nd gen) এর জন্য ক্লাউড ফাংশনে উচ্চতর একযোগে সেটিংস নিয়ে পরীক্ষা করার সময়, নিম্নলিখিতগুলি মনে রাখবেন:

  • ব্যবহারিক সীমাতে না পৌঁছানো পর্যন্ত সর্বোত্তম পারফরম্যান্সের জন্য উচ্চতর কনকারেন্সি সেটিংসের জন্য উচ্চতর CPU এবং RAM প্রয়োজন হতে পারে। একটি ফাংশন যা ভারী ছবি বা ভিডিও প্রক্রিয়াকরণ করে, উদাহরণস্বরূপ, 1000টি সমবর্তী অনুরোধগুলি পরিচালনা করার জন্য সংস্থানগুলির অভাব হতে পারে, এমনকি যখন এটির CPU এবং RAM সেটিংস সর্বাধিক করা হয়।
  • যেহেতু ফায়ারবেসের জন্য ক্লাউড ফাংশন (2য় জেনার) ক্লাউড রান দ্বারা চালিত হয়, আপনি কনকারেন্সি অপ্টিমাইজ করার জন্য Google ক্লাউড নির্দেশিকাও দেখতে পারেন।
  • প্রোডাকশনে মাল্টিককারেন্সিতে স্যুইচ করার আগে পরীক্ষার পরিবেশে মাল্টিককারেন্সি ভালোভাবে পরীক্ষা করা নিশ্চিত করুন।

ঠান্ডা শুরুর সংখ্যা কমিয়ে দিন

সোর্স কোডে একটি ফাংশনের জন্য ন্যূনতম সংখ্যক দৃষ্টান্ত সেট করতে, minInstances বিকল্পটি ব্যবহার করুন.. উদাহরণস্বরূপ, এই ফাংশনটি উষ্ণ রাখার জন্য সর্বনিম্ন 5টি উদাহরণ সেট করে:

  const { onCall } = require("firebase-functions/v2/https");

  exports.getAutocompleteResponse = onCall(
    {
      // Keep 5 instances warm for this latency-critical function
      minInstances: 5,
    },
    (event) => {
      // Autocomplete user’s search term
    }
  );

minInstances জন্য একটি মান সেট করার সময় এখানে কিছু বিষয় বিবেচনা করতে হবে:

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

    // Get Firebase project ID from `FIREBASE_CONFIG` environment variable
    const envProjectId = JSON.parse(process.env.FIREBASE_CONFIG).projectId;
    
    exports.renderProfilePage = onRequest(
      {
        // Keep 5 instances warm for this latency-critical function
        // in production only. Default to 0 for test projects.
        minInstances: envProjectId === "my-production-project" ? 5 : 0,
      },
      (req, res) => {
        // render some html
      }
    );
    

একটি ফাংশনের জন্য সর্বাধিক সংখ্যক দৃষ্টান্ত সীমিত করুন

ফাংশন সোর্স কোডে সর্বাধিক উদাহরণ সেট করতে, maxInstances বিকল্পটি ব্যবহার করুন। উদাহরণস্বরূপ, এই ফাংশনটি 100টি দৃষ্টান্তের একটি সীমা নির্ধারণ করে যাতে একটি অনুমানমূলক উত্তরাধিকার ডাটাবেসকে অভিভূত না করে:

  const { onMessagePublished } = require("firebase-functions/v2/pubsub");

  exports.mirrorevents = onMessagePublished(
    { topic: "topic-name", maxInstances: 100 },
    (event) => {
      // Connect to legacy database
    }
  );

যদি একটি HTTP ফাংশন maxInstances সীমা পর্যন্ত স্কেল করা হয়, নতুন অনুরোধগুলি 30 সেকেন্ডের জন্য সারিবদ্ধ করা হয় এবং তারপরে কোনও উদাহরণ উপলব্ধ না হলে 429 Too Many Requests প্রতিক্রিয়া কোড দিয়ে প্রত্যাখ্যান করা হয়।

সর্বাধিক দৃষ্টান্ত সেটিংস ব্যবহার করার জন্য সর্বোত্তম অনুশীলন সম্পর্কে আরও জানতে, maxInstances ব্যবহার করার জন্য এই সেরা অনুশীলনগুলি দেখুন।

টাইমআউট এবং মেমরি বরাদ্দ সেট করুন

কিছু ক্ষেত্রে, আপনার ফাংশনগুলির একটি দীর্ঘ সময়সীমার মান বা মেমরির একটি বড় বরাদ্দের জন্য বিশেষ প্রয়োজনীয়তা থাকতে পারে। আপনি Google ক্লাউড কনসোলে বা ফাংশন সোর্স কোডে (শুধুমাত্র ফায়ারবেস) এই মানগুলি সেট করতে পারেন৷

ফাংশন সোর্স কোডে মেমরি বরাদ্দ এবং টাইমআউট সেট করতে, আপনার ফাংশন চালানো ভার্চুয়াল মেশিন কাস্টমাইজ করতে GlobalOptions.memory এবং GlobalOptions.timeoutSeconds ব্যবহার করুন। উদাহরণস্বরূপ, এই ক্লাউড স্টোরেজ ফাংশনটি 1GiB মেমরি ব্যবহার করে এবং 300 সেকেন্ডের পরে সময় শেষ হয়:

  exports.convertLargeFile = onObjectFinalized({
    timeoutSeconds: 300,
    memory: "1GiB",
  }, (event) => {
    // Do some complicated things that take a lot of memory and time
  });

timeoutSeconds জন্য সর্বোচ্চ মান হল 540 বা 9 মিনিট।

Google ক্লাউড কনসোলে মেমরি বরাদ্দ এবং সময়সীমা সেট করতে:

  1. Google ক্লাউড কনসোলে বাম মেনু থেকে ফায়ারবেসের জন্য ক্লাউড ফাংশন নির্বাচন করুন।
  2. ফাংশন তালিকায় তার নামের উপর ক্লিক করে একটি ফাংশন নির্বাচন করুন।
  3. উপরের মেনুতে সম্পাদনা আইকনে ক্লিক করুন।
  4. মেমরি বরাদ্দ লেবেলযুক্ত ড্রপ-ডাউন মেনু থেকে একটি মেমরি বরাদ্দ নির্বাচন করুন।
  5. উন্নত বিকল্পগুলি প্রদর্শন করতে আরও ক্লিক করুন, এবং টাইমআউট পাঠ্য বাক্সে কয়েক সেকেন্ড লিখুন।
  6. ফাংশন আপডেট করতে সংরক্ষণ করুন ক্লিক করুন.

CPU ডিফল্ট ওভাররাইড করুন

2GB পর্যন্ত মেমরি বরাদ্দ করা হয়েছে, Firebase (2nd gen) এর জন্য ক্লাউড ফাংশনের প্রতিটি ফাংশন একটি CPU-তে ডিফল্ট হয় এবং তারপর 4 এবং 8GB-এর জন্য 2 CPU-তে বৃদ্ধি পায়। উল্লেখ্য যে এটি 1ম জেনার ডিফল্ট আচরণ থেকে উল্লেখযোগ্যভাবে ভিন্ন যেভাবে নিম্ন-মেমরি ফাংশনগুলির জন্য নিম্নোক্ত সারণীতে প্রকাশ করা হিসাবে সামান্য বেশি খরচ হতে পারে:

RAM বরাদ্দ সংস্করণ 1 ডিফল্ট CPU (ভগ্নাংশ) সংস্করণ 2 ডিফল্ট CPU প্রতি মিসে দাম বৃদ্ধি
128MB 1/12 1 10.5x
256MB 1/6 1 5.3x
512MB 1/3 1 2.7x
1 জিবি 7/12 1 1.6x
2 জিবি 1 1 1x
4 জিবি 2 2 1x
8GB 2 2 1x
16 জিবি n/a 4 n/a

আপনি যদি আপনার 2nd gen ফাংশনগুলির জন্য 1st gen এর আচরণ সংরক্ষণ করতে পছন্দ করেন, 1st gen defaults একটি বিশ্বব্যাপী বিকল্প হিসাবে সেট করুন:

// Turn off Firebase defaults
setGlobalOptions({ cpu: 'gcfv1' });

CPU- নিবিড় ফাংশনের জন্য, 2nd gen অতিরিক্ত CPU কনফিগার করার নমনীয়তা প্রদান করে। আপনি দেখানো হিসাবে প্রতি-ফাংশন ভিত্তিতে CPU বুস্ট করতে পারেন:

// Boost CPU in a function:
export const analyzeImage = onObjectFinalized({ cpu: 2 }, (event) => {
  // computer vision goes here
});