قم ببناء وتخصيص CDN

تُستخدم شبكات توصيل المحتوى (CDNs) على المواقع والتطبيقات في المقام الأول لتسريع عملية تحميل العناصر الثابتة. يحدث هذا بسبب التخزين المؤقت للملفات على خوادم CDN الموجودة في مناطق جغرافية مختلفة. بعد طلب البيانات عبر CDN ، يتلقى المستخدم البيانات من أقرب خادم.

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

يحدث أنك لسبب أو لآخر تحتاج إلى تنظيم شبكة توصيل المحتوى الخاصة بك ، وبعد ذلك - دعنا نساعدك في بناء دراجة أخرى.


المصدر: ناقل رسومي تم إنشاؤه بواسطة pikisuperstar - www.freepik.com


عندما تحتاج CDN الخاصة بك


ضع في اعتبارك الحالات التي يكون فيها بدء تشغيل CDN الخاص بك منطقيًا:

  • عندما تريد توفير المال وتكاليف التشغيل حتى عند استخدام شبكات CDN غير المكلفة مثل BunnyCDN عدة مئات من الدولارات شهريًا
  • إذا أردنا الحصول على ذاكرة تخزين مؤقت دائمة أو ذاكرة تخزين مؤقت بدون جيران على الخادم والقناة
  • في المنطقة التي تحتاجها ، خدمات CDN ليس لها نقاط حضور
  • أي إعدادات خاصة لتسليم المحتوى مطلوبة
  • نريد تسريع عملية تسليم المحتوى الديناميكي عن طريق التقريب من مستخدمي خادم الإنتاج
  • هناك قلق من أن خدمة CDN التابعة لجهة خارجية قد تجمع أو تستخدم بشكل غير قانوني معلومات حول سلوك المستخدم (مرحبًا بالخدمات التي لا تتوافق مع اللائحة العامة لحماية البيانات) أو تشارك في إجراءات أخرى غير قانونية

في معظم الحالات الأخرى ، من الأفضل استخدام الحلول الجاهزة الحالية.


ما تحتاجه لتشغيل


إنه لأمر رائع إذا كان لديك نظام مستقل خاص بك (AS). باستخدامه ، يمكنك تعيين نفس عنوان IP إلى عدة خوادم واتباع هذه التعليمات على مستوى الشبكة لتوجيه المستخدمين إلى أقرب خادم . تجدر الإشارة إلى أنه حتى مع كتلة العناوين / 24 ، من الممكن بناء شبكة توصيل محتوى. يسمح لك بعض موفري الخوادم بعمل إعلان للاستخدام في جميع المناطق المتاحة لهم.

إذا لم تكن مالكًا سعيدًا لمجموعة من عناوين IP ، فستحتاج لتشغيل CDN بسيط:

  • . ,
  • geoDNS . , ,



مع تسجيل النطاق ، كل شيء بسيط - قم بالتسجيل في أي منطقة مع أي مسجل. يمكنك أيضًا استخدام نطاق فرعي لـ CDN ، مثل شيء مثل cdn.Nameomain.com . في الواقع في مثالنا ، سنفعل ذلك.

أما بالنسبة لطلب الخوادم ، فيجب استئجارها في المناطق والبلدان التي يوجد بها جمهور المستخدم الخاص بك. إذا كان المشروع عابر للقارات ، فمن المناسب اختيار مقدمي الاستضافة الذين يقدمون خوادم في جميع أنحاء العالم على الفور. أمثلة: OVH و Leaseweb و 100Tb للخوادم المخصصة و Vultr و DigitalOcean للسحابة الافتراضية *.

بالنسبة لـ CDN الخاصة بنا ، نطلب 3 خوادم افتراضية في قارات مختلفة. عند vultrعلى الخادم مقابل 5 دولارات شهريًا ، نحصل على 25 جيجابايت SSD ومساحة 1 تيرابايت من حركة المرور . عند التثبيت ، حدد أحدث إصدار من دبيان. خوادمنا:

فرانكفورت ، ip: 199.247.18.199

Chicago ، ip: 149.28.121.123

سنغافورة ، ip: 157.230.240.216

* يعد Vultr و DigitalOcean بقرض 100 دولار للمستخدمين المسجلين باستخدام الروابط الموجودة في المقالة فورًا بعد إضافة طريقة دفع. كما يتلقى المؤلف مجاملة صغيرة من هذا ، وهو أمر مهم للغاية بالنسبة له الآن. يرجى التفاهم.


