بروتوكول HTTPs LB الخارجي مع الدرس التطبيقي حول الترميز الخاص بإدارة عدد الزيارات (Envoy)

1. مقدمة

مرحبًا بك في الدرس التطبيقي حول الترميز الخاص بجهاز موازنة الحمل لبروتوكولات HTTP الخارجي مع ميزة "إدارة حركة المرور المتقدّمة" (Envoy).

يحتوي أحدث إصدار من جهاز موازنة حمل HTTP(S) الخارجي مع "إدارة حركة المرور المتقدّمة" على جميع ميزات "جهاز موازنة حمل HTTP(S) الخارجي الشامل" الكلاسيكي الحالي، ولكن مع قائمة متزايدة من إمكانات "إدارة حركة المرور المتقدّمة". بعض هذه الإمكانات جديدة في موازنات التحميل، وبعضها يوفّر ميزات محسّنة للإمكانات الحالية. في ما يلي قائمة جزئية بهذه الإمكانات:

  • تقسيم عدد الزيارات حسب الأوزان
  • طلب النسخ المطابق
  • رصد القيم الشاذة
  • طلب إعادة المحاولة
  • إدخال الأخطاء
  • خيارات إضافية لربط الجلسة بالخادم الخلفي
  • خيارات إضافية لتحويل العناوين
  • مشاركة الموارد المتعدّدة المصادر (CORS)
  • خوارزميات جديدة لموازنة الحمل

ما ستتعلمه

  • كيفية إعداد مجموعة مثيلات مُدارة وشبكة VPC وقواعد جدار الحماية المرتبطة بها
  • كيفية استخدام ميزات إدارة الزيارات المتقدّمة في موازن التحميل الجديد
  • كيفية التأكّد من أنّ ميزات إدارة الزيارات المتقدّمة تعمل على النحو المطلوب

المتطلبات

  • أساسيات الشبكات ومعرفة بروتوكول HTTP
  • معرفة أساسية بسطر الأوامر في نظامَي Unix وLinux

الطوبولوجيا وحالة الاستخدام في الدرس التطبيقي حول الترميز

dd8bd5e8e1341878.png

الشكل 1: مخطط طوبولوجيا توجيه جهاز موازنة حمل HTTP

خلال هذا الدرس التطبيقي، ستعمل على إعداد ثلاث مجموعات مثيلات مُدارة، واحدة في الشرق والغرب والوسط. ستنشئ جهاز موازنة حمل HTTPS خارجيًا شاملاً. سيستخدم جهاز موازنة الحمل عدة ميزات من قائمة الإمكانات المتقدّمة التي يتيحها جهاز موازنة الحمل المستند إلى Envoy. بعد نشرها، ستنشئ بعض عمليات التحميل المحاكية وتتأكّد من أنّ الإعدادات التي ضبطتها تعمل بشكلٍ مناسب.

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

إعداد البيئة بالسرعة التي تناسبك

  1. سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
  • معرّف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف مشروعك (يُشار إليه عادةً باسم PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغييرها بعد هذه الخطوة وتبقى سارية طوال مدة المشروع.
  • للعلم، هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير، إن وُجدت أي تكلفة على الإطلاق. لإيقاف الموارد وتجنُّب تحمّل تكاليف تتجاوز هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:

55efc1aaa7a4d3ad.png

لن يستغرق توفير البيئة والاتصال بها سوى بضع لحظات. عند الانتهاء، من المفترض أن يظهر لك ما يلي:

7ffe5cbb04455448.png

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

قبل البدء

داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك

gcloud config list project

gcloud config set project [YOUR-PROJECT-NAME]

PROJECT_ID=[YOUR-PROJECT-NAME]

echo $PROJECT_ID

تفعيل واجهات برمجة التطبيقات

تفعيل جميع الخدمات اللازمة

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

3- إنشاء شبكة السحابة VPC

إنشاء شبكة VPC

من Cloud Shell

gcloud compute networks create httplbs --subnet-mode=auto

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs].
NAME: httplbs
SUBNET_MODE: AUTO
BGP_ROUTING_MODE: REGIONAL
IPV4_RANGE:
GATEWAY_IPV4:

