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


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

ফাংশন স্থাপন

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

firebase deploy --only functions

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

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

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

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

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

ফাংশন মুছুন

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

  • ফায়ারবেস CLI-তে functions:delete সহ স্পষ্টভাবে
  • স্পষ্টভাবে Google ক্লাউড কনসোলে
  • নিহিতভাবে স্থাপনার পূর্বে উৎস থেকে ফাংশন অপসারণ করে।

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

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 আপনার সোর্স পার্স করে এবং ফাইল থেকে মুছে ফেলা যে কোনো ফাংশন প্রোডাকশন থেকে সরিয়ে দেয়।

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

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

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

একটি ফাংশন পুনঃনামকরণ করতে, আপনার উত্সে ফাংশনের একটি নতুন নামকরণকৃত সংস্করণ তৈরি করুন এবং তারপরে দুটি পৃথক স্থাপনার কমান্ড চালান। প্রথম কমান্ডটি নতুন নামযুক্ত ফাংশন স্থাপন করে এবং দ্বিতীয় কমান্ডটি পূর্বে স্থাপন করা সংস্করণটিকে সরিয়ে দেয়। উদাহরণস্বরূপ, যদি আপনার কাছে একটি HTTP-ট্রিগার করা ওয়েবহুক থাকে যার নাম আপনি পুনঃনামকরণ করতে চান, তাহলে কোডটি নিম্নরূপ সংশোধন করুন:

Node.js

// 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");
});

পাইথন

# before
from firebase_functions import https_fn

