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

1. مقدمة

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

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

c3fb1d3f027e8640.png

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

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

2f7368df335d3de9.png

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

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

ما ستتعلمه

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

المتطلبات

  • معرفة موازنة الحمل الخارجية لبروتوكول HTTPS الجزء الأول من هذا الدرس التطبيقي حول الترميز يشبه إلى حد كبير الدرس التطبيقي حول الترميز بشأن استخدام الجهاز الخارجي المخصص لموازنة الحِمل عبر HTTPS مع خدمة "الإدارة المتقدمة لحركة البيانات" (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

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

من 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) وفقًا لتعريفات مجموعات المثيلات.

الآن، أرسِل طلب ويب في المتصفّح للتأكّد من أنّ خادم الويب يعمل (قد يستغرق ذلك دقيقة واحدة للبدء). في صفحة "أجهزة VM الافتراضية" ضِمن 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

إضافة واجهات MIG إلى "خدمات الخلفية"

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

من 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) للوصول إلى الجهاز الافتراضي (VM) الذي أنشأته. بعد إنشائه، انقر على 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

ربط سياسة Service LB بالخدمة الخلفية

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

من Cloud Shell

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

8. Tweak Backend Health

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

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

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

sudo apachectl stop

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

9- التأكّد من أنّ ميزة "استنزاف السعة التلقائي" تعمل

إعادة تشغيل Siege

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

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. تهانينا!

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

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

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

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

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