تكوين geoDNS


حتى عندما يصل المستخدم إلى نطاق CDN أو نطاق فرعي ، يتم توجيهه إلى الخادم المطلوب (الأقرب إليه) ، نحتاج إلى خادم DNS مع وظيفة geoDNS.

مبدأ وإجراء geoDNS كما يلي:

  1. يحدد IP للعميل الذي أرسل طلب DNS ، أو IP لملقم DNS العودي المستخدم لمعالجة طلب العميل. عادة ما تكون هذه الخوادم العودية موفري DNS.
  2. بواسطة عميل IP يعرف بلده أو منطقته. لهذا ، يتم استخدام قواعد GeoIP ، والتي يوجد منها الكثير اليوم. هناك بعض الخيارات المجانية الجيدة .
  3. اعتمادًا على موقع العميل ، يمنحه عنوان IP لأقرب خادم CDN.

يمكنك بناء خادم DNS باستخدام وظيفة geoDNS بنفسك ، ولكن من الأفضل استخدام حلول جاهزة مع شبكة من خوادم DNS حول العالم و Anycast خارج الصندوق:

  • louDNS من $ 9.95 / month ، تعريفة GeoDNS ، افتراضيًا هناك فشل واحد في DNS
  • Zilore بدءًا من $ 25 / شهريًا ، تم تمكين تجاوز الفشل لنظام أسماء النطاقات
  • أمازون روت 53 من 35 دولارًا أمريكيًا / شهرًا مقابل 50 مليون طلب جغرافي صافي. يتم تحصيل رسوم تجاوز فشل DNS بشكل منفصل
  • أصبح DNS سهلًا من 125 دولارًا أمريكيًا / الشهر ، هناك 10 تجاوزات DNS
  • Cloudflare ، ميزة التوجيه الجغرافي المتوفرة في أسعار الشركات

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

تتضمن جميع خدمات DNS تقريبًا ضرورة لا غنى عنها لبناء خدمة CDN - DNS Failover. باستخدامه ، يمكنك تكوين مراقبة خوادمك ، وفي حالة عدم وجود علامات للحياة ، يمكنك استبدال عنوان الخادم غير العامل تلقائيًا بخادم احتياطي في إجابات DNS.

لبناء CDN لدينا ، سنستخدم ClouDNS ، تعرفة GeoDNS.

أضف منطقة DNS جديدة في حسابك ، تشير إلى المجال الخاص بك. إذا قمنا ببناء CDN على نطاق فرعي ، وكان المجال الرئيسي قيد الاستخدام بالفعل ، فبعد إضافة المنطقة مباشرة ، لا تنس إضافة سجلات DNS العاملة الموجودة. تتمثل الخطوة التالية في إنشاء عدة سجلات A لنطاق CDN / النطاق الفرعي ، وسيتم تطبيق كل منها على المنطقة التي حددناها. يمكنك تحديد القارات أو البلدان كمناطق ؛ تتوفر مناطق فرعية للولايات المتحدة الأمريكية وكندا.

في حالتنا، سيتم رفع CDN على cdn.sayt.in فرعي . بإضافة منطقة sayt.in ، قم بإنشاء أول سجل A للنطاق الفرعي وتوجيه أمريكا الشمالية بالكامل إلى الخادم في شيكاغو:


كرر ذلك للمناطق الأخرى ، وتذكر إنشاء إدخال واحد للمناطق الافتراضية. ها هي النتيجة:



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

هذا يكمل التكوين DNS الأساسي. ويبقى الانتقال إلى موقع ويب مسجل النطاق واستبدال NS المجال الحالي بتلك الصادرة عن ClouDNS. وبينما سيتم تحديث NS ، سنقوم بإعداد الخادم.


تثبيت شهادات SSL


سيعمل CDN الخاص بنا على HTTPS ، لذلك إذا كان لديك بالفعل شهادات SSL لنطاق أو مجال فرعي ، فقم بتحميلها على جميع الخوادم ، على سبيل المثال ، في الدليل / etc / ssl / yourdomain /

إذا لم تكن هناك شهادات ، فيمكنك الحصول على شهادة مجانية من Let's Encrypt. يعد البرنامج النصي ACME Shell مثاليًا لذلك . العميل مريح وسهل التهيئة ، والأهم من ذلك - يسمح لك بالتحقق من صحة المجال / النطاق الفرعي لـ DNS من خلال API من ClouDNS.

