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

1. مقدمة

مرحبًا بك في درس الترميز التطبيقي حول استخدام الجهاز الخارجي المخصص لموازنة الحِمل عبر HTTPS مع خدمة "الإدارة المتقدمة لحركة البيانات" (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.pnga99b7ace416376c4.png5e3ff691252acf41.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.

للتأكّد من أنّ سياسة نسخ الزيارات التي أنشأتها تعمل، عليك التحقّق من استخدام مجموعة مثيلات مُدارة في 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 وغيرها الكثير ( رابط).