الدرس التطبيقي حول الترميز الخاص بتحسينات موازنة التحميل المتقدّمة

1. مقدمة

مرحبًا بك في ورشة عمل رموز برمجية لتحسينات موازنة التحميل المتقدّمة.

في هذا الدليل التعليمي حول الرموز البرمجية، ستتعرّف على كيفية ضبط خيارات موازنة الحمل المتقدّمة لجهاز موازنة حمل التطبيقات الخارجي الشامل. قبل البدء، ننصحك بالاطّلاع على المستند حول موازنة الحمل في السحابة الإلكترونية أولاً ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

c3fb1d3f027e8640.png

الشكل 1: سير عمل اختيار نقطة نهاية وجهة باستخدام جهاز موازنة حمل التطبيقات الخارجية العامة.

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

2f7368df335d3de9.png

الشكل 2. طوبولوجيا توجيه "جهاز موازنة حمل HTTP"

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

ما ستتعرّف عليه

  • كيفية ضبط ServiceLbPolicy لتحسين أداء جهاز موازنة الحمل

المتطلبات

  • المعرفة بموازنة حمل HTTPS الخارجي. يتشابه النصف الأول من هذا الدرس التطبيقي حول الترميز إلى حد كبير مع الدرس التطبيقي حول الترميز External HTTPs LB مع قسم "إدارة الزيارات المتقدمة" (Envoy) ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv). ننصحك بالاطّلاع على ذلك أولاً.

2. قبل البدء

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

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

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

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com
gcloud services enable networkservices.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     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
httplbs  AUTO         REGIONAL

إنشاء قواعد جدار حماية في 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                    NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
httplb-allow-http-rule  httplbs  INGRESS    700       tcp:80        False

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

من Cloud Shell

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

الناتج

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh].
Creating firewall...done.
NAME          NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
fw-allow-ssh  httplbs  INGRESS    1000      tcp:22        False

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

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

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

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

إنشاء نماذج المثيلات

الخطوة الأولى هي إنشاء قالب مثيل.

من Cloud Shell

gcloud compute instance-templates create test-template \
   --network=httplbs \
   --tags=allow-ssh,http-server \
   --image-family=debian-9 \
   --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'

الناتج

NAME           MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template  n1-standard-1               2021-11-09T09:24:35.275-08:00

يمكنك الآن التحقّق من إنشاء نماذج المثيلات بنجاح باستخدام الأمر gcloud التالي:

من Cloud Shell

gcloud compute instance-templates list

الناتج

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template         n1-standard-1         2021-11-09T09:24:35.275-08:00

إنشاء مجموعات المثيلات

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

من Cloud Shell

gcloud compute instance-groups managed create us-east1-a-mig \
--size=1 \
--template=test-template \
--zone=us-east1-a

الناتج

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

من Cloud Shell

gcloud compute instance-groups managed create us-east1-b-mig \
--size=5 \
--template=test-template \
--zone=us-east1-b

الناتج

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

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

من Cloud Shell

gcloud compute instance-groups list

الناتج

NAME                  LOCATION      SCOPE   NETWORK         MANAGED INSTANCES
us-east1-a-mig        us-east1-a    zone    httplbs          Yes      1
us-east1-b-mig        us-east1-b    zone    httplbs          Yes      5

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

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

تم عرض الصفحة من: us-east1-a-mig-ww2h

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

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

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

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

إنشاء ميزة "التحقّق من الصحة"

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

من Cloud Shell

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

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check].
NAME              PROTOCOL
http-basic-check  HTTP

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

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

من Cloud Shell

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

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].

احرص على تدوين عنوان 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

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service].
NAME                  BACKENDS  PROTOCOL
east-backend-service            HTTP

إضافة عمليات نقل البيانات في أثناء التشغيل إلى خدمات الخلفية

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

من Cloud Shell

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global

من Cloud Shell

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global

يمكنك التحقّق من إضافة الخلفيات من خلال تنفيذ الأمر التالي.

من Cloud Shell

gcloud compute backend-services list

الناتج

NAME                  BACKENDS                                                                                               PROTOCOL
east-backend-service  us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig  HTTP

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

