ট্রাফিক স্প্লিটিং, ক্রমান্বয়ে রোলআউট এবং রোলব্যাকের জন্য ক্লাউড রানে সংশোধনগুলি ব্যবহার করা

ট্রাফিক স্প্লিটিং, ক্রমান্বয়ে রোলআউট এবং রোলব্যাকের জন্য ক্লাউড রানে সংশোধনগুলি ব্যবহার করা

এই কোডল্যাব সম্পর্কে

subjectএপ্রি ৫, ২০২৫-এ শেষবার আপডেট করা হয়েছে
account_circleএকজন Googler-এর লেখা

1. ভূমিকা

ওভারভিউ

ক্লাউড রান রিভিশন আপনাকে নির্দিষ্ট করতে দেয় যে কোন রিভিশনে ট্রাফিক পাওয়া উচিত এবং প্রতিটি রিভিশনে কত শতাংশ ট্রাফিক পাঠাতে হবে। রিভিশন আপনাকে আগের রিভিশনে রোলব্যাক করতে, ধীরে ধীরে রিভিশন রোল আউট করতে এবং একাধিক রিভিশনের মধ্যে ট্রাফিককে বিভক্ত করতে দেয়।

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

আপনি কি শিখবেন

  • একটি ক্লাউড রান পরিষেবার জন্য দুই বা ততোধিক সংশোধনের মধ্যে ট্র্যাফিককে কীভাবে বিভক্ত করবেন
  • কিভাবে ধীরে ধীরে একটি নতুন সংশোধন রোল আউট
  • আগের রিভিশনে কিভাবে রোলব্যাক করবেন

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

পূর্বশর্ত

  • আপনি ক্লাউড কনসোলে লগ ইন করেছেন।
  • আপনি পূর্বে একটি ক্লাউড রান পরিষেবা স্থাপন করেছেন৷ উদাহরণস্বরূপ, আপনি শুরু করতে একটি ক্লাউড রান পরিষেবা স্থাপন করতে পারেন৷

এনভায়রনমেন্ট ভেরিয়েবল সেট করুন

আপনি পরিবেশের ভেরিয়েবল সেট করতে পারেন যা এই কোডল্যাব জুড়ে ব্যবহার করা হবে।

PROJECT_ID=YOUR-PROJECT-ID
REGION
=YOUR_REGION

BG_COLOR
=darkseagreen
SERVICE_NAME
=traffic-revisions-color
AR_REPO
=traffic-revisions-color-repo

পরিষেবার জন্য একটি আর্টিফ্যাক্ট রেজিস্ট্রি সংগ্রহস্থল তৈরি করুন

gcloud artifacts repositories create $AR_REPO \
   
--repository-format=docker \
   
--location=$REGION \
   
--description="codelab for finetuning using CR jobs" \
   
--project=$PROJECT_ID

3. ট্রাফিক বিভাজন

এই নমুনাটি আপনাকে দেখায় যে কীভাবে একটি ক্লাউড রান পরিষেবা তৈরি করতে হয় যা একটি রঙ পরিবেশ পরিবর্তনশীল পড়ে এবং সেই পটভূমির রঙ ব্যবহার করে পুনর্বিবেচনার নামের সাথে প্রতিক্রিয়া জানায়।

যদিও এই কোডল্যাবটি পাইথন ব্যবহার করে, আপনি যেকোনো রানটাইম ব্যবহার করতে পারেন।

এনভায়রনমেন্ট ভেরিয়েবল সেট করুন

আপনি পরিবেশের ভেরিয়েবল সেট করতে পারেন যা এই কোডল্যাব জুড়ে ব্যবহার করা হবে।

REGION=<YOUR_REGION>
PROJECT_ID=<YOUR-PROJECT-ID>
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo

পরিষেবা তৈরি করুন

প্রথমে, সেই ডিরেক্টরিতে সোর্স কোড এবং সিডির জন্য একটি ডিরেক্টরি তৈরি করুন।

mkdir traffic-revisions-codelab && cd $_

