استخدام المراجعات في Cloud Run لتقسيم الزيارات والعمليات الطرح التدريجي وعمليات التراجع

1. مقدمة

نظرة عامة

تتيح لك مراجعات Cloud Run تحديد المراجعات التي يجب أن تتلقّى الزيارات والنسبة المئوية للزيارات التي يجب إرسالها إلى كل مراجعة. تتيح لك المراجعات العودة إلى الحالة السابقة لمراجعة سابقة، وطرح مراجعة تدريجيًا، وتقسيم عدد الزيارات بين مراجعات متعدّدة.

توضّح لك هذه السلسلة من الدروس العملية كيفية استخدام المراجعات لإدارة عدد الزيارات إلى خدمتك على Cloud Run. يمكنك الاطّلاع على مزيد من المعلومات حول المراجعات في مستندات Cloud Run.

ما ستتعلمه

  • كيفية تقسيم عدد الزيارات بين مراجعتَين أو أكثر لخدمة Cloud Run
  • كيفية طرح مراجعة جديدة تدريجيًا
  • كيفية العودة إلى نسخة سابقة

2. الإعداد والمتطلبات

المتطلبات الأساسية

  • يجب أن تكون مسجّلاً الدخول إلى Cloud Console.
  • سبق لك نشر خدمة Cloud Run. على سبيل المثال، يمكنك اتّباع خطوات نشر خدمة Cloud Run للبدء.

ضبط متغيرات البيئة

يمكنك ضبط متغيّرات البيئة التي سيتم استخدامها في جميع مراحل هذا الدرس التطبيقي حول الترميز.

PROJECT_ID=YOUR-PROJECT-ID
REGION=YOUR_REGION

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

إنشاء مستودع في Artifact Registry للخدمة

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

3- تقسيم عدد الزيارات

يوضّح لك هذا النموذج كيفية إنشاء خدمة Cloud Run تقرأ متغيّر بيئة اللون وتستجيب باسم المراجعة باستخدام لون الخلفية هذا.

على الرغم من أنّ هذا الدرس التطبيقي العملي يستخدم لغة Python، يمكنك استخدام أي وقت تشغيل.

ضبط متغيرات البيئة

يمكنك ضبط متغيّرات البيئة التي سيتم استخدامها في جميع مراحل هذا الدرس التطبيقي حول الترميز.

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"]

أنشئ الصورة في Artifact Registry باستخدام Buildpacks من خلال Cloud Build:

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

ونشر المراجعة الأولى على Cloud Run باللون darkseagreen:

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

عند إعادة تحميل الموقع الإلكتروني، سيظهر لك لون الخلفية البني الفاتح.

تقسيم عدد الزيارات مناصفةً

لتقسيم عدد الزيارات بين المراجعات باللون الأخضر الداكن والبني، عليك العثور على أرقام تعريف المراجعات لخدمات Cloud Run الأساسية. يمكنك الاطّلاع على أرقام تعريف المراجعات من خلال تنفيذ الأمر التالي:

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

من المفترض أن تظهر لك نتائج مشابهة لما يلي

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

يمكنك تقسيم عدد الزيارات بالتساوي بين المراجعتَين من خلال تنفيذ الأمر التالي مع المراجعات:

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. عمليات الطرح التدريجي

في هذا القسم، سنتعرّف على كيفية طرح التغييرات تدريجيًا على مراجعة جديدة لخدمة Cloud Service. يمكنك الاطّلاع على مزيد من المعلومات حول عمليات الطرح التدريجي في المستندات.

ستستخدم الرمز البرمجي نفسه المستخدَم في القسم السابق، ولكنك ستنشره كخدمة Cloud Run جديدة.

أولاً، اضبط لون الخلفية على beige ونفِّذ الدالة بالاسم gradual-rollouts-colors.

لنشر إحدى دوال Cloud Run مباشرةً على Cloud Run، شغِّل الأمر التالي:

# 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 من عدد الزيارات. سيضمن ذلك عدم تلقّي مراجعاتك المستقبلية أي زيارات. تضبط Cloud Run تلقائيًا نسبة% 100 من الزيارات على المراجعة التي تحمل العلامة latest. من خلال تحديد أنّ هذه المراجعة الحالية باللون البيج يجب أن تتلقّى كل الزيارات يدويًا، لن تتلقّى المراجعة التي تحمل العلامة 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 لهذه المراجعة.

لنشر إحدى دوال Cloud Run مباشرةً على Cloud Run، شغِّل الأمر التالي:

# 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 من الزيارات. على الرغم من اجتيازها لعمليات التحقّق من الصحة، لا يزال عليك التأكّد من أنّ هذه المراجعة تستخدم لون الخلفية الخزامي.

لاختبار مراجعة Lavender، يمكنك تطبيق علامة على هذه المراجعة. تتيح لك عملية وضع العلامات اختبار المراجعة الجديدة مباشرةً على عنوان 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

عند الانتقال إلى عنوان URL الخاص بتلك المراجعة، سيظهر لك اللون الخزامي.

زيادة عدد الزيارات تدريجيًا

يمكنك الآن البدء في إرسال الزيارات إلى نسخة Lavender. يوضّح المثال أدناه كيفية إرسال% 1 من حركة البيانات إلى lavender.

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- عمليات العودة إلى الحالة السابقة

لنفترض أنّك تلقّيت ملاحظات مبكرة بشأن تجربة المستخدم تشير إلى أنّ العملاء يفضّلون اللون البيج على اللون الخزامى، وأنّك بحاجة إلى العودة إلى الحالة السابقة إلى اللون البيج.

يمكنك العودة إلى النسخة السابقة (البيج) من خلال تنفيذ هذا الأمر:

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

والآن، عندما تنتقل إلى الموقع الإلكتروني، سيظهر اللون البيج كلون الخلفية.

يمكنك الاطّلاع على مزيد من المعلومات حول عمليات التراجع في المستندات.

6. تهانينا!

تهانينا على إكمال هذا الدرس العملي.

ننصحك بمراجعة المستندات حول عمليات الطرح والتراجع ونقل الزيارات.

المواضيع التي تناولناها

  • كيفية تقسيم عدد الزيارات بين مراجعتَين أو أكثر لخدمة Cloud Run
  • كيفية طرح مراجعة جديدة تدريجيًا
  • كيفية العودة إلى نسخة سابقة

7. تَنظيم

لتجنُّب فرض رسوم غير مقصودة (على سبيل المثال، إذا تم استدعاء دالة Cloud Run هذه مرات أكثر من عدد مرات استدعاء Cloud Run المخصّصة لك شهريًا في الطبقة المجانية)، يمكنك إما حذف خدمة Cloud Run أو حذف المشروع الذي أنشأته في الخطوة 2.

لحذف خدمة Cloud Run، انتقِل إلى Cloud Run في Cloud Console على https://console.cloud.google.com/run/ واحذف الدوال التي أنشأتها في هذا الدرس العملي.

إذا اخترت حذف المشروع بأكمله، يمكنك الانتقال إلى https://console.cloud.google.com/cloud-resource-manager، واختيار المشروع الذي أنشأته في الخطوة 2، ثم النقر على "حذف". إذا حذفت المشروع، عليك تغيير المشاريع في Cloud SDK. يمكنك الاطّلاع على قائمة بجميع المشاريع المتاحة من خلال تنفيذ gcloud projects list.