سنقوم الآن بإنشاء خريطة عنوان URL.

gcloud compute url-maps create web-map-http \
    --default-service=east-backend-service \
    --global

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http].
NAME          DEFAULT_SERVICE
web-map-http  backendServices/east-backend-service

إنشاء واجهة HTTP

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

من Cloud Shell

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

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv].
NAME               URL_MAP
http-lb-proxy-adv  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

في هذه المرحلة، يمكنك التأكّد من أنّ أداة توزيع الحمل تعمل باستخدام عنوان IP الذي سجّلته سابقًا.

6- التأكّد من عمل "موازن الحمولة"

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

إنشاء Siege-vm

ستنشئ الآن جهاز افتراضي siege-vm الذي ستستخدمه لإنشاء الحمل.

من Cloud Shell

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

الناتج

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm].
NAME      ZONE             MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
siege-vm  us-central1-ir1  e2-medium                  10.132.0.15  34.143.20.68  RUNNING

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

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

من Cloud Shell

siege -c 20 http://$lb-ipv4-2

الناتج

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

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

الآن بعد أن أصبح Siege قيد التشغيل، حان الوقت للتحقّق من توزيع الزيارات بالتساوي على مجموعتَي النُسخ المُدارة.

Stop the Siege

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

7- ضبط سياسة "التحميل إلى الخدمة"

إنشاء سياسة "موازنة تحميل الخدمات"

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

من Cloud Shell

gcloud beta network-services service-lb-policies create http-policy \
    --auto-capacity-drain --location=global

يمكننا التحقّق من أنّه تم إنشاء سياستنا بنجاح باستخدام الأمر gcloud التالي:

من Cloud Shell

gcloud beta network-services service-lb-policies list --location=global

الناتج

NAME
http-policy

إرفاق سياسة "موازنة تحميل الخدمات" بخدمة الخلفية

سنُرفِق الآن السياسة الجديدة بخدمة الخلفية الحالية أعلاه.

من Cloud Shell

gcloud beta compute backend-services update east-backend-service \
    --service-lb-policy=http-policy --global

8. تعديل سلامة الخلفية

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

ستزيل ميزة خفض السعة التلقائي وحدة MIG للخلفية من موازن الحمولة تلقائيًا عندما ينخفض إجمالي عدد الخلفيات الصالحة عن حدّ معيّن (‎25%). لاختبار هذه الميزة، سنستخدم بروتوكول النقل الآمن (SSH) للوصول إلى الأجهزة الافتراضية في us-east1-b-mig وسنجعلها غير صالحة. عند بلوغ الحدّ الأدنى البالغ% 25، ستحتاج إلى استخدام بروتوكول النقل الآمن (SSH) للوصول إلى أربعة من الأجهزة الافتراضية وإيقاف خادم Apache.

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

sudo apachectl stop

في هذه المرحلة، سيتم تفعيل ميزة خفض السعة التلقائي ولن تتلقّى المنطقة us-east1-b-mig طلبات جديدة.

9. التحقّق من عمل ميزة تصريف الطاقة التلقائية

إعادة بدء عملية الحظر

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

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

من Cloud Shell

siege -c 20 http://$lb-ipv4-2

الناتج

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

في هذه المرحلة، ستلاحظ أنّ جميع الطلبات يتم إرسالها إلى us-east1-a-mig.

Stop the Siege

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

10. خطوات إعادة الضبط

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

من Cloud Shell

gcloud compute instances delete siege-vm --zone=us-east1-a

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 addresses delete lb-ipv4-2 --global
gcloud compute health-checks delete http-basic-check 

gcloud beta network-services service-lb-policies delete http-policy --location=global

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

gcloud compute instance-templates delete test-template 

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

gcloud compute networks delete httplbs 

11. تهانينا!

تهانينا على إكمال ورشة رموز البرامج.

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

  • إنشاء جهاز موازنة حمل تطبيقات خارجي باستخدام سياسة موازنة الحمولة للخدمة
  • اضبط خدمة الخلفية باستخدام ميزة استنزاف السعة التلقائية.

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

  • جرِّب الميزات الأخرى التي توفّرها سياسة service lb.