টাস্ক কিউ ফাংশনগুলো গুগল Cloud Tasks ব্যবহার করে আপনার অ্যাপকে মূল অ্যাপ্লিকেশন ফ্লো-এর বাইরে, সময়সাপেক্ষ, রিসোর্স-নিবিড় বা ব্যান্ডউইথ-সীমাবদ্ধ টাস্কগুলো অ্যাসিঙ্ক্রোনাসভাবে চালাতে সাহায্য করে।
উদাহরণস্বরূপ, ধরুন আপনি বিপুল সংখ্যক ইমেজ ফাইলের ব্যাকআপ তৈরি করতে চান, যা বর্তমানে একটি রেট লিমিটযুক্ত এপিআই-তে হোস্ট করা আছে। সেই এপিআই-এর একজন দায়িত্বশীল ব্যবহারকারী হিসেবে, আপনাকে তাদের রেট লিমিট মেনে চলতে হবে। এছাড়াও, এই ধরনের দীর্ঘ সময় ধরে চলা কাজটি টাইমআউট এবং মেমরি লিমিটের কারণে ব্যর্থ হওয়ার ঝুঁকিতে থাকতে পারে।
এই জটিলতা কমাতে, আপনি একটি টাস্ক কিউ ফাংশন লিখতে পারেন যা scheduleTime এবং dispatchDeadline মতো মৌলিক টাস্ক অপশনগুলো সেট করে এবং তারপর ফাংশনটিকে Cloud Tasks এর একটি কিউ-এর কাছে হস্তান্তর করে। Cloud Tasks পরিবেশটি বিশেষভাবে এই ধরনের অপারেশনগুলোর জন্য কার্যকর কনজেশন কন্ট্রোল এবং রিট্রাই পলিসি নিশ্চিত করার জন্য ডিজাইন করা হয়েছে।
Cloud Functions for Firebase এর Firebase SDK, টাস্ক কিউ ফাংশন সমর্থন করার জন্য Firebase Admin SDK v10.2.0 এবং তার পরবর্তী সংস্করণগুলোর সাথে আন্তঃকার্যকরীভাবে কাজ করে।
Firebase-এর সাথে টাস্ক কিউ ফাংশন ব্যবহার করলে Cloud Tasks প্রসেসিংয়ের জন্য চার্জ প্রযোজ্য হতে পারে। আরও তথ্যের জন্য Cloud Tasks প্রাইসিং দেখুন।
টাস্ক কিউ ফাংশন তৈরি করুন
টাস্ক কিউ ফাংশন ব্যবহার করতে, এই কর্মপ্রবাহ অনুসরণ করুন:
- Firebase SDK for Cloud Functions ব্যবহার করে একটি টাস্ক কিউ ফাংশন লিখুন।
- একটি HTTP অনুরোধের মাধ্যমে আপনার ফাংশনটি চালু করে পরীক্ষা করুন।
- Firebase CLI ব্যবহার করে আপনার ফাংশনটি ডিপ্লয় করুন। প্রথমবার আপনার টাস্ক কিউ ফাংশনটি ডিপ্লয় করার সময়, CLI আপনার সোর্স কোডে নির্দিষ্ট করা অপশনগুলো (রেট লিমিটিং এবং রিট্রাই) সহ Cloud Tasks -এ একটি টাস্ক কিউ তৈরি করবে।
- নতুন তৈরি করা টাস্ক কিউতে টাস্ক যোগ করুন এবং প্রয়োজনে এক্সিকিউশন শিডিউল সেট করার জন্য প্যারামিটার পাস করুন। আপনি 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: টাস্ক কিউ-তে থাকা প্রতিটি টাস্ক স্বয়ংক্রিয়ভাবে সর্বোচ্চ ৫ বার পর্যন্ত পুনরায় চেষ্টা করা হয়। এটি নেটওয়ার্ক ত্রুটি বা কোনো নির্ভরশীল, বাহ্যিক পরিষেবার অস্থায়ী পরিষেবা বিঘ্নের মতো ক্ষণস্থায়ী ত্রুটিগুলি প্রশমিত করতে সহায়তা করে। -
retryConfig.minBackoffSeconds=60: প্রতিটি টাস্ক কমপক্ষে ৬০ সেকেন্ডের ব্যবধানে পুনরায় চেষ্টা করা হয়। এটি প্রতিটি চেষ্টার মধ্যে একটি বড় বাফার প্রদান করে, যাতে আমরা খুব দ্রুত ৫টি পুনঃচেষ্টার সুযোগ শেষ করে ফেলার তাড়াহুড়ো না করি। -
rateLimits.maxConcurrentDispatch=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 রোলগুলো বরাদ্দ করা আছে।
টাস্ক কিউ ফাংশনগুলি এনকিউ করুন
Firebase Admin SDK for Node.js ব্যবহার করে Cloud Functions for Firebase মতো একটি বিশ্বস্ত সার্ভার পরিবেশ থেকে Cloud Tasks এ টাস্ক কিউ ফাংশন যুক্ত করা যায়। আপনি যদি Admin SDK গুলোতে নতুন হন, তবে শুরু করার জন্য “Add Firebase to a server” দেখুন।
সাধারণত, 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: এই স্যাম্পল কোডটি N-তম টাস্কের জন্য N-তম মিনিটের একটি ডিলে যুক্ত করে টাস্কগুলোর এক্সিকিউশনকে ছড়িয়ে দেওয়ার চেষ্টা করে। এর মানে হলো, প্রতি মিনিটে প্রায় ১টি টাস্ক ট্রিগার হবে। উল্লেখ্য যে, আপনি যদি Cloud Tasks একটি নির্দিষ্ট সময়ে কোনো টাস্ক ট্রিগার করাতে চান, তাহলেscheduleTimeও ব্যবহার করতে পারেন। -
dispatchDeadlineSeconds: একটি টাস্ক সম্পূর্ণ হওয়ার জন্য Cloud Tasks সর্বোচ্চ যে পরিমাণ সময় অপেক্ষা করবে। Cloud Tasks কিউ-এর রিট্রাই কনফিগারেশন অনুযায়ী অথবা এই ডেডলাইন শেষ না হওয়া পর্যন্ত টাস্কটি পুনরায় চেষ্টা করবে। এই স্যাম্পলে, কিউ-টি টাস্কটি সর্বোচ্চ ৫ বার পুনরায় চেষ্টা করার জন্য কনফিগার করা আছে, কিন্তু যদি পুরো প্রক্রিয়াটিতে (পুনরায় চেষ্টার প্রচেষ্টা সহ) ৫ মিনিটের বেশি সময় লাগে, তাহলে টাস্কটি স্বয়ংক্রিয়ভাবে বাতিল হয়ে যায়।
সমস্যা সমাধান
Cloud Tasks লগিং চালু করুন
Cloud Tasks লগগুলিতে একটি টাস্কের সাথে যুক্ত অনুরোধের স্থিতির মতো দরকারী ডায়াগনস্টিক তথ্য থাকে। ডিফল্টরূপে, Cloud Tasks লগগুলি বন্ধ থাকে, কারণ এটি আপনার প্রোজেক্টে সম্ভাব্য বিপুল পরিমাণ লগ তৈরি করতে পারে। আমরা আপনাকে পরামর্শ দিই যে, যখন আপনি সক্রিয়ভাবে আপনার টাস্ক কিউ ফাংশনগুলি ডেভেলপ এবং ডিবাগ করছেন, তখন ডিবাগ লগগুলি চালু করুন। লগিং চালু করা দেখুন।
আইএএম অনুমতি
টাস্ক কিউতে যুক্ত করার সময় অথবা Cloud Tasks যখন আপনার টাস্ক কিউ ফাংশনগুলো চালু করার চেষ্টা করে, তখন আপনি PERMISSION DENIED ত্রুটি দেখতে পারেন। নিশ্চিত করুন যে আপনার প্রোজেক্টে নিম্নলিখিত IAM বাইন্ডিংগুলো রয়েছে:
Cloud Tasks টাস্ক যুক্ত করার জন্য ব্যবহৃত আইডেন্টিটির
cloudtasks.tasks.createIAM পারমিশন প্রয়োজন।নমুনাটিতে, এটি হলো App Engine ডিফল্ট সার্ভিস অ্যাকাউন্ট।
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 সার্ভিস অ্যাকাউন্টকে এর ব্যবহারকারী হিসেবে কীভাবে যুক্ত করতে হয়, সে বিষয়ে নির্দেশাবলীর জন্য গুগল ক্লাউড আইএএম ডকুমেন্টেশন দেখুন।
টাস্ক কিউ ফাংশনটি চালু করতে ব্যবহৃত আইডেন্টিটির
cloudfunctions.functions.invokeপারমিশন প্রয়োজন।নমুনাটিতে, এটি হলো App Engine ডিফল্ট সার্ভিস অ্যাকাউন্ট।
gcloud functions add-iam-policy-binding $FUNCTION_NAME \
--region=us-central1 \
--member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
--role=roles/cloudfunctions.invoker