ক্লাউড টাস্ক সহ HTTP অনুরোধগুলিকে বাফার করুন৷

১. ভূমিকা

c6ac6ed05292f13e.png

ক্লাউড টাস্কস হলো বিপুল সংখ্যক টাস্কের সম্পাদন, প্রেরণ এবং ডেলিভারি ব্যবস্থাপনার জন্য একটি সম্পূর্ণভাবে পরিচালিত কিউয়িং পরিষেবা।

ক্লাউড টাস্ক আপনাকে কাজের অংশগুলোকে ( যাদেরকে টাস্ক বলা হয়) আলাদা করতে দেয়, যেগুলো আপনার মূল অ্যাপ্লিকেশন ফ্লো-এর বাইরে স্বাধীনভাবে সম্পাদন করা যায় (যেমন: ডাটাবেস এন্ট্রি আপডেট করার টাস্ক), এবং আপনার তৈরি করা হ্যান্ডলার ব্যবহার করে সেগুলোকে অ্যাসিঙ্ক্রোনাসভাবে প্রসেস করার জন্য পাঠিয়ে দিতে পারেন।

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

d59ffe8d34138c88.png

ক্লাউড টাস্কের কয়েকটি প্রধান বৈশিষ্ট্য হলো:

  • HTTP টার্গেট: ইন্ডাস্ট্রি স্ট্যান্ডার্ড OAuth/OIDC অথেনটিকেশন ব্যবহার করে সুরক্ষিতভাবে Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions বা অন-প্রিমিসেস সিস্টেমে চলমান যেকোনো HTTP সার্ভিসকে টার্গেট করে টাস্ক যোগ করুন।
  • টাস্ক ডিডুপ্লিকেশন : একাধিকবার যোগ করা টাস্কগুলো শুধুমাত্র একবারই প্রেরণ করা হবে।
  • নিশ্চিত ডেলিভারি : কাজগুলো অন্তত একবার ডেলিভারি করার নিশ্চয়তা দেওয়া হয় এবং বেশিরভাগ কাজ ঠিক একবারই ডেলিভারি করা হয়।
  • হার এবং পুনঃপ্রচেষ্টা নিয়ন্ত্রণ: টাস্ক প্রেরণের হার, সর্বোচ্চ সংখ্যক প্রচেষ্টা এবং প্রতিটি প্রচেষ্টার মধ্যে অপেক্ষার সর্বনিম্ন সময় নির্ধারণের মাধ্যমে কার্য সম্পাদন নিয়ন্ত্রণ করুন।
  • ভবিষ্যৎ সময়সূচী নির্ধারণ: কোনো কাজ কখন চালানো হবে তা নিয়ন্ত্রণ করুন।

এই কোডল্যাবে, আপনি প্রথমে শিখবেন কিভাবে HTTP টার্গেট টাস্কের জন্য একটি সাধারণ ক্লাউড টাস্কস কিউ তৈরি এবং ব্যবহার করতে হয়। তারপর, আপনি শিখবেন কিভাবে কিউ-লেভেল HTTP URI ওভাররাইড এবং নতুন BufferTask API ব্যবহার করে ক্লাউড টাস্কসের মাধ্যমে আরও সহজে HTTP রিকোয়েস্ট বাফার করা যায়।

আপনি যা শিখবেন

  • HTTP টার্গেট টাস্ক কীভাবে তৈরি করবেন
  • নতুন কিউ-লেভেল HTTP URI ওভাররাইড ব্যবহার করে কীভাবে HTTP টার্গেট টাস্ক তৈরি করবেন
  • নতুন কিউ-লেভেল HTTP URI ওভাররাইড ব্যবহার করে কীভাবে অপেক্ষারত কাজগুলো পরিবর্তন করবেন।
  • নতুন BufferTask API ব্যবহার করে কীভাবে আরও সহজে HTTP অনুরোধ বাফার করা যায়।

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

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

গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন:

55efc1aaa7a4d3ad.png

পরিবেশটি প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি শেষ হলে, আপনি এইরকম কিছু দেখতে পাবেন:

7ffe5cbb04455448.png

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

৩. HTTP টার্গেট টাস্কের জন্য একটি নিয়মিত কিউ তৈরি করুন।