@https_fn.on_request()
def webhook(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello world!")

# after
from firebase_functions import https_fn

@https_fn.on_request()
def webhook_new(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello world!")

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

# Deploy new function
firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both functions are running

# Delete webhook
firebase functions:delete webhook

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

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

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

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

Node.js

// before
exports.firestoreTrigger = onDocumentCreated(
  "my-collection/{docId}",
  (event) => {},
);

// after
exports.firestoreTriggerAsia = onDocumentCreated(
  {
    document: "my-collection/{docId}",
    region: "asia-northeast1",
  },
  (event) => {},
);

আপডেট করা কোডটি অঞ্চলের সাথে সঠিক ইভেন্ট ফিল্টার (এই ক্ষেত্রে document ) উল্লেখ করা উচিত। আরও তথ্যের জন্য ক্লাউড ফাংশন অবস্থানগুলি দেখুন৷

পাইথন

# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
    pass

# After
@firestore_fn.on_document_created("my-collection/{docId}",
                                  region="asia-northeast1")
def firestore_trigger_asia(event):
    pass

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

firebase deploy --only functions:firestoreTriggerAsia

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

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

firebase functions:delete firestoreTrigger

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

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

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

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

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

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

Node.js

// before
const {onObjectDeleted} = require("firebase-functions/v2/storage");

exports.objectDeleted = onObjectDeleted((event) => {
    // ...
});

// after
const {onObjectArchived} = require("firebase-functions/v2/storage");

exports.objectArchived = onObjectArchived((event) => {
    // ...
});

পাইথন

# before
from firebase_functions import storage_fn

@storage_fn.on_object_deleted()
def object_deleted(event):
  # ...

# after 
from firebase_functions import storage_fn

@storage_fn.on_object_archived()
def object_archived(event):
  # ...

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

# Create new function objectArchived
firebase deploy --only functions:objectArchived

# Wait until deployment is done; now both objectDeleted and objectArchived are running

# Delete objectDeleted
firebase functions:delete objectDeleted

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

ফায়ারবেসের জন্য ক্লাউড ফাংশন আপনাকে রানটাইম বিকল্পগুলি নির্বাচন করতে দেয় যেমন 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 Node.js রানটাইম নির্বাচন করার অনুমতি দেয়। আপনি এই সমর্থিত Node.js সংস্করণগুলির একটির সাথে সম্পর্কিত রানটাইম পরিবেশে একচেটিয়াভাবে একটি প্রকল্পে সমস্ত ফাংশন চালানোর জন্য চয়ন করতে পারেন:

  • Node.js 20 (প্রিভিউ)
  • Node.js 18
  • Node.js 16
  • Node.js 14

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

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

  "engines": {"node": "18"}

আপনি যদি ইয়ার্ন প্যাকেজ ম্যানেজার ব্যবহার করেন বা engines ক্ষেত্রের জন্য আপনার অন্যান্য নির্দিষ্ট প্রয়োজনীয়তা থাকে, তাহলে আপনি পরিবর্তে firebase.json এ ক্লাউড ফাংশনের জন্য Firebase SDK-এর রানটাইম সেট করতে পারেন:

  {
    "functions": {
      "runtime": "nodejs18" // or nodejs14, nodejs16 or nodejs20
    }
  }

CLI firebase.json এ সেট করা মান ব্যবহার করে package.json এ আপনি আলাদাভাবে সেট করা যেকোনো মান বা পরিসরের চেয়ে।

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

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

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

পাইথন সংস্করণ সেট করুন

ক্লাউড ফাংশন 12.0.0 এবং উচ্চতর সংস্করণগুলির জন্য Firebase SDK পাইথন রানটাইম নির্বাচনের অনুমতি দেয়৷ দেখানো হিসাবে firebase.json এ রানটাইম সংস্করণ সেট করুন:

  {
    "functions": {
      "runtime": "python310" // or python311
    }
  }

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

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

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

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

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

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

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

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

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

এই সরলীকৃত দৃশ্যকল্প একযোগে সম্ভাব্য দক্ষতা লাভ প্রদর্শন করে। বাস্তবে, কার্যকারিতা অপ্টিমাইজ করার জন্য এবং ঠাণ্ডা কমানোর জন্য স্কেলিং আচরণ একযোগে শুরু হয় আরও জটিল। Firebase 2nd gen এর জন্য ক্লাউড ফাংশনে সঙ্গতি ক্লাউড রান দ্বারা চালিত হয় এবং ক্লাউড রানের কনটেইনার ইনস্ট্যান্স অটোস্কেলিংয়ের নিয়ম অনুসরণ করে।

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

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

ন্যূনতম সংখ্যক দৃষ্টান্ত উষ্ণ রাখুন

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

Node.js

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

পাইথন

@https_fn.on_call(min_instances=5)
def get_autocomplete_response(event: https_fn.CallableRequest) -> https_fn.Response:

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

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

    Node.js

    const functions = require('firebase-functions');
    const { defineInt, defineString } = require('firebase-functions/params');
    
    // Define some parameters
    const minInstancesConfig = defineInt('HELLO_WORLD_MININSTANCES');
    const welcomeMessage = defineString('WELCOME_MESSAGE');
    
    // To use configured parameters inside the config for a function, provide them 
    // directly. To use them at runtime, call .value() on them.
    export const helloWorld = functions.runWith({ minInstances: minInstancesConfig}).https.onRequest(
      (req, res) => {
        res.send(`${welcomeMessage.value()}! I am a function.`);
      }
    );
    

    পাইথন

    MIN_INSTANCES = params.IntParam("HELLO_WORLD_MININSTANCES")
    WELCOME_MESSAGE = params.StringParam("WELCOME_MESSAGE")
    
    @https_fn.on_request(min_instances=MIN_INSTANCES.value())
    def get_autocomplete_response(event: https_fn.Request) -> https_fn.Response:
        return https_fn.Response(f"{WELCOME_MESSAGE.value()} I'm a function.")
    

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

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

Node.js

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

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

পাইথন

@pubsub_fn.on_message_published(topic="topic-name", max_instances=100)
def mirrorevents(event: pubsub_fn.CloudEvent):
#  Connect to legacy database

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

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

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

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

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

Node.js

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

পাইথন

@storage_fn.on_object_finalized(timeout_sec=300, memory=options.MemoryOption.GB_1)
def convert_large_file(event: storage_fn.CloudEvent):
# Do some complicated things that take a lot of memory and time.

টাইমআউট সেকেন্ডের জন্য সর্বাধিক মান হল 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 ডিফল্টগুলিকে একটি বিশ্বব্যাপী বিকল্প হিসাবে সেট করুন:

Node.js

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

পাইথন

# Use 1st gen behavior
set_global_options(cpu="gcf_gen1")

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

Node.js

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

পাইথন

# Boost CPU in a function:
@storage_fn.on_object_finalized(cpu=2)
def analyze_image(event: storage_fn.CloudEvent):
# computer vision goes here