السحابة المتعددة: Azure وGCP

الحوسبة والشبكات في Azure

18 دقيقة الدرس 3 من 28

الحوسبة والشبكات في Azure

تتشابه مكوّنات الحوسبة والشبكات في Azure مع ما تعرفه من AWS، غير أن التسميات والإعدادات الافتراضية والنموذج الذهني تختلف بما يكفي لإيقاع المهندسين ذوي الخبرة في أخطاء. يغطّي هذا الدرس الركائز الأربع التي ستستخدمها في كل نشر Azure حقيقي: الأجهزة الافتراضية (VMs)، والشبكات الافتراضية (VNets)، ومجموعات أمان الشبكة (NSGs)، وموازنات الأحمال (Load Balancers). ونختتم بجدول مقارنة بين Azure وAWS يُمكّنك من الترجمة بين السحابتين بسهولة.

الأجهزة الافتراضية (VMs)

تعيش الأجهزة الافتراضية في Azure داخل مجموعة موارد (Resource Group) — وهي حاوية منطقية تحدد نطاق الفواتير وصلاحيات RBAC ودورة الحياة. كل مورد تُنشئه (جهاز افتراضي، قرص، بطاقة شبكة NIC، عنوان IP عام) هو كيان مستقل قابل للعنونة، خلافاً لـ AWS حيث تكون بعض الموارد ضمنية. هذه الصراحة ميزة: يمكنك حذف جهاز افتراضي مع الاحتفاظ بقرص نظام التشغيل، أو نقل بطاقة الشبكة إلى جهاز آخر.

تتبع أحجام الأجهزة الافتراضية نظام تسمية محدد: Standard_D4s_v5 — العائلة (D = متعددة الأغراض)، وعدد المعالجات الافتراضية (4)، ونوع التخزين (s = يدعم Premium SSD)، والجيل (v5). للأعباء الإنتاجية، اختر v5 أو أحدث؛ الأجيال الأقدم تعمل على عتاد متقادم بأداء مفرد أضعف.

# إنشاء مجموعة موارد az group create --name prod-rg --location eastus # إنشاء جهاز افتراضي (Standard_D4s_v5، Ubuntu 22.04، مفتاح SSH، بدون IP عام) az vm create \ --resource-group prod-rg \ --name web-01 \ --image Ubuntu2204 \ --size Standard_D4s_v5 \ --admin-username azureuser \ --ssh-key-values ~/.ssh/id_rsa.pub \ --vnet-name prod-vnet \ --subnet app-subnet \ --public-ip-address "" \ --nsg "" \ --os-disk-size-gb 64 \ --storage-sku Premium_LRS \ --zone 1

خيارات جوهرية يجب استيعابها: --public-ip-address "" يُعطّل عنوان IP العام — أجهزة الإنتاج يجب ألا تكون مكشوفة على الإنترنت مباشرةً. --nsg "" يتخطى إنشاء NSG تلقائي لكل بطاقة شبكة حين تخطط لإدارة NSG على مستوى الشبكة الفرعية، وهو نهج أنظف في مقياس الإنتاج. --zone 1 يُثبّت الجهاز في منطقة التوفر 1؛ وزّع دائماً النسخ عبر المناطق 1 و2 و3 لتحقيق الاستمرارية العالية.

نصيحة — الأقراص المُدارة وPremium SSD: استخدم دائماً الأقراص المُدارة (--storage-sku Premium_LRS). تتعامل تلقائياً مع التكرار، وتدعم اللقطات (Snapshots) كموارد من الدرجة الأولى، وهي شرط لمجموعات التوفر كي تمنحك اتفاقية مستوى الخدمة SLA. الأقراص غير المُدارة تراث قديم — لا تستخدمها في أي نشر جديد.

الشبكات الافتراضية (VNets)

VNet هو مقابل Azure لـ AWS VPC. تُعرّف نطاق CIDR (مثل 10.0.0.0/16) وتقسّمه إلى شبكات فرعية. خلافاً لـ AWS، الشبكات الفرعية في VNet ليست مرتبطة بمنطقة توفر بعينها — الشبكة الفرعية الواحدة تمتد على جميع مناطق التوفر في المنطقة. عزل المناطق يُفرض على مستوى المورد (الجهاز الافتراضي، وموازن الحمل، إلخ)، لا على مستوى الشبكة الفرعية.