তারপর, নিম্নলিখিত বিষয়বস্তু সহ একটি main.py ফাইল তৈরি করুন:

import os
from flask import Flask, render_template_string

app = Flask(__name__)

TEMPLATE = """
<!doctype html>
<html lang="en">
<head>
    <title>Cloud Run Traffic Revisions</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 50vh;
            background-color: {{ bg_color }}; /* Set by environment variable */
            font-family: sans-serif;
        }
        .content {
            background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white background */
            padding: 2em;
            border-radius: 8px;
            text-align: center;
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
        }
    </style>
</head>
<body>
    <div class="content">
        <p>background color: <strong>{{ color_name }}</strong></p>
    </div>
</body>
</html>
"""

@app.route('/')
def main():
    """Serves the main page with a background color from the ENV."""
    # Get the color from the 'BG_COLOR' environment variable.
    # Default to 'white' if the variable is not set.
    color = os.environ.get('BG_COLOR', 'white').lower()

    return render_template_string(TEMPLATE, bg_color=color, color_name=color)

if __name__ == '__main__':
    port = int(os.environ.get('PORT', 8080))
    app.run(debug=True, host='0.0.0.0', port=port)

এরপরে, নিম্নলিখিত বিষয়বস্তু সহ একটি requirements.txt ফাইল তৈরি করুন:

Flask>=2.0.0
gunicorn>=20.0.0

অবশেষে একটি Dockerfile তৈরি করুন

FROM python:3.12-slim

WORKDIR
/app

COPY requirements
.txt .

RUN pip install
--no-cache-dir -r requirements.txt

COPY
. .

EXPOSE
8080

ENV PYTHONPATH
/app

CMD
["gunicorn", "--bind", "0.0.0.0:8080", "main:app"]

ক্লাউড বিল্ড ব্যবহার করে বিল্ডপ্যাক ব্যবহার করে আর্টিফ্যাক্ট রেজিস্ট্রিতে চিত্রটি তৈরি করুন:

gcloud builds submit \
   
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME

এবং ক্লাউড রানে একটি গাঢ়-সবুজ রঙের সাথে প্রথম সংশোধনটি স্থাপন করুন:

gcloud run deploy $SERVICE_NAME \
    --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
    --region $REGION \
    --allow-unauthenticated \
    --set-env-vars BG_COLOR=darkseagreen

পরিষেবাটি পরীক্ষা করার জন্য, আপনি সরাসরি আপনার ওয়েব ব্রাউজারে এন্ডপয়েন্ট খুলতে পারেন যাতে ব্যাকগ্রাউন্ডের রঙ গাঢ় সমুদ্রের সবুজ হিসাবে দেখা যায়।

এখন একটি ট্যান ব্যাকগ্রাউন্ড কালার দিয়ে একটি দ্বিতীয় রিভিশন স্থাপন করুন।

# update the env var
BG_COLOR=tan

gcloud run deploy $SERVICE_NAME \
    --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
    --region $REGION \
    --set-env-vars BG_COLOR=tan

এখন আপনি যখন ওয়েবসাইটটি রিফ্রেশ করবেন, আপনি ট্যান ব্যাকগ্রাউন্ডের রঙ দেখতে পাবেন।

ট্রাফিক 50-50 ভাগ করুন

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

gcloud run revisions list --service $SERVICE_NAME \
  --region $REGION --format 'value(REVISION)'

আপনি নীচের মত ফলাফল দেখতে হবে

traffic-revisions-color-00003-qoq
traffic-revisions-color-00002-zag

আপনি আপনার সংশোধনগুলির সাথে নিম্নলিখিত কমান্ডটি চালিয়ে দুটি সংশোধনের মধ্যে ট্রাফিক 50/50 ভাগ করতে পারেন:

gcloud run services update-traffic $SERVICE_NAME \
  --region $REGION \
  --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50

ট্রাফিক বিভাজন পরীক্ষা করুন

আপনি আপনার ব্রাউজারে পৃষ্ঠাটি রিফ্রেশ করে পরিষেবাটি পরীক্ষা করতে পারেন।