এই প্রথম ধাপে, আপনি শিখবেন কীভাবে একটি সাধারণ ক্লাউড টাস্ক কিউ তৈরি করতে হয় এবং একটি ক্লাউড রান সার্ভিসকে লক্ষ্য করে তাতে HTTP টাস্ক যোগ করতে হয়।

d4f09a342c8eab.png

HTTP টার্গেট টাস্ক বলতে কী বোঝায়?

HTTP টার্গেট টাস্কগুলো ইন্ডাস্ট্রি স্ট্যান্ডার্ড OAuth/OIDC অথেনটিকেশন ব্যবহার করে সুরক্ষিতভাবে Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions বা অন-প্রিমিসেস সিস্টেমে চলমান যেকোনো HTTP সার্ভিসকে টার্গেট করতে পারে।

একটি ক্লাউড রান পরিষেবা স্থাপন করুন

প্রথমে, প্রয়োজনীয় API-গুলো সক্রিয় আছে কিনা তা নিশ্চিত করুন:

gcloud services enable \
  cloudtasks.googleapis.com \
  run.googleapis.com

একটি ক্লাউড রান সার্ভিস ডেপ্লয় করুন যা HTTP টাস্কগুলোর টার্গেট হিসেবে কাজ করবে:

SERVICE1=hello1
REGION=us-central1

gcloud run deploy $SERVICE1 \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

একটি ক্লাউড টাস্ক কিউ তৈরি করুন

একটি নিয়মিত ক্লাউড টাস্ক কিউ তৈরি করুন:

QUEUE1=http-queue
LOCATION=us-central1

gcloud tasks queues create $QUEUE1 --location=$LOCATION

কিউটি সাময়িকভাবে থামিয়ে দিন, যাতে HTTP টাস্কগুলো তৈরি হওয়ার সময় আপনি তা পর্যবেক্ষণ করতে পারেন:

gcloud tasks queues pause $QUEUE1 --location=$LOCATION

৪. একটি HTTP টাস্ক তৈরি ও পরীক্ষা করুন

এই ধাপে, আপনি পূর্বে তৈরি করা কিউটিকে টার্গেট করে একটি HTTP টাস্ক তৈরি করবেন।

একটি HTTP টাস্ক তৈরি করুন

আপনি gcloud ব্যবহার করে HTTP টাস্ক তৈরি করতে পারেন:

gcloud tasks create-http-task \
    --queue=$QUEUE1 \
    --location=$LOCATION \
    --url=$SERVICE1_URL \
    --method=GET

ঐচ্ছিক: আপনি ক্লায়েন্ট লাইব্রেরি ব্যবহার করেও একটি HTTP টাস্ক তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনি Program.cs ফাইলে একটি C# নমুনা দেখতে পারেন, যেখানে একটি HTTP অনুরোধকে একটি Task এবং একটি TaskRequest মধ্যে আবদ্ধ করে CloudTasksClient এর মাধ্যমে Cloud Tasks-এ পাঠানো হয়।

var taskRequest = new CreateTaskRequest
{
    Parent = new QueueName(projectId, location, queue).ToString(),
    Task = new Task
    {
        HttpRequest = new HttpRequest
        {
            HttpMethod = HttpMethod.Get,
            Url = url
        }
    }
};

var client = CloudTasksClient.Create();
var response = client.CreateTask(taskRequest);

কিউতে টাস্কটি তৈরি ও যোগ করতে আপনি এটি নিম্নোক্তভাবে চালাতে পারেন:

dotnet run $PROJECT_ID $LOCATION $QUEUE1 $SERVICE1_URL

HTTP টাস্কটি পরীক্ষা করুন

এই পর্যায়ে, টাস্কটি তৈরি হয়েছে কিন্তু এখনও সম্পাদিত হয়নি, কারণ কিউটি বিরতি দেওয়া আছে। আপনি কিউগুলো তালিকাভুক্ত করে এটি যাচাই করতে পারেন:

gcloud tasks queues list --location=$LOCATION

আপনি কিউটিকে PAUSED অবস্থায় দেখতে পাবেন:

QUEUE_NAME  STATE
http-queue  PAUSED

সারিটি পুনরায় শুরু করুন:

gcloud tasks queues resume $QUEUE --location=$LOCATION

ক্লাউড রান পরিষেবার লগগুলি পরীক্ষা করুন:

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1

আপনি দেখতে পাবেন যে ক্লাউড রান পরিষেবাটি ক্লাউড টাস্কস থেকে একটি HTTP GET অনুরোধ পেয়েছে:

httpRequest:
  latency: 0.227597158s
  protocol: HTTP/1.1
  remoteIp: 35.243.23.192
  requestMethod: GET
  requestSize: '415'
  requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/
  responseSize: '5510'
  serverIp: 216.239.32.53
  status: 200
  userAgent: Google-Cloud-Tasks

৫. রাউটিং কনফিগারেশন সহ একটি কিউ তৈরি করুন

এই ধাপে, আপনি শিখবেন কীভাবে 'কিউ-লেভেল টাস্ক রাউটিং কনফিগারেশন' ফিচারটি ব্যবহার করে একটি রাউটিং কনফিগারেশনের মাধ্যমে HTTP URI ওভাররাইড যোগ করে একটি ক্লাউড টাস্ক কিউ তৈরি করতে হয়। এরপর আপনি প্রথম ক্লাউড রান সার্ভিসটিকে টার্গেট করার জন্য এতে HTTP টাস্ক যোগ করবেন এবং লক্ষ্য করবেন যে রাউটিং কনফিগারেশনটি URI-কে ওভাররাইড করে টাস্কগুলোকে দ্বিতীয় ক্লাউড রান সার্ভিসে রাউট করছে।

5d1ec61a933f77.png

কিউ-লেভেল টাস্ক রাউটিং কনফিগারেশন বলতে কী বোঝায়?

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

কিউ-স্তরে নিম্নলিখিত কনফিগারেশন সেট করা যেতে পারে:

  • হেডার : কিউ-লেভেল হেডার যখন কিউ-লেভেলে নির্দিষ্ট করা হয়, তখন এটি কিউ-তে থাকা সমস্ত টাস্কের জন্য হেডার আপসার্ট করবে।
  • HTTP মেথড : কিউ-লেভেলে নির্দিষ্ট করা হলে, HTTP মেথডটি কিউ-তে থাকা সমস্ত টাস্কের HTTP মেথডকে ওভাররাইড করবে।
  • টার্গেট ইউআরআই : হোস্ট, পাথ, কোয়েরি, পোর্ট, স্কিম (HTTP বা HTTPS) আলাদাভাবে পরিবর্তন করা যেতে পারে।
  • অনুমোদন : কিউ-লেভেলে নির্দিষ্ট করা OIDC/OAuth কনফিগারেশনটি টাস্ক-লেভেলের OIDC/OAuth কনফিগারেশনকে ওভাররাইড করবে।

দ্বিতীয় একটি ক্লাউড রান পরিষেবা স্থাপন করুন

একটি দ্বিতীয় ক্লাউড রান সার্ভিস ডেপ্লয় করুন যা পরবর্তীতে HTTP URI ওভাররাইডের টার্গেট হিসেবে কাজ করবে:

SERVICE2=hello2
REGION=us-central1

gcloud run deploy $SERVICE2 \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

পরবর্তীতে ব্যবহারের জন্য সার্ভিস ইউআরএল-এর হোস্ট সংরক্ষণ করুন:

SERVICE2_URL=$(gcloud run services describe $SERVICE2 --region $REGION --format 'value(status.url)')
SERVICE2_HOST=$(echo $SERVICE2_URL | sed 's,http[s]*://,,g')

রাউটিং কনফিগারেশন সহ একটি ক্লাউড টাস্ক কিউ তৈরি করুন

দ্বিতীয় ক্লাউড রান সার্ভিসে HTTP URI ওভাররাইড সহ একটি রাউটিং কনফিগারেশন ব্যবহার করে একটি কিউ তৈরি করুন।

QUEUE2=http-queue-uri-override

gcloud beta tasks queues create $QUEUE2 \
  --http-uri-override=host:$SERVICE2_HOST \
  --location=$LOCATION

উল্লেখ্য যে, URI ওভাররাইডটি দ্বিতীয় ক্লাউড রান সার্ভিসকে নির্দেশ করে। কিউতে যোগ করা যেকোনো HTTP টাস্কের মূল URI হোস্ট ওভাররাইড হয়ে যাবে। আপনি কিউ কনফিগারেশনটি দেখতে পারেন:

gcloud beta tasks queues describe $QUEUE2 --location=$LOCATION

আপনি দেখতে পাবেন যে httpTarget এর একটি uriOverride আছে যা দ্বিতীয় সার্ভিসটির হোস্টকে নির্দেশ করছে:

httpTarget:
  uriOverride:
    host: hello2-idcwffc3yq-uc.a.run.app
    pathOverride: {}
    queryOverride: {}
...

কিউটি সাময়িকভাবে থামিয়ে দিন, যাতে HTTP টাস্কগুলো তৈরি হওয়ার সময় আপনি তা পর্যবেক্ষণ করতে পারেন:

gcloud tasks queues pause $QUEUE2 --location=$LOCATION

৬. রাউটিং কনফিগারেশন ব্যবহার করে কিউটির জন্য একটি HTTP টাস্ক তৈরি ও পরীক্ষা করুন।

এই ধাপে, আপনি প্রথম সার্ভিসটিকে টার্গেট করে একটি HTTP টাস্ক তৈরি করবেন এবং লক্ষ্য করবেন যে এর URI-টি কিউ দ্বারা ওভাররাইড হয়ে দ্বিতীয় সার্ভিসটিকে নির্দেশ করছে।

একটি HTTP টাস্ক তৈরি করুন

প্রথম সার্ভিসটির URL দিয়ে একটি HTTP টাস্ক তৈরি করুন:

gcloud tasks create-http-task \
    --queue=$QUEUE2 \
    --location=$LOCATION \
    --url=$SERVICE1_URL \
    --method=GET

HTTP টাস্কটি পরীক্ষা করুন

সারিটি পুনরায় শুরু করুন:

gcloud tasks queues resume $QUEUE2 --location=$LOCATION

আপনি দেখতে পাবেন যে ওভাররাইডের কারণে দ্বিতীয় (প্রথমটি নয়) ক্লাউড রান সার্ভিসটি ক্লাউড টাস্কস থেকে একটি HTTP GET রিকোয়েস্ট পেয়েছে:

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE2" --limit 1
---
httpRequest:
  latency: 0.228982142s
  protocol: HTTP/1.1
  remoteIp: 35.187.132.84
  requestMethod: GET
  requestSize: '426'
  requestUrl: https://hello2-idcwffc3yq-uc.a.run.app/
  responseSize: '5510'
  serverIp: 216.239.34.53
  status: 200
  userAgent: Google-Cloud-Tasks

৭. রাউটিং কনফিগারেশন ব্যবহার করে মুলতুবি থাকা কাজগুলো পরিবর্তন করুন।

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

আবার সারিটি থামান:

gcloud tasks queues pause $QUEUE2 --location=$LOCATION

টাস্ক ইউআরএল হিসেবে google.com ব্যবহার করে একটি HTTP টাস্ক তৈরি করুন:

gcloud tasks create-http-task \
    --queue=$QUEUE2 \
    --location=$LOCATION \
    --url=https://www.google.com \
    --method=GET

কিউটি বিরতি দেওয়া থাকায় টাস্কটি অপেক্ষমান অবস্থায় রয়েছে।

এখন, প্রথম সার্ভিসটিকে নির্দেশ করার জন্য HTTP URI ওভাররাইডটি আপডেট করুন। এর ফলে পেন্ডিং টাস্কের হোস্ট google.com থেকে প্রথম সার্ভিসের হোস্টে ওভাররাইড হয়ে যাবে:

SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)')
SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g')

gcloud beta tasks queues update $QUEUE2 \
  --http-uri-override=host:$SERVICE1_HOST \
  --location=$LOCATION

সারিটি পুনরায় শুরু করুন:

gcloud tasks queues resume $QUEUE2 --location=$LOCATION

আপনি দেখতে পাবেন যে ওভাররাইডের কারণে প্রথম ক্লাউড রান সার্ভিসটি ক্লাউড টাস্কস থেকে একটি HTTP GET রিকোয়েস্ট পেয়েছে ( google.com এর পরিবর্তে):

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1
---
httpRequest:
  latency: 0.228982142s
  protocol: HTTP/1.1
  remoteIp: 35.187.132.84
  requestMethod: GET
  requestSize: '426'
  requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/
  responseSize: '5510'
  serverIp: 216.239.34.53
  status: 200
  userAgent: Google-Cloud-Tasks

৮. BufferTask API-এর জন্য একটি কিউ তৈরি করুন।

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