يُوصى بتصميم إنتاجي يفصل المهام إلى ثلاث شبكات فرعية على الأقل: شبكة واجهة أمامية (لـ Application Gateways)، وشبكة تطبيق (للأجهزة الافتراضية)، وشبكة بيانات (لقواعد البيانات المُدارة). استخدم نطاقات /24 أو أكبر — يحجز Azure 5 عناوين IP في كل شبكة فرعية داخلياً.

Azure VNet three-tier subnet layout VNet 10.0.0.0/16 (eastus) Frontend Subnet 10.0.1.0/24 Application Gateway NSG: allow 443 inbound App Subnet 10.0.2.0/24 VM web-01 VM web-02 NSG: allow 8080 from GW Data Subnet 10.0.3.0/24 Azure Database for PostgreSQL NSG: allow 5432 from App
تصميم ثلاثي الطبقات داخل Azure VNet واحد — لكل شبكة فرعية NSG خاص يُطبّق قواعد حركة المرور.

مجموعات أمان الشبكة (NSGs)

NSG هو مرشح حزم ذو حالة (stateful) — مقابل Azure لمجموعات الأمان في AWS، لكن مع فارقين جوهريين. أولاً، يمكن ربط NSG بـالشبكات الفرعية إضافةً إلى بطاقات الشبكة الفردية. ثانياً، قواعد NSG لها أولوية صريحة (100–4096، الأقل يفوز) وتستطيع السماح أو الحجب معاً. يُمكّن هذا من بناء دفاع متعمق: NSG على مستوى الشبكة الفرعية يحجب فئات واسعة من الحركة، بينما يتعامل NSG على مستوى بطاقة الشبكة مع استثناءات الأجهزة الفردية.

# إنشاء NSG وربطه بشبكة فرعية az network nsg create --resource-group prod-rg --name app-nsg # السماح بالمنفذ 8080 من شبكة Application Gateway فقط az network nsg rule create \ --resource-group prod-rg \ --nsg-name app-nsg \ --name allow-gw-8080 \ --priority 100 \ --direction Inbound \ --access Allow \ --protocol Tcp \ --source-address-prefixes 10.0.1.0/24 \ --destination-port-ranges 8080 # حجب صريح لكل ما عدا ذلك (الافتراضي يحجب، لكن الصراحة أفضل) az network nsg rule create \ --resource-group prod-rg \ --nsg-name app-nsg \ --name deny-all-inbound \ --priority 4000 \ --direction Inbound \ --access Deny \ --protocol "*" \ --source-address-prefixes "*" \ --destination-port-ranges "*" # ربط NSG بالشبكة الفرعية (يُطبّق على جميع الأجهزة في هذه الشبكة) az network vnet subnet update \ --resource-group prod-rg \ --vnet-name prod-vnet \ --name app-subnet \ --network-security-group app-nsg
خطأ إنتاجي شائع — ترتيب تقييم NSG: عند ربط NSG بشبكة فرعية وبطاقة شبكة في آنٍ واحد، يُقيّم Azure كليهما. للحركة الواردة، يعمل NSG الشبكة الفرعية أولاً ثم NSG بطاقة الشبكة؛ وكلاهما يجب أن يسمح بالحركة. للحركة الصادرة، يعمل NSG بطاقة الشبكة أولاً. هذا يُوقع المهندسين حين يُصلحون NSG الشبكة الفرعية لكنهم ينسون أن NSG بطاقة الشبكة يحجب أيضاً. استخدم az network watcher test-ip-flow لتشخيص المشكلة بسرعة.
Service Tags: بدلاً من ترميز نطاقات IP بشكل ثابت، استخدم Service Tags في قواعد NSG. على سبيل المثال، --source-address-prefixes AzureLoadBalancer يسمح بحركة فحص الصحة من بنية Azure التحتية، وInternet تمثل جميع عناوين IP العامة. تحافظ Microsoft على هذه النطاقات تلقائياً — وهي مكافئ Azure لقوائم البادئات في AWS للخدمات المُدارة.

موازنات أحمال Azure

تقدم Azure منتجَين لموازنة الأحمال ستصادفهما باستمرار: Standard Load Balancer (الطبقة 4، TCP/UDP) وApplication Gateway (الطبقة 7، HTTP/HTTPS). يقابلان تقريباً AWS NLB وALB على التوالي.