إنشاء قواعد جدار الحماية لشبكة VPC

بعد إنشاء شبكة VPC، عليك إنشاء قواعد جدار الحماية. سيتم استخدام قاعدة جدار الحماية للسماح لجميع عناوين IP بالوصول إلى عنوان IP الخارجي لموقع الويب الخاص بتطبيق الاختبار على المنفذ 80 لحركة بيانات http.

من Cloud Shell

gcloud compute firewall-rules create httplb-allow-http-rule \
--allow tcp:80 \
--network httplbs \
--source-ranges 0.0.0.0/0 \
--priority 700

الناتج

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule].
Creating firewall...done.
NAME: httplb-allow-http-rule
NETWORK: httplbs
DIRECTION: INGRESS
PRIORITY: 700
ALLOW: tcp:80
DENY:
DISABLED: False

4. إعداد "مجموعات الأجهزة الافتراضية المُدارة"

عليك إعداد "مجموعات مثيلات مُدارة" تتضمّن أنماط موارد الخلفية التي تستخدمها "موازنة الحمل HTTP". سننشئ أولاً "نماذج الأجهزة الافتراضية" التي تحدّد إعدادات الأجهزة الافتراضية التي سيتم إنشاؤها لكل منطقة. بعد ذلك، سننشئ مجموعة مثيلات مُدارة لكل منطقة تشير إلى نموذج مثيل.

يمكن أن تكون مجموعات مثيلات مُدارة على مستوى المنطقة أو النطاق. بالنسبة إلى هذا التمرين العملي، سننشئ ثلاث مجموعات إقليمية من "مجموعات مثيلات مُدارة"، واحدة في us-east1، وواحدة في us-west1، وواحدة في us-central1.

في هذا القسم، يمكنك الاطّلاع على نص برمجي مُعدّ مسبقًا سيتم الرجوع إليه عند إنشاء الجهاز الظاهري. يثبّت نص بدء التشغيل هذا إمكانات خادم الويب ويفعّلها، وسنستخدمها لمحاكاة تطبيق ويب. يمكنك استكشاف هذا النص البرمجي.

إنشاء نماذج الأجهزة الافتراضية في الشرق والغرب والوسط

تتمثّل الخطوة الأولى في إنشاء نموذج الجهاز الظاهري us-east-1.

من Cloud Shell

gcloud compute instance-templates create us-east1-template \
   --region=us-east1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-12 \
   --image-project=debian-cloud \
   --metadata=startup-script='#! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2'

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-east1-template].
NAME: us-east1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:02:37.511-08:00

الخطوة التالية هي إنشاء نموذج الجهاز الافتراضي us-west-1.

من Cloud Shell

gcloud compute instance-templates create us-west1-template \
   --region=us-west1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-12 \
   --image-project=debian-cloud \
   --metadata=startup-script='#! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2'

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-west1-template].
NAME: us-west1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:03:08.577-08:00

الخطوة التالية هي إنشاء نموذج الجهاز الافتراضي us-central-1.

من Cloud Shell

gcloud compute instance-templates create us-central1-template \
   --region=us-central1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-12 \
   --image-project=debian-cloud \
   --metadata=startup-script='#! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2'

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-central1-template].
NAME: us-central1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:03:44.179-08:00

يمكنك الآن التأكّد من أنّه تم إنشاء نماذج الآلات الافتراضية بنجاح باستخدام أمر gcloud التالي:

من Cloud Shell

gcloud compute instance-templates list

الناتج

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
us-central1-template   n1-standard-1         2021-11-09T09:25:37.263-08:00
us-east1-template      n1-standard-1         2021-11-09T09:24:35.275-08:00
us-west1-template      n1-standard-1         2021-11-09T09:25:08.016-08:00

إنشاء مجموعات مثيلات مُدارة في الشرق والغرب والوسط

