ক্লাউড টাস্কের সাথে সারিবদ্ধ ফাংশন


টাস্ক সারি ফাংশনগুলি Google Cloud Tasks সুবিধা গ্রহণ করে আপনার অ্যাপকে আপনার প্রধান অ্যাপ্লিকেশন প্রবাহের বাইরে অ্যাসিঙ্ক্রোনাসভাবে সময়-সাপেক্ষ, সংস্থান-নিবিড় বা ব্যান্ডউইথ-সীমিত কাজগুলি চালাতে সাহায্য করে৷

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

এই জটিলতা প্রশমিত করার জন্য, আপনি একটি টাস্ক কিউ ফাংশন লিখতে পারেন যা scheduleTime , এবং dispatchDeadline মতো মৌলিক টাস্ক বিকল্পগুলি সেট করে এবং তারপরে Cloud Tasks একটি সারিতে ফাংশনটি হস্তান্তর করে৷ Cloud Tasks এনভায়রনমেন্ট বিশেষভাবে ডিজাইন করা হয়েছে কার্যকর কনজেশন কন্ট্রোল নিশ্চিত করার জন্য এবং এই ধরনের ক্রিয়াকলাপগুলির জন্য পুনরায় চেষ্টা করার নীতিগুলি।

Cloud Functions for Firebase জন্য Firebase SDK এবং টাস্ক সারি ফাংশন সমর্থন করার জন্য Firebase Admin SDK v10.2.0 এবং উচ্চতর এর সাথে ইন্টারঅপারেটিং করে।

ফায়ারবেসের সাথে টাস্ক কিউ ফাংশন ব্যবহার করলে Cloud Tasks প্রক্রিয়াকরণের জন্য চার্জ হতে পারে। আরও তথ্যের জন্য Cloud Tasks মূল্য দেখুন।

টাস্ক কিউ ফাংশন তৈরি করুন

টাস্ক কিউ ফাংশন ব্যবহার করতে, এই ওয়ার্কফ্লো অনুসরণ করুন:

  1. Cloud Functions জন্য Firebase SDK ব্যবহার করে একটি টাস্ক কিউ ফাংশন লিখুন।
  2. একটি HTTP অনুরোধের সাথে এটি ট্রিগার করে আপনার ফাংশন পরীক্ষা করুন।
  3. Firebase CLI এর সাথে আপনার ফাংশন স্থাপন করুন। প্রথমবার আপনার টাস্ক কিউ ফাংশন স্থাপন করার সময়, CLI আপনার সোর্স কোডে নির্দিষ্ট বিকল্পগুলি (রেট সীমিত করা এবং পুনরায় চেষ্টা) সহ Cloud Tasks একটি টাস্ক সারি তৈরি করবে।
  4. সদ্য নির্মিত টাস্ক সারিতে কাজগুলি যোগ করুন, প্রয়োজনে একটি সম্পাদনের সময়সূচী সেট আপ করতে পরামিতিগুলি বরাবর পাস করুন৷ আপনি Admin SDK ব্যবহার করে কোড লিখে এবং Cloud Functions for Firebase স্থাপন করে এটি অর্জন করতে পারেন।

টাস্ক কিউ ফাংশন লিখুন

টাস্ক কিউ ফাংশন লেখা শুরু করতে onDispatch ব্যবহার করুন। একটি টাস্ক কিউ ফাংশন লেখার একটি গুরুত্বপূর্ণ অংশ হল প্রতি-সারিতে পুনরায় চেষ্টা করা এবং রেট-সীমিত কনফিগারেশন সেট করা। এই পৃষ্ঠার কোড নমুনাগুলি এমন একটি অ্যাপের উপর ভিত্তি করে তৈরি করা হয়েছে যা একটি পরিষেবা সেট আপ করে যা NASA-এর Astronomy Picture of the Day থেকে সমস্ত ছবি ব্যাক আপ করে:

টাস্ক কিউ ফাংশন কনফিগার করুন

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