Standard Load Balancer هو الحصان الأساسي لحركة المرور الداخلية وتوزيع الحمل بين الأجهزة الافتراضية. المفاهيم الرئيسية:

  • تكوين IP الأمامي (Frontend IP) — عنوان IP خاص أو عام يستمع إليه موازن الحمل.
  • مجموعة الخلفية (Backend Pool) — مجموعة الأجهزة الافتراضية أو بطاقات الشبكة التي تُوزَّع عليها الحركة.
  • فحص الصحة (Health Probe) — فحص TCP أو HTTP؛ الأجهزة غير السليمة تُزال من التدوير.
  • قاعدة موازنة الحمل — تربط منفذاً أمامياً بمنفذ خلفي مع خوارزمية توزيع (افتراضياً: تجزئة 5 عناصر للاستمرارية).
# إنشاء Standard Load Balancer داخلي az network lb create \ --resource-group prod-rg \ --name internal-lb \ --sku Standard \ --vnet-name prod-vnet \ --subnet app-subnet \ --frontend-ip-name lb-frontend \ --private-ip-address 10.0.2.100 \ --backend-pool-name app-pool # إضافة فحص صحة HTTP على المنفذ 8080 az network lb probe create \ --resource-group prod-rg \ --lb-name internal-lb \ --name http-probe \ --protocol Http \ --port 8080 \ --path /healthz \ --interval 10 \ --threshold 2 # إنشاء قاعدة موازنة: المنفذ الأمامي 80 -> الخلفي 8080 az network lb rule create \ --resource-group prod-rg \ --lb-name internal-lb \ --name http-rule \ --protocol Tcp \ --frontend-port 80 \ --backend-port 8080 \ --frontend-ip-name lb-frontend \ --backend-pool-name app-pool \ --probe-name http-probe \ --idle-timeout 15 \ --enable-tcp-reset true # إضافة بطاقات شبكة الأجهزة الافتراضية إلى مجموعة الخلفية az network nic ip-config address-pool add \ --resource-group prod-rg \ --nic-name web-01VMNic \ --ip-config-name ipconfig1 \ --lb-name internal-lb \ --address-pool app-pool
نصيحة — تفعيل TCP Reset عند انتهاء مهلة الخمول: فعّل دائماً --enable-tcp-reset true في قواعد موازنة الحمل. بدونه، تنتهي مهلة الاتصالات الخاملة بصمت ويحصل تطبيقك على تعليق مقبس بلا RST. مع تفعيل TCP Reset، يُرسل موازن الحمل حزم RST لكلا الطرفين عند انتهاء المهلة، مما يُتيح للتطبيق الفشل بسرعة وإعادة الاتصال بنظافة.

مقارنة بين AWS وAzure

يُعيّن الجدول التالي المكوّنات التي تعرفها في AWS إلى مقابلاتها في Azure. المفاهيم متطابقة؛ الفارق في الواجهة البرمجية والإعدادات الافتراضية.

  • AWS VPCAzure VNet (الشبكات الفرعية على مستوى المنطقة، غير مرتبطة بمنطقة توفر)
  • AWS Security GroupAzure NSG (يُربط بالشبكة الفرعية أو بطاقة الشبكة؛ يدعم قواعد الحجب الصريح)
  • AWS EC2 instanceAzure VM (في مجموعة موارد؛ بطاقة الشبكة والقرص وIP العام موارد مستقلة)
  • AWS ALBAzure Application Gateway (الطبقة 7، يدعم WAF)
  • AWS NLBAzure Standard Load Balancer (الطبقة 4، مقاوم للمناطق مع SKU Standard)
  • AWS Auto Scaling GroupAzure Virtual Machine Scale Sets (VMSS)
  • AWS Subnet (مرتبطة بمنطقة توفر)Azure Subnet (على مستوى المنطقة) — تثبيت المنطقة يكون على مستوى المورد
استخدم دائماً SKU Standard: يوفر Azure نوعَين من موازنات الأحمال — Basic وStandard. لا تستخدم Basic أبداً في الإنتاج. يدعم Standard LB مناطق التوفر واتفاقية مستوى الخدمة (99.99%) وقواعد الخروج والمنافذ عالية التوفر. أما Basic LB فمفتوح بالإعداد الافتراضي (بدون NSG تُسمح جميع الحركة) وبدون SLA. تعامل مع Basic كأنه غير موجود.