এই ধাপে, আপনি দেখবেন কীভাবে কিউ-লেভেল HTTP URI ওভাররাইড এবং নতুন BufferTask API ব্যবহার করে শুধুমাত্র একটি HTTP অনুরোধ পাঠানোর মাধ্যমে আরও সহজে HTTP টার্গেট টাস্ক তৈরি করা যায়। যে কোনো অ্যাপ্লিকেশন যা HTTP অনুরোধ পাঠাতে পারে, তা এখন HTTP টার্গেট টাস্ক তৈরি করতে পারবে।

b1606516297fc4b6.png

BufferTask API বলতে কী বোঝায়?

CreateTask API হলো টাস্ক তৈরি করার পুরোনো পদ্ধতি এবং এর জন্য ক্লায়েন্টকে সমস্ত প্রয়োজনীয় ফিল্ড পূরণ করে একটি Task অবজেক্ট API-তে পাঠাতে হয়।

BufferTask API একটি নতুন ফিচার যা ব্যবহারকারীদের কোনো টাস্ক কনফিগারেশন (HTTP URL, হেডার, অথরাইজেশন) প্রদান করার প্রয়োজন ছাড়াই একটি HTTP টাস্ক তৈরি করার সুযোগ দেয়, যার মাধ্যমে আপনি সরাসরি Buffer API-তে একটি মেসেজ বা আপনার রিকোয়েস্টের বডি পাঠাতে পারেন।

এর ফলে সার্ভিসগুলোর সাথে ইন্টিগ্রেশন আরও সহজ হয়, কারণ এখন ক্লায়েন্ট সাইডে কোনো কোড পরিবর্তনের প্রয়োজন ছাড়াই আপনার সার্ভিসের সামনে ক্লাউড টাস্ক স্থাপন করা যায়। BufferTask API-তে পাঠানো যেকোনো HTTP অনুরোধকে একটি Task অবজেক্ট হিসেবে মোড়ানো হবে এবং কিউ-লেভেলে সেট করা গন্তব্যে পৌঁছে দেওয়া হবে।

BufferTask API ব্যবহার করার জন্য, কিউ-তে টার্গেট ইউআরআই (Target URI) কনফিগারেশন সেট করা থাকতে হবে, অথবা অন্য কথায়, BufferTask API ব্যবহারের জন্য কিউ-লেভেল রাউটিং কনফিগারেশন (Queue-level Routing Configuration) ফিচারটি একটি পূর্বশর্ত।

রাউটিং কনফিগারেশন সহ একটি ক্লাউড টাস্ক কিউ তৈরি করুন

পূর্ববর্তী ধাপে আমরা যে প্রথম সার্ভিসটি ডেপ্লয় করেছিলাম, সেটির দিকে নির্দেশ করে একটি রাউটিং কনফিগারেশন সহ একটি কিউ তৈরি করুন:

SERVICE1=hello1
SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)')
SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g')
QUEUE3=http-queue-uri-override-buffer

gcloud beta tasks queues create $QUEUE3 \
  --http-uri-override=host:$SERVICE1_HOST \
  --location=$LOCATION

কিউটি সাময়িকভাবে থামিয়ে দিন, যাতে HTTP টাস্কগুলো তৈরি হওয়ার সময় আপনি তা পর্যবেক্ষণ করতে পারেন:

gcloud tasks queues pause $QUEUE3 --location=$LOCATION

৯. BufferTask API ব্যবহার করে HTTP অনুরোধ বাফার করুন।

এই ধাপে, আপনি BufferTask API ব্যবহার করে সাধারণ HTTP GET বা POST অনুরোধগুলিকে বাফার করবেন। নেপথ্যে, Cloud Tasks এই HTTP অনুরোধগুলিকে কিউ-এর ডিফল্ট রাউটিং কনফিগারেশন সেটিংস সহ HTTP টাস্কে রূপান্তরিত করবে।

প্রথমে, অ্যাক্সেস টোকেন পেতে লগইন করুন এবং কিছু ভেরিয়েবল সেট করুন:

gcloud auth application-default login
ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
PROJECT_ID=$(gcloud config get-value project)
TASKS_QUEUES_API="https://cloudtasks.googleapis.com/v2beta3/projects/$PROJECT_ID/locations/$LOCATION/queues"

একটি HTTP টাস্ক তৈরি করুন

BufferTask API ব্যবহার করে একটি HTTP টাস্ক তৈরি করুন। লক্ষ্য করুন, এটি একটি টাস্ক তৈরি করার প্রয়োজন ছাড়াই একটি সাধারণ HTTP GET অনুরোধ মাত্র:

curl -X GET "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

HTTP POST এবং একটি বডি সহ আরেকটি HTTP টাস্ক তৈরি করুন:

curl -X POST "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d "{'message': 'Hello World'}"

ঐচ্ছিক: আপনি ক্লায়েন্ট লাইব্রেরি ব্যবহার করেও একটি HTTP টাস্ক তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনি Program.cs ফাইলটিতে একটি C# স্যাম্পল দেখতে পারেন, যেখানে কোনো Task মধ্যে না রেখে বা Cloud Tasks-এর ক্লায়েন্ট-লাইব্রেরির প্রয়োজন ছাড়াই সরাসরি BufferTask API-তে একটি HTTP GET রিকোয়েস্ট পাঠানো হয়।

var BufferTaskApiUrl = $"https://cloudtasks.googleapis.com/v2beta3/projects/{ProjectId}/locations/{Location}/queues/{Queue}/tasks:buffer";

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Add("Authorization", $"Bearer {AccessToken}");
    var response = await client.GetAsync(BufferTaskApiUrl);
    var content = await response.Content.ReadAsStringAsync();
    Console.WriteLine($"Response: {content}");
}

You can run it as follows:

dotnet run $PROJECT_ID $LOCATION $QUEUE3 $ACCESS_TOKEN

BufferTask API, HTTP রিকোয়েস্টগুলো থেকে একটি টাস্ক তৈরি করার কাজটি করে এবং URI-এর জন্য কিউ-এর রাউটিং কনফিগারেশন সেটিংস থেকে URL-টি যোগ করে দেয়।

HTTP টাস্কটি পরীক্ষা করুন

সারিটি পুনরায় শুরু করুন:

gcloud tasks queues resume $QUEUE3 --location=$LOCATION

আপনি দেখতে পাবেন যে ক্লাউড রান পরিষেবাটি ক্লাউড টাস্কস থেকে HTTP GET এবং POST অনুরোধ পেয়েছে:

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 4
---
httpRequest:
  latency: 0.002279292s
  protocol: HTTP/1.1
  remoteIp: 35.243.23.42
  requestMethod: POST
  requestSize: '777'
  requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/
  responseSize: '5450'
  serverIp: 216.239.32.53
  status: 200
  userAgent: Google-Cloud-Tasks
...
httpRequest:
  latency: 0.228982142s
  protocol: HTTP/1.1
  remoteIp: 35.187.132.84
  requestMethod: GET
  requestSize: '426'
  requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/
  responseSize: '5510'
  serverIp: 216.239.34.53
  status: 200
  userAgent: Google-Cloud-Tasks

১০. অভিনন্দন

অভিনন্দন, আপনি কোডল্যাবটি সম্পন্ন করেছেন!

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

পরিচ্ছন্নতা (ঐচ্ছিক)

চার্জ এড়ানোর জন্য রিসোর্সগুলো পরিষ্কার করে নেওয়া ভালো।

আপনার যদি প্রজেক্টটির প্রয়োজন না হয়, তবে আপনি সহজেই প্রজেক্টটি মুছে ফেলতে পারেন:

gcloud projects delete $PROJECT_ID

আপনার প্রয়োজন হলে, রিসোর্সগুলো একে একে মুছে ফেলতে পারেন।

ক্লাউড রান পরিষেবাগুলি মুছে ফেলুন:

gcloud run services delete $SERVICE1 --region $REGION
gcloud run services delete $SERVICE2 --region $REGION

ক্লাউড টাস্ক কিউগুলো মুছে ফেলুন:

gcloud tasks queues delete $QUEUE1 --location=$LOCATION
gcloud tasks queues delete $QUEUE2 --location=$LOCATION
gcloud tasks queues delete $QUEUE3 --location=$LOCATION

আমরা যা আলোচনা করেছি

  • HTTP টার্গেট টাস্ক কীভাবে তৈরি করবেন
  • নতুন কিউ-লেভেল HTTP URI ওভাররাইড ব্যবহার করে কীভাবে HTTP টার্গেট টাস্ক তৈরি করবেন
  • নতুন কিউ-লেভেল HTTP URI ওভাররাইড ব্যবহার করে কীভাবে অপেক্ষারত কাজগুলো পরিবর্তন করবেন।
  • নতুন BufferTask API ব্যবহার করে কীভাবে আরও সহজে HTTP অনুরোধ বাফার করা যায়।