علينا الآن إنشاء مجموعة مثيلات مُدارة من نماذج المثيلات التي أنشأناها سابقًا.

من Cloud Shell

gcloud compute instance-groups managed create us-east1-mig \
--base-instance-name=us-east1-mig \
--size=1 \
--template=us-east1-template \
--zone=us-east1-b 

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-mig].
NAME: us-east1-mig
LOCATION: us-east1-b
SCOPE: zone
BASE_INSTANCE_NAME: us-east1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-east1-template
AUTOSCALED: no

من Cloud Shell

gcloud compute instance-groups managed create us-west1-mig \
--base-instance-name=us-west1-mig \
--size=1 \
--template=us-west1-template \
--zone=us-west1-a  

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroupManagers/us-west1-mig].
NAME: us-west1-mig
LOCATION: us-west1-a
SCOPE: zone
BASE_INSTANCE_NAME: us-west1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-west1-template
AUTOSCALED: no

من Cloud Shell

gcloud compute instance-groups managed create us-central1-mig \
--base-instance-name=us-central1-mig \
--size=1 \
--template=us-central1-template \
--zone=us-central1-a 

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-central1-a/instanceGroupManagers/us-central1-mig].
NAME: us-central1-mig
LOCATION: us-central1-a
SCOPE: zone
BASE_INSTANCE_NAME: us-central1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-central1-template
AUTOSCALED: no

يمكننا التحقّق من إنشاء مجموعات الأجهزة الافتراضية بنجاح باستخدام أمر gcloud التالي:

من Cloud Shell

gcloud compute instance-groups list

الناتج

NAME                  LOCATION      SCOPE   NETWORK         MANAGED INSTANCES
us-central1-mig       us-central1   zone    httplbs          Yes      1
us-west1-mig          us-west1      zone    httplbs          Yes      1
us-east1-mig          us-east1      zone    httplbs          Yes      1

التحقّق من وظائف خادم الويب

تم ضبط كل مثيل لتشغيل خادم ويب Apache باستخدام نص برمجي بسيط بلغة PHP يعرض ما يلي:

c87ca81d3125ac61.png

لضمان عمل خوادم الويب بشكلٍ صحيح، انتقِل إلى Compute Engine -> مثيلات الأجهزة الافتراضية. تأكَّد من إنشاء مثيلاتك الجديدة (مثل us-east1-mig-xxx) وفقًا لتعريفات مجموعات المثيلات.

الآن، أرسِل طلب ويب في المتصفّح للتأكّد من أنّ خادم الويب يعمل (قد يستغرق ذلك دقيقة واحدة للبدء). في صفحة "أجهزة VM" ضِمن Compute Engine، اختَر جهازًا افتراضيًا أنشأته مجموعة الأجهزة الافتراضية وانقر على عنوان IP الخارجي (العام).

أو في المتصفّح، انتقِل إلى http://<IP_Address>

5- إعداد موازن الحمل

إنشاء فحص صحي

أولاً، يجب إنشاء فحص أساسي للحالة الصحية للتأكّد من أنّ خدماتنا تعمل بنجاح. سننشئ فحصًا أساسيًا للصحة، ولكن تتوفّر العديد من خيارات التخصيص المتقدّمة.

من Cloud Shell

gcloud compute health-checks create http http-basic-check \
    --port 80

حجز عنوان IP خارجي

في هذه الخطوة، عليك حجز عنوان IP ثابت متاح على مستوى العالم سيتم ربطه لاحقًا بـ "موازنة الحمل".

من Cloud Shell

gcloud compute addresses create lb-ipv4-2 \
    --ip-version=IPV4 \
    --global

احرص على تدوين عنوان IP الذي تم حجزه.

gcloud compute addresses describe lb-ipv4-2 \
    --format="get(address)" \
    --global

إنشاء خدمات الخلفية

الآن، علينا إنشاء خدمة خلفية لكل مجموعة من مجموعات الأجهزة الافتراضية المُدارة التي أنشأناها سابقًا. واحد للشرق والغرب والوسط