سنقوم بتثبيت acme.sh فقط على أحد الخوادم - الأوروبية 199.247.18.199 ، والتي سيتم نسخ الشهادات منها إلى جميع الخوادم الأخرى. للتثبيت ، قم بما يلي:

root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrc

أثناء تثبيت البرنامج النصي ، سيتم إنشاء مهمة CRON لمزيد من تجديد الشهادات دون مشاركتنا.

سيتم التحقق من النطاق عند إصدار شهادة باستخدام DNS باستخدام واجهة برمجة التطبيقات ، وبالتالي ، في حساب ClouDNS الشخصي في قائمة واجهة برمجة تطبيقات المورِّد ، تحتاج إلى إنشاء واجهة برمجة تطبيقات مستخدم جديدة وتعيين كلمة مرور لها. يتم كتابة الناتجة المصادقة معرف مع كلمة المرور في ملف ~ / .acme.sh / dnsapi / dns_cloudns.sh (وينبغي عدم الخلط بينه وبين dns_clou د ملف dns.sh ). في ما يلي السطور التي يجب إلغاء التعليق والتعديل عليها:

CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<>"

الآن نطلب شهادة SSL لـ cdn.sayt.in

root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"

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

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



تذكر هذه المسارات ، ستحتاج إلى تحديدها عند نسخ الشهادة إلى خوادم أخرى ، وكذلك في إعدادات خادم الويب. نحن لا ننتبه إلى خطأ إعادة تحميل ملفات تهيئة Nginx - على خادم تم تكوينه بالكامل لن يكون موجودًا عند تجديد الشهادات.

كل ما تبقى لنا عبر SSL هو نسخ الشهادة المستلمة إلى خادمين آخرين مع حفظ المسار إلى الملفات. قم بإنشاء نفس الأدلة على كل منها وقم بعمل نسخة:

root@cdn:~# mkdir -p /root/.acme.sh/cdn.sayt.in/
root@cdn:~# scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/

بحيث يكون تجديد الشهادة منتظمًا ، سننشئ مهمة CRON يوميًا على الخادمين باستخدام الأمر:
scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload

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


قم بتثبيت وتكوين Nginx


لإرجاع محتوى ثابت ، سنستخدم Nginx ، الذي تم تكوينه كخادم وكيل للتخزين المؤقت. قم بتحديث قائمة الحزم وتثبيتها على الخوادم الثلاثة:

root@cdn:~# apt update
root@cdn:~# apt install nginx

بدلاً من الافتراضي ، استخدم التكوين من المفسد أدناه:
nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 4096;
    multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log off;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_vary on;
    gzip_types text/plain application/javascript text/javascript text/css application/json application/xml text/xml application/rss+xml;
    gunzip on;            

    proxy_temp_path    /var/cache/tmp;
    proxy_cache_path   /var/cache/cdn levels=1:2 keys_zone=cdn:64m max_size=20g inactive=7d;
    proxy_cache_bypass $http_x_update;

server {
  listen 443 ssl;
  server_name cdn.sayt.in;

  ssl_certificate /root/.acme.sh/cdn.sayt.in/cdn.sayt.in.cer;
  ssl_certificate_key /root/.acme.sh/cdn.sayt.in/cdn.sayt.in.key;

  location / {
    proxy_cache cdn;
    proxy_cache_key $uri$is_args$args;
    proxy_cache_valid 90d;
    proxy_pass https://sayt.in;
    }
  }
}


في التكوين ، قم بتحرير:

  • max_size - حجم ذاكرة التخزين المؤقت لا يتجاوز مساحة القرص المتوفرة
  • غير نشط - وقت تخزين البيانات المخزنة مؤقتًا والتي لم يتمكن أحد من الوصول إليها
  • ssl_certificate و ssl_certificate_key - المسارات المؤدية إلى شهادة SSL وملفات المفاتيح
  • proxy_cache_valid - وقت التخزين للبيانات المخزنة مؤقتًا
  • proxy_pass - عنوان الخادم الأصلي الذي ستطلب منه شبكة CDN ملفات التخزين المؤقت. في مثالنا هذا هو sayt.in

