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


টাস্ক সারি ফাংশনগুলি 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 আপনার টাস্ক কিউ ফাংশনগুলি চালু করার চেষ্টা করার সময় আপনি 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
,


টাস্ক সারি ফাংশনগুলি 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 আপনার টাস্ক কিউ ফাংশনগুলি চালু করার চেষ্টা করার সময় আপনি 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
,


টাস্ক সারি ফাংশনগুলি 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 আপনার টাস্ক কিউ ফাংশনগুলি চালু করার চেষ্টা করার সময় আপনি 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
,


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

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

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

Cloud Functions for Firebase জন্য ফায়ারবেস এসডিকে এবং Firebase Admin SDK ভি 10.2.0 এর সাথে উচ্চতর আন্তঃসংযোগ এবং টাস্ক সারি ফাংশনগুলিকে সমর্থন করার জন্য উচ্চতর।

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

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

টাস্ক সারি ফাংশনগুলি ব্যবহার করতে, এই কর্মপ্রবাহটি অনুসরণ করুন:

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

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

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

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

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

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 সাধারণ এইচটিটিপি ফাংশন হিসাবে উন্মুক্ত করা হয়। আপনি একটি JSON ডেটা পে -লোড সহ একটি HTTP পোস্ট অনুরোধ প্রেরণ করে একটি অনুকরণীয় টাস্ক ফাংশন পরীক্ষা করতে পারেন:

 # 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 deploy --only functions:backupApod

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

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

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

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

একটি সাধারণ প্রবাহে, 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 : নমুনা কোডটি নবম টাস্কের জন্য নবম মিনিটের বিলম্বের সাথে যুক্ত করে কার্য সম্পাদন করার চেষ্টা করে। এটি ট্রিগার করতে ~ 1 টাস্ক/মিনিট অনুবাদ করে। নোট করুন যে আপনি যদি নির্দিষ্ট সময়ে কোনও কার্য ট্রিগার করতে Cloud Tasks চান তবে আপনি scheduleTime ব্যবহার করতে পারেন।
  • dispatchDeadlineSeconds : সর্বাধিক সময় Cloud Tasks কোনও কাজ শেষ হওয়ার জন্য অপেক্ষা করবে। Cloud Tasks কাতারের পুনরায় চেষ্টা কনফিগারেশন অনুসরণ করে বা এই সময়সীমাটি না হওয়া পর্যন্ত টাস্কটি আবার চেষ্টা করবে। নমুনায়, সারিটি 5 বার পর্যন্ত টাস্কটি পুনরায় চেষ্টা করার জন্য কনফিগার করা হয়েছে, তবে পুরো প্রক্রিয়াটি (পুনরায় চেষ্টা করার চেষ্টা সহ) 5 মিনিটেরও বেশি সময় নিলে টাস্কটি স্বয়ংক্রিয়ভাবে বাতিল হয়ে যায়।

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

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

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

আইএএম অনুমতি

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

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 ডিফল্ট পরিষেবা অ্যাকাউন্ট যুক্ত করবেন সে সম্পর্কে নির্দেশাবলীর জন্য গুগল ক্লাউড আইএএম ডকুমেন্টেশন দেখুন।

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