إنشاء خدمة خلفية لمجموعة مثيلات مُدارة في المنطقة الشرقية

من Cloud Shell

gcloud compute backend-services create east-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

إنشاء خدمة خلفية لمجموعة مثيلات مُدارة في المنطقة الغربية

من Cloud Shell

gcloud compute backend-services create west-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

إنشاء خدمة خلفية لمجموعة مثيلات مُدارة مركزية

من Cloud Shell

gcloud compute backend-services create central-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

إضافة مجموعات مثيلات مُدارة إلى "خدمات الخلفية"

بعد أن أنشأنا خدمات الخلفية الخاصة بكل مجموعة تطبيقات، علينا الآن إضافة "مجموعات الأجهزة الافتراضية المُدارة" التي أنشأناها سابقًا إلى كل خدمة خلفية.

أضِف East MIG إلى خدمة الخلفية.

من Cloud Shell

gcloud compute backend-services add-backend east-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-east1-mig \
    --instance-group-zone=us-east1-b \
    --global

أضِف West MIG إلى خدمة الخلفية.

من Cloud Shell

gcloud compute backend-services add-backend west-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-west1-mig \
    --instance-group-zone=us-west1-a \
    --global

أضِف Central MIG إلى خدمة الخلفية.

من Cloud Shell

gcloud compute backend-services add-backend central-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-central1-mig \
    --instance-group-zone=us-central1-a \
    --global

إنشاء خريطة عناوين URL

خريطة عناوين URL هي المكان الذي ستتوفّر فيه ميزات إدارة الزيارات المتقدّمة في هذا المختبر. يجب إنشاء ملف ‎ .yaml يحتوي على الإعدادات. ضمن ملف ‎ .yaml، أنشأنا تطابق بادئة على ‎ /roundrobbin، لذا لن تتأثر بهذه الإعدادات سوى الزيارات التي تتطابق مع ‎ /roundrobbin. لقد حدّدنا أنّه يجب توجيه% 50 من الزيارات إلى east-backend-service و% 50 من الزيارات إلى west-backend-service. أضفنا أيضًا قيمة عنوان الاستجابة:{test} التي ستظهر في جميع الاستجابات. أخيرًا، أضفنا شرطًا يقضي بنسخ كل حركة البيانات إلى central-backend-service. يتم تكرار الزيارات وإرسالها إلى هنا لأغراض الاختبار فقط.

احفظ المثال كملف ‎ .yaml على جهازك.

defaultService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
kind: compute #urlMap
name: web-map-http
hostRules:
- hosts:
  - '*'
  pathMatcher: matcher1
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
  name: matcher1
  routeRules:
  - matchRules:
    - prefixMatch: /roundrobbin
    priority: 2
    headerAction:
        responseHeadersToAdd:
          - headerName: test
            headerValue: value
            replace: True
    routeAction:
        weightedBackendServices:
        - backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
          weight: 50
        - backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/west-backend-service
          weight: 50
        retryPolicy:
            retryConditions: ['502', '504']
            numRetries: 3
            perTryTimeout:
                seconds: 1
                nanos: 50
        requestMirrorPolicy:
          backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/central-backend-service

أنشئ "خريطة عناوين URL" من خلال استيراد المستند من جهازك. يُرجى العِلم أنّ مسار المصدر سيختلف حسب المكان الذي تحفظ فيه ملف ‎ .yaml.

من Cloud Shell

gcloud compute url-maps import web-map-http \
   --source /Users/[USERNAME]/Documents/Codelab/lbconfig.yaml \
   --global

إنشاء واجهة أمامية HTTP

الخطوة الأخيرة في إنشاء أداة موازنة الحمل هي إنشاء الواجهة الأمامية. سيؤدي ذلك إلى ربط عنوان IP الذي حجزته سابقًا بخريطة عناوين URL لموازنة التحميل التي أنشأتها.

من Cloud Shell

gcloud compute target-http-proxies create http-lb-proxy-adv \
    --url-map=web-map-http