অর্ধেক সময়, আপনি গাঢ় সমুদ্রের সবুজ সংশোধন দেখতে পাবেন এবং বাকি অর্ধেক, আপনি ট্যান সংশোধন দেখতে পাবেন। আপনি আউটপুটে তালিকাভুক্ত সংশোধনের নামও দেখতে পাবেন, যেমন

<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>

4. ক্রমান্বয়ে রোলআউট

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

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

প্রথমে, ব্যাকগ্রাউন্ডের রঙ beige সেট করুন এবং ফাংশনটিকে gradual-rollouts-colors নাম দিয়ে স্থাপন করুন।

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

# update the env var
BG_COLOR=beige

gcloud beta run deploy gradual-rollouts-colors \
      --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
      --region $REGION \
      --allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

এখন ধরা যাক আমরা ব্যাকগ্রাউন্ড কালার ল্যাভেন্ডারের সাথে ধীরে ধীরে একটি নতুন রিভিশন রোল আউট করতে চাই।

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

# get the revision name

BEIGE_REVISION=$(gcloud run revisions list --service gradual-rollouts-colors \
  --region $REGION --format 'value(REVISION)')

# now set 100% traffic to that revision

gcloud run services update-traffic gradual-rollouts-colors \
  --to-revisions=$BEIGE_REVISION=100 \
  --region $REGION

আপনি Traffic: 100% radual-rollouts-colors-00001-yox

এখন আপনি একটি নতুন সংশোধন স্থাপন করতে পারেন যা কোনো ট্রাফিক পাবে না। কোন কোড পরিবর্তন করার পরিবর্তে, আপনি এই সংশোধনের জন্য BG_COLOR পরিবেশ পরিবর্তনশীল আপডেট করতে পারেন।

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

# update color

BG_COLOR=lavender

# deploy the function that will not receive any traffic
gcloud beta run deploy gradual-rollouts-colors \
      --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
      --region $REGION \
      --allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

এবং এখন আপনি যখন আপনার ব্রাউজারে ওয়েবসাইট পরিদর্শন করবেন, আপনি দেখতে পাবেন যে আপনি বেইজ রঙ দেখতে পাবেন, যদিও ল্যাভেন্ডারটি সম্প্রতি মোতায়েন করা হয়েছে।

0% ট্রাফিক পরিবেশনকারী একটি রিভিশন পরীক্ষা করুন

ধরুন আপনি যাচাই করেছেন যে আপনার সংশোধন সফলভাবে স্থাপন করা হয়েছে এবং এটি 0% ট্রাফিক পরিবেশন করছে। যদিও এটি স্বাস্থ্য পরীক্ষায় উত্তীর্ণ হয়েছে, আপনি এখনও যাচাই করতে চান যে এই সংশোধনটি ল্যাভেন্ডার পটভূমির রঙ ব্যবহার করছে।

ল্যাভেন্ডার সংশোধন পরীক্ষা করতে, আপনি সেই সংশোধনটিতে একটি ট্যাগ প্রয়োগ করতে পারেন। ট্যাগিং আপনাকে ট্রাফিক পরিবেশন না করে সরাসরি একটি নির্দিষ্ট URL-এ নতুন সংশোধন পরীক্ষা করতে দেয়।

প্রথমে, সেই সর্বশেষ সংশোধনের জন্য চিত্র URL পান (যা ল্যাভেন্ডার)।

IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')

এবং এখন সেই ইমেজটিকে তার সংশ্লিষ্ট রঙ দিয়ে ট্যাগ করুন।

gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION

আপনি নিম্নলিখিত অনুরূপ আউটপুট দেখতে পাবেন:

The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app

এখন আপনি যখন সেই নির্দিষ্ট রিভিশন ইউআরএলে যান, আপনি ল্যাভেন্ডার রঙ দেখতে পাবেন।

ধীরে ধীরে বাড়ছে যানজট

এখন, আপনি ল্যাভেন্ডার রিভিশনে ট্রাফিক পাঠানো শুরু করতে পারেন। নীচের উদাহরণটি দেখায় কিভাবে ট্রাফিকের 1% ল্যাভেন্ডারে পাঠাতে হয়।

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=1