exports.backupApod = functions
    .runWith( {secrets: ["NASA_API_KEY"]})
    .tasks.taskQueue({
      retryConfig: {
        maxAttempts: 5,
        minBackoffSeconds: 60,
      },
      rateLimits: {
        maxConcurrentDispatches: 6,
      },
    }).onDispatch(async (data) => {
  • retryConfig.maxAttempts=5 : টাস্ক সারিতে থাকা প্রতিটি কাজ স্বয়ংক্রিয়ভাবে 5 বার পর্যন্ত পুনরায় চেষ্টা করা হয়। এটি নেটওয়ার্ক ত্রুটি বা নির্ভরশীল, বাহ্যিক পরিষেবার অস্থায়ী পরিষেবা ব্যাহতের মতো ক্ষণস্থায়ী ত্রুটিগুলি প্রশমিত করতে সহায়তা করে৷
  • retryConfig.minBackoffSeconds=60 : প্রতিটি কাজ প্রতিটি প্রচেষ্টা থেকে কমপক্ষে 60 সেকেন্ডের মধ্যে পুনরায় চেষ্টা করা হয়। এটি প্রতিটি প্রচেষ্টার মধ্যে একটি বড় বাফার প্রদান করে তাই আমরা খুব দ্রুত 5টি পুনঃপ্রচেষ্টা শেষ করার জন্য তাড়াহুড়ো করি না।
  • rateLimits.maxConcurrentDispatch=6 : একটি নির্দিষ্ট সময়ে সর্বাধিক 6টি কাজ পাঠানো হয়। এটি অন্তর্নিহিত ফাংশনে অনুরোধের একটি স্থির প্রবাহ নিশ্চিত করতে সাহায্য করে এবং সক্রিয় দৃষ্টান্ত এবং ঠান্ডা শুরুর সংখ্যা কমাতে সাহায্য করে।

টেস্ট টাস্ক সারি ফাংশন

বেশিরভাগ ক্ষেত্রে, Cloud Functions এমুলেটর টাস্ক সারি ফাংশন পরীক্ষা করার সর্বোত্তম উপায়। টাস্ক কিউ ফাংশন ইমুলেশনের জন্য আপনার অ্যাপকে কীভাবে উপকরণ তৈরি করবেন তা শিখতে এমুলেটর স্যুট ডকুমেন্টেশন দেখুন।

অতিরিক্তভাবে, টাস্ক কিউ ফাংশনগুলি Firebase Local Emulator Suite সাধারণ HTTP ফাংশন হিসাবে উন্মুক্ত করা হয়। আপনি একটি json ডেটা পেলোড সহ একটি HTTP POST অনুরোধ পাঠিয়ে একটি অনুকরণ করা টাস্ক ফাংশন পরীক্ষা করতে পারেন:

 # start the Firebase Emulators
 firebase emulators:start

 # trigger the emulated task queue function
 curl \
  -X POST                                            # An HTTP POST request...
  -H "content-type: application/json" \              # ... with a JSON body
  http://localhost:$PORT/$PROJECT_ID/$REGION/$NAME \ # ... to function url
  -d '{"data": { ... some data .... }}'              # ... with JSON encoded data

টাস্ক কিউ ফাংশন স্থাপন করুন

Firebase CLI ব্যবহার করে টাস্ক কিউ ফাংশন স্থাপন করুন:

$ firebase deploy --only functions:backupApod

প্রথমবার একটি টাস্ক কিউ ফাংশন স্থাপন করার সময়, CLI আপনার সোর্স কোডে নির্দিষ্ট বিকল্পগুলি (রেট সীমিত করা এবং পুনরায় চেষ্টা) সহ Cloud Tasks একটি টাস্ক সারি তৈরি করে।

ফাংশন স্থাপন করার সময় আপনি যদি অনুমতি ত্রুটির সম্মুখীন হন, তাহলে নিশ্চিত করুন যে যথাযথ IAM ভূমিকাগুলি স্থাপনার কমান্ড চালাচ্ছেন এমন ব্যবহারকারীকে বরাদ্দ করা হয়েছে।

সারিবদ্ধ টাস্ক সারি ফাংশন

Node.js-এর জন্য Firebase Admin SDK ব্যবহার করে Cloud Functions for Firebase মতো বিশ্বস্ত সার্ভার পরিবেশ থেকে টাস্ক সারি ফাংশনগুলি Cloud Tasks সারিবদ্ধ করা যেতে পারে। আপনি যদি Admin SDK এ নতুন হন, শুরু করতে একটি সার্ভারে Firebase যোগ করুন দেখুন।

একটি সাধারণ প্রবাহে, Admin SDK একটি নতুন টাস্ক তৈরি করে, এটিকে Cloud Tasks সারিবদ্ধ করে এবং টাস্কের জন্য কনফিগারেশন সেট করে:

exports.enqueueBackupTasks = functions.https.onRequest(
async (_request, response) => {
  const queue = getFunctions().taskQueue("backupApod");
  const enqueues = [];
  for (let i = 0; i <= 10; i += 1) {
    // Enqueue each task with i*60 seconds delay. Our task queue function
    // should process ~1 task/min.
    const scheduleDelaySeconds = i * 60 
    enqueues.push(
        queue.enqueue(
          { id: `task-${i}` },
          {
            scheduleDelaySeconds,
            dispatchDeadlineSeconds: 60 * 5 // 5 minutes
          },
        ),
    );
  }
  await Promise.all(enqueues);
  response.sendStatus(200);

});
  • scheduleDelaySeconds : নমুনা কোডটি Nth টাস্কের জন্য Nth মিনিটের বিলম্ব যুক্ত করে কার্য সম্পাদনকে ছড়িয়ে দেওয়ার চেষ্টা করে। এটি ট্রিগারিং ~ 1 টাস্ক/মিনিট অনুবাদ করে৷ মনে রাখবেন যে আপনি যদি Cloud Tasks একটি নির্দিষ্ট সময়ে একটি টাস্ক ট্রিগার করতে চান তবে আপনি scheduleTime ব্যবহার করতে পারেন।
  • dispatchDeadlineSeconds : একটি টাস্ক সম্পূর্ণ হওয়ার জন্য Cloud Tasks অপেক্ষা করবে সর্বাধিক সময়। Cloud Tasks সারির কনফিগারেশনের পরে বা এই সময়সীমায় না পৌঁছানো পর্যন্ত টাস্কটি পুনরায় চেষ্টা করবে। নমুনায়, সারিটি 5 বার পর্যন্ত টাস্কটি পুনরায় চেষ্টা করার জন্য কনফিগার করা হয়েছে, তবে পুরো প্রক্রিয়াটি (পুনরায় চেষ্টা সহ) 5 মিনিটের বেশি সময় লাগলে টাস্কটি স্বয়ংক্রিয়ভাবে বাতিল হয়ে যায়।

সমস্যা সমাধান

Cloud Tasks"> Cloud Tasks লগিং চালু করুন

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

আইএএম অনুমতি

কাজগুলি সারিবদ্ধ করার সময় বা Cloud Tasks আপনার টাস্ক কিউ ফাংশনগুলি চালু করার চেষ্টা করার সময় আপনি PERMISSION DENIED ত্রুটি দেখতে পারেন৷ নিশ্চিত করুন যে আপনার প্রকল্পে নিম্নলিখিত IAM বাইন্ডিং আছে:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
  --role=roles/cloudtasks.enqueuer
  • Cloud Tasks টাস্কগুলি সারিবদ্ধ করতে ব্যবহৃত পরিচয়টির জন্য Cloud Tasks কোনও টাস্কের সাথে যুক্ত পরিষেবা অ্যাকাউন্ট ব্যবহার করার অনুমতি প্রয়োজন৷

    নমুনায়, এটি App Engine ডিফল্ট পরিষেবা অ্যাকাউন্ট

App Engine ডিফল্ট পরিষেবা অ্যাকাউন্টের ব্যবহারকারী হিসাবে App Engine ডিফল্ট পরিষেবা অ্যাকাউন্ট কীভাবে যুক্ত করবেন তার নির্দেশাবলীর জন্য Google ক্লাউড IAM ডকুমেন্টেশন দেখুন।

gcloud functions add-iam-policy-binding $FUNCTION_NAME \
  --region=us-central1 \
  --member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
  --role=roles/cloudfunctions.invoker