بعد ذلك، عليك إنشاء قاعدة إعادة توجيه عامة تربط عنوان IP المحجوز سابقًا بخادم وكيل HTTP.

من Cloud Shell

gcloud compute forwarding-rules create http-content-rule \
    --load-balancing-scheme EXTERNAL_MANAGED \
    --address=lb-ipv4-2 \
    --global \
    --target-http-proxy=http-lb-proxy-adv \
    --ports=80

6. التأكّد من أنّ "ميزات المرور المتقدّمة" تعمل

للتأكّد من أنّ ميزة تقسيم الزيارات التي تم تنفيذها تعمل بشكل صحيح، عليك إنشاء بعض الأحمال. لإجراء ذلك، سننشئ جهازًا افتراضيًا جديدًا لمحاكاة التحميل.

إنشاء قاعدة جدار حماية للسماح ببروتوكول SSH

لإجراء اتصال SSH بالجهاز الظاهري الذي سننشئ منه الزيارات، عليك أولاً إنشاء قاعدة جدار حماية تسمح لزيارات SSH بالوصول إلى الجهاز الظاهري.

من Cloud Shell

gcloud compute firewall-rules create fw-allow-ssh \
    --network=httplbs \
    --action=allow \
    --direction=ingress \
    --target-tags=allow-ssh \
    --rules=tcp:22

الناتج

NAME          NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
fw-allow-ssh  httplbs  INGRESS    1000      tcp:22        False

إنشاء Siege-vm

الآن، عليك إنشاء siege-vm الذي ستستخدمه لإنشاء الحمل

من Cloud Shell

gcloud compute instances create siege-vm \
    --network=httplbs \
    --zone=us-east4-c \
    --machine-type=e2-medium \
    --tags=allow-ssh,http-server \
    --metadata=startup-script='sudo apt-get -y install siege'

الناتج

NAME     ZONE        MACHINE_TYPE INTERNAL_IP  EXTERNAL_IP    STATUS
siege-vm us-east4-c  e2-medium    10.150.0.3   34.85.218.119  RUNNING

بعد ذلك، يمكنك استخدام SSH للوصول إلى الجهاز الظاهري الذي أنشأته. بعد إنشائه، انقر على SSH لتشغيل نافذة طرفية والاتصال.

بعد إتمام الاتصال، شغِّل الأمر التالي لإنشاء الحمل. استخدِم عنوان IP الذي حجزته سابقًا لموازنة الحمل الخارجية عبر http.

من Cloud Shell

siege -c 250 http://[$lb-ipv4-2]/roundrobbin

الناتج

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file
[alert] Zip encoding disabled; siege requires zlib support to enable it: No such file or directory
** SIEGE 4.0.2
** Preparing 250 concurrent users for battle.
The server is now under siege...

التحقّق من توزيع الحمل

بعد تشغيل Siege، حان الوقت للتأكّد من توزيع الزيارات بالتساوي على مجموعات مثيلات شرق وغرب المُدارة، بالإضافة إلى ذلك، يمكنك التأكّد من أنّ ميزة "مطابقة الزيارات" تعمل ويتم إرسال الزيارات إلى مجموعة المثيلات المُدارة المركزية.

في Cloud Console، انقر على "خدمات الشبكة" > "موازنة الحمل" في قائمة التنقّل. اختَر load balancer web-map-http. انتقِل إلى علامة التبويب "المراقبة"، وسيظهر لك الرسم البياني أدناه.

f4d6803db44be253.png

ستتمكّن من الاطّلاع على تقسيم الزيارات في الوقت الفعلي إلى هذا الموقع الإلكتروني المتعدد المناطق. يتم تقسيم عدد الزيارات بالتساوي لأنّك ضبطت تقسيمًا بنسبة 50/50 باستخدام جدولة Round robin.

للتأكّد من أنّ سياسة نسخ الزيارات التي أنشأتها تعمل، عليك التحقّق من استخدام مجموعة مثيلات مُدارة central-backend-service. لإجراء ذلك، انتقِل إلى Compute Engine، ثم إلى مجموعات المثيلات، واختَر us-central1-mig. بعد ذلك، انتقِل إلى علامة التبويب "المراقبة".