ল্যাভেন্ডারে ট্রাফিকের 50% পাঠাতে, আপনি একই কমান্ড ব্যবহার করতে পারেন, তবে পরিবর্তে 50% নির্দিষ্ট করুন।

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=50

প্রতিটি রিভিশন কত ট্রাফিক পাচ্ছে তার একটি তালিকা আপনার দেখতে হবে।

Traffic:
  50% gradual-rollouts-colors-00001-hos
  50% gradual-rollouts-colors-00004-mum
        lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app

আপনি যখন সম্পূর্ণরূপে ল্যাভেন্ডার রোল আউট করতে প্রস্তুত হন, আপনি বেইজ প্রতিস্থাপনের জন্য ল্যাভেন্ডারকে 100% সেট করতে পারেন।

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100

এবং এখন আপনি যখন ওয়েবসাইটটি দেখুন, আপনি শুধুমাত্র ল্যাভেন্ডার দেখতে পাবেন।

5. রোলব্যাক

ধরুন প্রাথমিক UX ফিডব্যাক এসেছে, যা ইঙ্গিত করে যে গ্রাহকরা ল্যাভেন্ডারের থেকে বেইজ পছন্দ করেন এবং আপনাকে বেইজে রোলব্যাক করতে হবে।

আপনি এই কমান্ডটি চালিয়ে পূর্ববর্তী সংশোধন (বেইজ) এ ফিরে যেতে পারেন:

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-revisions $BEIGE_REVISION=100

এবং এখন আপনি যখন ওয়েবসাইট পরিদর্শন করবেন, আপনি পটভূমির রঙ হিসাবে বেইজ দেখতে পাবেন।

আপনি ডক্সে রোলব্যাক সম্পর্কে আরও জানতে পারেন৷

6. অভিনন্দন!

কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন!

আমরা রোলআউট, রোলব্যাক এবং ট্রাফিক মাইগ্রেশনের ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই

আমরা কভার করেছি কি

  • একটি ক্লাউড রান পরিষেবার জন্য দুই বা ততোধিক সংশোধনের মধ্যে ট্র্যাফিককে কীভাবে বিভক্ত করবেন
  • কিভাবে ধীরে ধীরে একটি নতুন সংশোধন রোল আউট
  • আগের রিভিশনে কিভাবে রোলব্যাক করবেন

7. পরিষ্কার করুন

অসাবধানতাবশত চার্জ এড়াতে, (উদাহরণস্বরূপ, যদি এই ক্লাউড রান ফাংশনটি আপনার মাসিক ক্লাউড রান ইনভোকমেন্ট বরাদ্দের চেয়ে অজান্তেই ফ্রি টিয়ারে বেশি বার আহ্বান করা হয়), আপনি হয় ক্লাউড রান পরিষেবাটি মুছে ফেলতে পারেন বা ধাপ 2 এ আপনার তৈরি করা প্রকল্পটি মুছে ফেলতে পারেন৷

একটি ক্লাউড রান পরিষেবা মুছে ফেলতে, https://console.cloud.google.com/run/ এ ক্লাউড কনসোলে ক্লাউড রানে যান এবং এই কোডল্যাবে আপনার তৈরি করা ফাংশনগুলি মুছুন৷

আপনি যদি সম্পূর্ণ প্রকল্প মুছে ফেলার সিদ্ধান্ত নেন, আপনি https://console.cloud.google.com/cloud-resource-manager- এ যেতে পারেন, ধাপ 2-এ আপনার তৈরি করা প্রকল্পটি নির্বাচন করুন এবং মুছুন নির্বাচন করুন৷ আপনি যদি প্রকল্পটি মুছে ফেলেন, তাহলে আপনাকে আপনার ক্লাউড SDK-এ প্রকল্পগুলি পরিবর্তন করতে হবে৷ আপনি gcloud projects list চালিয়ে সমস্ত উপলব্ধ প্রকল্পের তালিকা দেখতে পারেন।