CloudFront وGlobal Accelerator: أقرب لزوارك
ليش المسافة تبطّئ موقعك، وكيف يحفظ CloudFront نسخ قريبة من الزوار، وكيف تحمي مصدرك وتمسح الكاش، ووش يسوي Global Accelerator للزيارات اللي ما تنخزّن، ومتى تختار كل واحد.
- الفكرة الأساسية
- تعريف
- متى يُستخدم
- تنبيه
في هذا المقال
في الجزء الحادي عشر صار لموقعك اسم، بس سيرفره لسا في مكان واحد. والزائر البعيد طلبه يعبر قارات وشبكات كثيرة على الإنترنت العام، وكل طلب ياخذ وقت.
عندك خدمتين لهذي المشكلة: CloudFront يحفظ نسخة قريبة من الزائر، وGlobal Accelerator يختصر الطريق نفسه.
CloudFront: نسخة قريبة من كل زائر
CloudFront شبكة توصيل محتوى (CDN). تستخدم مواقع الحافة المنتشرة حول العالم، فأول زائر يطلب ملف يجيبه CloudFront من مصدرك ويحفظه، واللي بعده في نفس المنطقة ياخذه من موقع الحافة مباشرة.
ووش تستفيد؟
- سرعة أعلى: الجواب من مكان قريب.
- ضغط أقل على المصدر: أغلب الطلبات تنتهي عند الحافة.
- حماية: تجي مع Shield Standard ضد هجمات DDoS، وتقدر تضيف WAF.
- HTTPS مجاني: بشهادة من ACM، وتشغيل TLS عند الحافة.
المصادر (Origins)
المصدر هو المكان الأصلي للمحتوى. وأهم شي إن الزوار ما يتخطون CloudFront ويوصلون له مباشرة:
| المصدر | يناسب | كيف تخليه خاص |
|---|---|---|
| حاوية S3 | مواقع ثابتة وملفات | OAC يخلي CloudFront وحده يقرأ منها |
| ALB | تطبيقات ديناميكية | VPC Origins يخلي الموزّع في شبكة خاصة |
| سيرفر EC2 | تطبيق على سيرفر | VPC Origins، أو مجموعة أمان تسمح لنطاقات CloudFront فقط |
| أي سيرفر HTTP | حتى خارج AWS | ترويسة سرية يتحقق منها السيرفر |
وبنشرح S3 بالتفصيل في قسم التخزين الكائني.
وش ينخزّن وكم؟
- مفتاح الكاش (Cache Key): افتراضياً الرابط. وكل ما أضفت له ترويسات أو كوكيز، قلّت فرص إيجاد نسخة جاهزة، فخله بأقل ما يمكن.
- مدة الصلاحية: من ترويسة
Cache-Controlعند المصدر، أو من إعدادات CloudFront. - السلوكيات (Behaviors): قواعد حسب المسار، مثل
/images/*بمدة طويلة و/api/*بدون كاش. فنطاق واحد يخدم المحتوى الثابت والديناميكي.
مسح الكاش
لو غيّرت ملف، النسخة القديمة تبقى لين تنتهي صلاحيتها. وعندك حلين:
- Invalidation: تطلب من CloudFront يمسح مسارات، مثل
/*. وأول 1000 مسار في الشهر مجانية. - إصدار في اسم الملف: مثل
main.css?v=12، فالإصدار الجديد رابط جديد. وهذا الحل الأفضل للملفات الثابتة.
ميزات إضافية
- Geo Restriction: تسمح أو تمنع دول معينة، مثل محتوى مرخّص لبلد واحد.
- روابط موقّعة (Signed URLs): لمحتوى مدفوع أو خاص، برابط له مدة.
- CloudFront Functions وLambda@Edge: كود قصير يشتغل عند الحافة، مثل التحويلات وتعديل الترويسات.
الأسعار
عندك طريقتين، والأسعار ممكن تتغير فراجعها قبل ما تقرر:
- حسب الاستخدام: تدفع على البيانات الخارجة والطلبات، ويختلف السعر حسب المنطقة. وكل شهر عندك 1 TB و10 ملايين طلب مجاناً. وPrice Classes تخليك تستثني المناطق الأغلى، مقابل تغطية أقل.
- خطط ثابتة: Free وPro وBusiness وPremium بسعر شهري لكل توزيعة بدون مفاجآت، وتشمل خدمات ثانية مثل WAF.
ونقل البيانات من S3 أو ALB إلى CloudFront مجاني.
CloudFront أو نسخ S3 بين Regions؟
| CloudFront | S3 Cross-Region Replication | |
|---|---|---|
| التغطية | كل مواقع الحافة | الـ Regions اللي تختارها |
| البيانات | نسخ مؤقتة لين تنتهي صلاحيتها | نسخ كاملة تتحدث باستمرار |
| يناسب | محتوى ثابت لكل العالم | بيانات متغيرة تبيها قريبة في Regions محددة |
Global Accelerator: طريق أسرع
بعض الزيارات ما تنخزّن: لعبة عبر UDP، أو مكالمة صوتية، أو طلب دفع. لازم توصل لتطبيقك نفسه، وعلى الإنترنت العام تمر بشبكات كثيرة وتأخير غير ثابت.
Global Accelerator يدخّل الزائر شبكة AWS الخاصة من أقرب موقع حافة، ويكمل الطريق عليها لين تطبيقك.
عنوانين ثابتين عبر Anycast
في الإنترنت العادي (Unicast)، كل عنوان له جهاز واحد. وفي Anycast، عدة أماكن تشارك نفس العنوان، والشبكة توصلك لأقربها.
Global Accelerator يعطيك عنوانين ثابتين من هذا النوع، يشيرون لموزّعات ALB أو NLB أو سيرفرات EC2 أو Elastic IP، حتى في أكثر من Region. وهذا يعطيك:
- عناوين ما تتغير: عميلك يقدر يسمح لها في جدار الحماية.
- تحويل سريع: يتابع صحة التطبيق وينقل الزيارات، بدون ما تنتظر انتهاء كاش DNS عند الناس.
- تحكم في الزيارات: تحدد نسبة كل Region، فتقدر تجرب نسخة جديدة في واحدة منها.
- حماية: Shield Standard، وتطبيقك ما ينكشف مباشرة.
وتكلفته رسم ثابت بالساعة مع رسم إضافي على البيانات، فما هو مجاني مثل طبقة CloudFront.
أيهم تختار؟
| CloudFront | Global Accelerator | |
|---|---|---|
| البروتوكولات | HTTP وHTTPS | أي TCP أو UDP |
| يخزّن؟ | نعم | لا، يوصّل الطلب فقط |
| العناوين | تتغير، وتستخدم اسم نطاق | عنوانين ثابتين |
| يناسب | مواقع وصور وفيديو وواجهات API | ألعاب ومكالمات وIoT، أو حاجة لعناوين ثابتة |
لو تطبيقك HTTP، ابدأ بـ CloudFront.
الصورة الكاملة حتى الآن
مسار الزائر صار كذا: Route 53 تعطيه العنوان، ثم CloudFront يجاوبه من أقرب موقع لو عنده نسخة، وإلا يوصّل طلبه لـ ALB، وهو يوزّعه على سيرفرات Auto Scaling، اللي تقرأ من ElastiCache وRDS.
عملي: شوف الكاش بعينك
بنحط CloudFront قدام سيرفرك web-1 من الجزء الثالث، لأنه يسمح بـ HTTP من أي مكان. من CloudShell:
ORIGIN=$(aws ec2 describe-instances \
--filters "Name=tag:Name,Values=web-1" "Name=instance-state-name,Values=running" \
--query "Reservations[0].Instances[0].PublicDnsName" --output text)
aws cloudfront create-distribution \
--origin-domain-name "$ORIGIN" \
--query "Distribution.[Id,DomainName]" --output table
احفظ المعرّف والاسم من الجدول، وانتظر لين تجهز، وهذا ياخذ كم دقيقة:
aws cloudfront wait distribution-deployed --id YOUR-DISTRIBUTION-ID
الحين اطلب الصفحة ثلاث مرات، وشوف الترويسات:
for i in 1 2 3; do
curl -s -o /dev/null -D - https://YOUR-DOMAIN.cloudfront.net \
| grep -iE "^(x-cache|age|x-amz-cf-pop)"
echo
sleep 2
done
أول طلب يرجع Miss from cloudfront، واللي بعده Hit from cloudfront مع age يزيد. وx-amz-cf-pop يوريك موقع الحافة اللي جاوبك.
الحين غيّر الصفحة على السيرفر من EC2 Instance Connect:
echo "<h1>New version</h1>" | sudo tee /usr/share/nginx/html/index.html
افتح رابط CloudFront، وبتلقى الصفحة القديمة لأنها لسا في الكاش. امسحها من CloudShell:
aws cloudfront create-invalidation \
--distribution-id YOUR-DISTRIBUTION-ID --paths "/*"
بعد لحظات تظهر الصفحة الجديدة.
الخلاصة
- CloudFront يحفظ نسخ قريبة من الزوار، فالموقع يسرع والضغط يقل على المصدر.
- خل مصدرك خاص عبر OAC أو VPC Origins، عشان ما أحد يتخطى CloudFront.
- إصدار في اسم الملف أفضل من مسح الكاش في كل مرة.
- Global Accelerator ما يخزّن، بس يوصّل أي TCP أو UDP عبر شبكة AWS بعنوانين ثابتين.
- لو تطبيقك HTTP ابدأ بـ CloudFront.
اختبر نفسك
قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.
السؤال 1 من 5
لعبة جماعية ترسل زياراتها عبر UDP لسيرفرات في Regionين. واللاعبين يشتكون من تأخير غير ثابت، وبعض الشركاء ما يقدرون يسمحون في جدران الحماية إلا لعناوين ثابتة. أي خدمة تناسب؟
اعرض الجواب
الجواب الصحيح: B
Global Accelerator يوصّل أي TCP أو UDP عبر شبكة AWS من أقرب موقع حافة، ويعطيك عنوانين ثابتين ينحطون في جدار الحماية.
- A: CloudFront يخدم HTTP وHTTPS، مو زيارات UDP حق لعبة.
- C: هذا يختار Region بس، فالزيارات لسا تمر بالإنترنت العام، والعناوين مو ثابتة.
- D: هذا ينسخ ملفات S3، وما له علاقة بزيارات اللعبة المباشرة.
للمراجعة: Global Accelerator: طريق أسرع في هذا الجزء، وAWS Global Accelerator FAQs في موقع AWS.
السؤال 2 من 5
أكاديمية على الإنترنت تحفظ ملفات دوراتها في S3 وتقدمها عبر CloudFront. والزوار لسا يقدرون يفتحون الملفات مباشرة من رابط الحاوية، ويتخطون CloudFront بالكامل. وش يقفل هذي الثغرة؟
اعرض الجواب
الجواب الصحيح: C
مع OAC، يوقّع CloudFront طلباته إلى S3، وسياسة الحاوية تقبل هذي الطلبات فقط، فتبقى الحاوية مقفلة على الكل.
- A: هذا يحدد الدول داخل CloudFront، ورابط الحاوية يبقى مفتوح.
- B: هذا يتحكم في اللي يمر عبر CloudFront، ورابط الحاوية يبقى مفتوح.
- D: هذا يمسح النسخ من الكاش، وما يغير شي في مين يوصل للحاوية.
للمراجعة: المصادر (Origins) في هذا الجزء، وRestrict access to an Amazon S3 origin في وثائق AWS.
السؤال 3 من 5
نطاق واحد يخدم صور المنتجات تحت /images/* وواجهة API مباشرة تحت /api/*. والصور لازم تبقى في الكاش شهر، وردود الـ API ما تنخزن أبداً. وش أبسط طريقة لهذا في CloudFront؟
اعرض الجواب
الجواب الصحيح: D
الـ Behavior يطبق قواعده الخاصة على نمط مسار، فتوزيعة وحدة على نطاق واحد تقدر تحتفظ بالصور مدة طويلة، وتمرر الـ API مباشرة.
- A: هذا يقسم الموقع على نطاقين بدون حاجة.
- B: الـ Invalidation ياخذ وقت وما هو مصمم لكل طلب، والمسارات تصير مدفوعة بعد الحصة الشهرية.
- C: هذا ما يخزن شي، فما يفيد الصور بشي.
للمراجعة: وش ينخزّن وكم؟ في هذا الجزء، وCache behavior settings في وثائق AWS.
السؤال 4 من 5
فريق يغيّر main.css كم مرة في اليوم. والزوار أحياناً يشوفون التنسيق القديم، والفريق مل من مسح الكاش بعد كل إصدار. وش الحل الأفضل على المدى الطويل؟
اعرض الجواب
الجواب الصحيح: A
الإصدار الجديد يعني رابط جديد، فياخذ الزوار النسخة الجديدة فوراً، بدون انتظار انتهاء القديمة وبدون أي مسح.
- B: الزوار بيبقون على النسخة القديمة مدة أطول.
- C: هذا يضيّع السرعة، ويرجّع الحمل على المصدر.
- D: هذا يزيد نسخ لازم تبقى متطابقة، والقديمة تبقى في الكاش.
للمراجعة: مسح الكاش في هذا الجزء، وUse file versioning to update or remove content في وثائق AWS.
السؤال 5 من 5
موقع أخبار يلاحظ إن أغلب طلبات CloudFront لسا توصل للمصدر، حتى لمقالات نادراً تتغير. ومفتاح الكاش فيه كل الكوكيز والترويسات، والمصدر يرسل Cache-Control: max-age=60. أي تغييرين يزيدون نسبة الطلبات اللي ترد من الحافة؟ (اختر اثنين.)
اعرض الجواب
الجواب الصحيح: B + D
كل قيمة زيادة في المفتاح تقسم الصفحة الوحدة لنسخ كثيرة، والمدة القصيرة ترجّع الطلبات للمصدر بعد وقت قصير. ولما تصلح الاثنين، يلقى زوار أكثر نسخة جاهزة.
- A: هذا يفضي الكاش، فتزيد المشكلة.
- C: هذا ما يخزن، فالطلبات لسا توصل للمصدر.
- E: بيكون لها نفس المفتاح ونفس المدة، فتتكرر نفس المشكلة.
للمراجعة: وش ينخزّن وكم؟ في هذا الجزء، وIncrease the proportion of requests that are served directly from the CloudFront caches في وثائق AWS.
كل هذا يوصّل الزائر لبوابة شبكتك، بس كيف تنبني الشبكة نفسها؟ في الجزء الثالث عشر نفتح VPC ونبني واحدة من الصفر.