cf25e44d511529e7.png

ستظهر لك الرسومات البيانية التي تمّت تعبئتها لتوضيح أنّه تمّت مطابقة عدد الزيارات مع مجموعة مثيلات مُدارة هذه.

Stop the Siege

بعد أن أثبتّ أنّ تقسيم الزيارات المتقدّم يعمل بشكل صحيح، حان الوقت لإيقاف عملية المحاكاة. لإجراء ذلك، ارجع إلى وحدة SSH الطرفية الخاصة بـ siege-vm واضغط على CTRL+C لإيقاف عملية التشغيل.

التحقّق من إرسال عنوان الاستجابة

قبل إجراء عملية التنظيف، يمكنك التأكّد بسرعة من أنّ موازن التحميل عبر بروتوكول HTTP يرسل عنوان الاستجابة المناسب. لقد ضبطتَها لإرسال اختبار العنوان مع قيمة المحتوى. سيؤدي تشغيل أمر curl من Cloud Shell إلى تقديم الردّ المتوقّع.

من Cloud Shell

curl -svo /dev/null http://lb-ipv4-2/roundrobbin

الناتج

*   Trying lb-ipv4-2..
* TCP_NODELAY set
* Connected to  lb-ipv4-2 ( lb-ipv4-2) port 80 (#0)
> GET /roundrobbin HTTP/1.1
> Host:  lb-ipv4-2
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< date: Wed, 10 Nov 2021 17:05:27 GMT
< server: envoy
< Content-Length: 273
< content-type: text/html; charset=iso-8859-1
< via: 1.1 google
< test: value
<
{ [273 bytes data]
* Connection #0 to host 34.149.2.26 left intact
* Closing connection 0

7. إعادة تنظيم المختبر

بعد الانتهاء من بيئة المختبر، حان الوقت لإيقافها. يُرجى تنفيذ الأوامر التالية لحذف البيئة التجريبية.

من Cloud Shell

gcloud compute instances delete siege-vm --zone=us-east4-c

gcloud compute forwarding-rules delete http-content-rule --global
gcloud compute target-http-proxies delete http-lb-proxy-adv
gcloud compute url-maps delete web-map-http
gcloud compute backend-services delete east-backend-service --global
gcloud compute backend-services delete west-backend-service --global
gcloud compute backend-services delete central-backend-service --global

gcloud compute addresses delete lb-ipv4-2 --global
gcloud compute health-checks delete http-basic-check 

gcloud compute instance-groups managed delete us-east1-mig --zone us-east1-b
gcloud compute instance-groups managed delete us-west1-mig --zone us-west1-a
gcloud compute instance-groups managed delete us-central1-mig --zone us-central1-a

gcloud compute instance-templates delete "us-east1-template" 
gcloud compute instance-templates delete "us-west1-template" 
gcloud compute instance-templates delete "us-central1-template" 

gcloud compute firewall-rules delete httplb-allow-http-rule
gcloud compute firewall-rules delete fw-allow-ssh

gcloud compute networks delete httplbs 

8. تهانينا!

لقد أكملت الدرس التطبيقي حول الترميز الخاص بموازنة حمل HTTPs الخارجية مع إدارة حركة المرور المتقدّمة (Envoy).

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

  • كيفية إعداد مجموعة مثيلات مُدارة وشبكة VPC وقواعد جدار الحماية المرتبطة بها
  • كيفية استخدام ميزات إدارة الزيارات المتقدّمة في موازن التحميل الجديد
  • كيفية التأكّد من أنّ ميزات إدارة الزيارات المتقدّمة تعمل على النحو المطلوب

الخطوات التالية

  • جرِّب بعض ميزات التوجيه المتقدّمة الأخرى، مثل إعادة كتابة عناوين URL وإضافة عناوين CORS وغيرها الكثير ( رابط).