كما ترون ، كل شيء بسيط. يمكن أن ينشأ التعقيد فقط في تحديد وقت التخزين المؤقت بسبب تشابه التوجيهات غير النشطة و proxy_cache_valid . سنقوم بتحليلها في مثالنا. إليك ما يحدث في حالة عدم النشاط = 7d و proxy_cache_valid 90d :

  • إذا لم يتكرر الطلب خلال 7 أيام ، فسيتم حذف البيانات من ذاكرة التخزين المؤقت بعد هذه الفترة
  • إذا تم تكرار الطلب مرة واحدة على الأقل كل 7 أيام ، فسيتم اعتبار البيانات الموجودة في ذاكرة التخزين المؤقت قديمة بعد 90 يومًا ، وعند الطلب التالي ستقوم Nginx بتحديثها عن طريق أخذها من الخادم الأصلي

بعد الانتهاء من تحرير nginx.conf ، أعد تحميل التكوين:

root@cdn:~# service nginx reload

CDN جاهز تمامًا. مقابل 15 دولار / شهر حصلنا على نقاط حضور في ثلاث قارات و 3 تيرابايت من حركة المرور: 1 تيرابايت في كل موقع.


التحقق من تشغيل CDN


دعونا نلقي نظرة على الأصوات على CDN لدينا من مواقع جغرافية مختلفة. لهذا ، أي خدمات ping مناسبة.
نقطة الانطلاقمضيفIPمتوسط ​​الوقت ، مللي ثانية
ألمانيا برلينcdn.sayt.in199.247.18.1999.6
هولندا ، أمستردامcdn.sayt.in199.247.18.19910.1
فرنسا باريسcdn.sayt.in199.247.18.19916.3
بريطانيا العظمى ، لندنcdn.sayt.in199.247.18.19914.9
كندا تورونتوcdn.sayt.in149.28.121.12316.2
الولايات المتحدة الأمريكية ، سان فرانسيسكوcdn.sayt.in149.28.121.12352.7
الولايات المتحدة الأمريكية ، دالاسcdn.sayt.in149.28.121.12323.1
الولايات المتحدة الأمريكية ، شيكاغوcdn.sayt.in149.28.121.1232.6
الولايات المتحدة الأمريكية ، نيويوركcdn.sayt.in149.28.121.12319.8
سنغافورةcdn.sayt.in157.230.240.2161.7
اليابان طوكيوcdn.sayt.in157.230.240.21674.8
أستراليا ، سيدنيcdn.sayt.in157.230.240.21695.9
النتائج جيدة. الآن سنضع صورة الاختبار test.jpg في جذر الموقع الرئيسي ونتحقق من سرعة التنزيل عبر CDN. لم يقل من فعله . يتم تسليم المحتوى بسرعة.

سنكتب نصًا صغيرًا في حال أردنا محو ذاكرة التخزين المؤقت على نقطة CDN.
تطهير. sh
#!/bin/bash
if [ -z "$1" ]
then
    echo "Purging all cache"
    rm -rf /var/cache/cdn/*
else
    echo "Purging $1"
    FILE=`echo -n "$1" | md5sum | awk '{print $1}'`
    FULLPATH=/var/cache/cdn/${FILE:31:1}/${FILE:29:2}/${FILE}
    rm -f "${FULLPATH}"
fi


لحذف ذاكرة التخزين المؤقت بالكامل ، فقط قم بتشغيلها ، يمكن تنظيف ملف منفصل مثل هذا:

root@cdn:~# ./purge.sh /test.jpg


بدلا من الاستنتاجات


أخيرًا ، أريد أن أقدم بعض النصائح المفيدة لكي أخطو على الفور أشعل النار ، مما جعل رأسي يؤلمني في وقت ما:

  • لزيادة التسامح مع خطأ CDN ، يوصى بتهيئة DNS Failover ، مما يساعد على تغيير سجل A بسرعة في حالة فشل الخادم. يتم ذلك في لوحة التحكم الخاصة بسجلات DNS الخاصة بالمجال
  • CDN, . CDN, 6-7 : , (), (), , ,
  • CDN. , , -
  • , ,
  • حاول التحقق من الأصوات من أماكن مختلفة لخوادمك. حتى تتمكن من رؤية المناطق الأقرب إلى نقاط CDN وتكوين GeoDNS بشكل صحيح
  • اعتمادًا على المهام ، ليس من غير المناسب تكوين Nginx لمتطلبات التخزين المؤقت المحددة مع مراعاة الحمل على الخادم. - مقالات حول ذاكرة التخزين المؤقت إنجن إكس هنا : وتسريع العمل تحت الأحمال الثقيلة هنا و هنا ساعدني كثيرا.

All Articles