ماذا يجب أن نبني شبكة CDN؟

مرحباً هبر! في هذه المقالة سوف نبني CDN الخاصة بنا. لماذا لا تستخدم الحلول الجاهزة؟ لأن موقع المؤلف ثابت تمامًا ، تم إنشاؤه على Jekyll ، مع صور كبيرة يجب تقديمها في أسرع وقت ممكن. يجب ألا يكون الخادم في ذاكرة التخزين المؤقت ، بل يجب أن يخزن الموقع بأكمله ، ويدعم HTTP / 2 و Brotli ، ويجب تثبيت الشهادة نفسها على جميع الخوادم.

سنفعل ذلك أيضًا على IIS الذي يعمل على Windows Server 2019 Core.


باختصار عن التنفيذ


في العقد النهائية ، سندير الوسائل المضمنة في نظام التشغيل ، وسوف نحتاج إلى:

  1. الدليل النشط
  2. DFS
  3. IIS
  4. WinAcme
  5. RSAT

اختياري ، لكن يوصى به:

  1. مركز مسؤول ويندوز

على المواقع التي تحتوي على مواقع ، لا يلزم سوى IIS و DFS ، مطلوب Active Directory ، وهو مطلوب من أجل DFS ، والذي سيقوم بمزامنة محتويات الموقع بين الخوادم. مطلوب RSAT لإدارة المكونات ، وهناك حاجة إلى Windows Admin Center لتحرير السجل. يمكن القيام بذلك أيضًا من خلال Powershell ، والتي سأناقشها أيضًا.

يُطلق على اسم المؤلف ***. ***. Wtf (يرجى عدم الخوف) ، وتتم تسمية الخوادم باسم مراكز البيانات ولديها أسماء للنموذج cache-zur1 و cahe-ru وما إلى ذلك. يتم نشر م ، والخوادم متصلة به. الآن بالترتيب.

اختيار نقطة


لدى RUVDS 8 مراكز بيانات - 3 في أوروبا و 5 في روسيا. سقط خياري على روكلود في موسكو و LD8 (واحد في لندن). روكلود لأنه لا يختلف تقريبًا عن M9 ، ومن خلال لندن يوجد كابل عبر القارات إلى الولايات المتحدة الأمريكية ، لذلك في أوروبا لا بد منه. للحصول على توزيع أكثر تشددًا في أوروبا ، يمكنك اختيار سويسرا أو ألمانيا - وبصفة عامة ، يمكنك التوقف.

اختيار DNS GeoIP


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

يمكننا استخدام DNS الخاص بنا (BIND مع مكون إضافي لبرنامج Maxmind) أو حل جاهز للاستخدام (Route53). يكلف الاشتراك في قواعد بيانات Maxmind GeoIP 25 دولارًا في الشهر ، بينما يكلف Route53 0.50 دولار لكل منطقة مجال ، بالإضافة إلى بنس واحد إذا ذهبت للحصول على مليون طلب. بالإضافة إلى ذلك ، لإنشاء نقطة أخرى لتعزيز هجمات DDoS هو آخر شيء ، لذلك سقط خياري على Route53.

هذا المقال عن CDN لأوروبا. إذا كنت بحاجة إلى شبكة CDN لروسيا ، فإن الخيار نحو DNS الخاص بك واضح ، لأن Route53 يوفر التوجيه حسب البلد ، وليس حسب المدينة.
لدى Microsoft خدمات مماثلة (Azure Traffic Manager).

1. تثبيت IIS


1.1. تثبيت IIS

نقوم بتثبيت المكونات الأساسية لـ IIS ، ومكون دعم الشهادات المركزية ، وعلى الخادم الرئيسي دعم إضافي للإدارة عن بُعد. هذا المكون ضروري فقط لخادم واحد - لن تتمكن من إدارة خوادم أخرى عند تمكين التكوينات المشتركة ، حتى إذا تم تكوين الإدارة عن بعد.



عبر بوويرشيل:

Install-WindowsFeature Web-Server, Web-CertProvider 

على الخادم الرئيسي ، يجب عليك تثبيت:

 Install-WindowsFeature Web-Mgmt-Service 

1.1.1 تشغيل جهاز التحكم عن بعد

حتى نتمكن من إدارة خادم IIS عن بُعد ، نحتاج إلى رفع خدمة إدارة IIS عن بُعد. على الخادم الرئيسي ، ابدأ الخدمة:

 start-service WMSVC set-service -Name WMSVC -StartupType Automatic 

والآن نحن ندرج القدرة على إدارة على هذا النحو من خلال التسجيل.

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WebManagement\Server 

أسهل طريقة لإدارة السجل ، بالطبع ، هي من خلال Windows Admin Center.



ولكن يمكن القيام بذلك أيضًا من خلال Powershell:

 Set-Itemproperty -path "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WebManagement\Server" -Name "EnableRemoteManagement" -value "1" 

في Windows Server 2012 و 2016 ، لا ترتفع قاعدة جدار الحماية من تلقاء نفسها ؛ تحتاج إلى تعديل جدار الحماية.



 Set-NetFirewallRule -Name IIS-WebServerRole-WMSVC-In-TCP -Enabled True 

تحقق مما إذا كان قد ارتفع:



 Test-NetConnection 8.8.8.8 -port 8172 

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

1.2 نقطع مركزية التكوينات

لا توجد أزرار لتثبيت التكوينات والشهادات المركزية في إدارة IIS ، فهي موجودة فقط في مدير الخادم المحلي ، لذلك سيكون من الضروري بالنسبة لـ Server Core القيام بكل شيء من خلال Powershell.

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

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

1.2.1 عمل مجلد مشترك

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

 New-SmbShare -ReadAccess configadmin@**.**wtf -Path C:\windows\System32\Inetsrv\Config -Name sharedconfigs 

ولشهادات يمكننا اختيار أي. أنا وضعت لهم في مجلد مع IIS.

 New-SmbShare -Path C:\inetpub\centralizedcerts -Name sharedconfigs -ReadAccess configadmin 

1.2.2 نحن ربط العقد إلى التكوينات

يجب إجراء الإعدادات فقط لتلك الخوادم التي ستقرأ هذا التكوين. سيكون الخادم الرئيسي الخاص بي تحت اسم cache-ru هو الرأس ، لذلك قمت بتكوينه على الجهازين الآخرين.
أدخل كلمة مرور المستخدم الذي لديه حق الوصول إلى المجلد:

 $pass = Read-Host -AsSecureString Enable-IISSharedConfig -PhysicalPath \\cache-ru.**.**wtf\SharedConfig -UserName configadmin@**.**wtf -Password $pass -DontCopyRemoteKeys 

مباشرة بعد دخول جلسة جديدة يجب فتح. للتحقق من نجاح كل شيء ، يمكنك فتح RSAT → إدارة الكمبيوتر → المجلدات المشتركة → الجلسات. سنرى جلسات المستخدم وعنوان IP الخاص بالخادم ، والذي يقرأ المجلد المشترك ضمن هذا المستخدم. من جانب العميل ، يتم فحصه بواسطة الأمر cmdlet:

 Get-IISSharedConfig 

هكذا بدا لي:



1.2.2 توصيل العقد بالشهادات

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

 $pass = Read-Host -AsSecureString Enable-IISCentralCertProvider -CertStoreLocation \\cache-ru.**.**wtf\centralizedcerts -UserName certadmin@**.**wtf -Password $pass 

إذا حاولت إدخاله عبر Winrm ، فسترى الإخراج التالي:



للقيام بذلك عن بعد ، تحتاج إلى تحرير التسجيل. كيف مريحة! نحن نطير في:

 HKLM:\SOFTWARE\Microsoft\IIS\CentralCertProvider\ 

إنشاء DWORD 32 بت "ممكّن" مع المعلمة "1":



 Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\IIS\CentralCertProvider\ -Name Enabled -Value 1 

ثم نقوم بإنشاء قيمة السلسلة CertStoreLocation مع المعلمة \\ cache-ru. **. ** wtf \ centralizedcerts:

 Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\IIS\CentralCertProvider\ -Name CertStoreLocation -Value <a href="about:blank">\\cache-ru.**.**wtf\centralizedcerts</a> 

للتحقق مما إذا كان كل شيء على ما يرام ، نستخدم:

 Get-IISCentralCertProvider 

يجب أن يكون الإخراج مثل هذا:



وبعد ذلك فقط ندخل:

 $pass = Read-Host -AsSecureString Set-IISCentralCertProvider -UserName certadmin@**.**wtf -Password $pass 

تحقق مرة أخرى:

 Get-IISCentralCertProvider 

كل شيء من خارج منطقة الجزاء يسمى. بخلاف التكوينات الشائعة ، لا تنشئ الشهادات المركزية جلسة SMB نشطة.

1.2.3 بروتلي

على كل خادم ، قم بتنزيل وتشغيل ملف ضغط IIS

 Start-Process .\iiscompression_amd64.msi -ArgumentList /quiet 

لقد شاركنا التهيئة بالفعل ، لذلك تحتاج إلى تكوين شيء ما في مكان واحد فقط. باستخدام IIS Manager ، نذهب إلى محرر التكوين على الخادم الرئيسي.



 system.webServer/httpCompression 

وتعيين StaticCompressionLevel على 11 لـ Brotli و 9 لـ Gzip ، هذا هو الحد الأقصى الذي يمكنهم القيام به.

1.2.4 MIME والرؤوس

من خارج منطقة الجزاء ، لا يقوم IIS بإرسال رأس الترميز ، ولهذا السبب تتحول الأبجدية السيريلية إلى الأحرف الرونية. أيضًا في MIME ، لا يوجد إدخال تنسيق ويب يحتاج إلى إضافته.

1. انتقل إلى المرسل → MIME. ابحث عن .HTML وقم بتعديل نوعه إلى: text / html؛ charset = utf-8



2. لا تنسى أن Webp - تحتاج إلى إضافة MIME يدويًا.



2. نصدر شهادة


باستخدام Winacme . أولاً ، تحتاج إلى ربط المجالات بالموقع - يمكن القيام بذلك من خلال إدارة IIS. عند إنشاء CDN ، لا تحدد التحقق من المضيف ، مثل تبدأ المشاكل فورًا بتأكيد ملكية النطاق ، خيارنا هو التحقق من سجل TXT. سيتعين عليك دفع المسار إلى المجلد يدويًا باستخدام الشهادات ، وكذلك نسخ السجل يدويًا من التحدي. الآن ، احصل على الهواء في صدرك.

لكي لا تتم طباعة كل شيء يدويًا ، قم بتمكين RDP على Server Core باستخدام الأمر التالي:

 cscript C:\Windows\System32\Scregedit.wsf /ar 0 

هذا ما يشبه RDP على Server Core:



بعد التحدي ، تقع الشهادات في المجلد الذي تم تحديده في Winacme. يضع Winacme المهمة في برنامج الجدولة لتجديد الشهادة. مثبتة ونسيت.



حسنًا ، عندما انتهينا ، يمكننا إيقاف تشغيل RDP - لقد قمنا بتثبيت Server Core لسبب وجيه ، اكتشفنا الكثير من الفروق الدقيقة.

 cscript C:\Windows\System32\Scregedit.wsf /ar 1 

3. شهادة Bindim إلى العقد


أنت الآن بحاجة إلى تكوين عقدتين أخريين بحيث تعمل HTTPS أخيرًا. في هذا الوقت ، على الخادم حيث يتم تخزين الشهادات ، HTTPS قيد التشغيل بالفعل. بحيث تبدأ بقية العمل على HTTPS ، حسنا ، بشكل عام ، يتم ذلك من خلال netsh.

كما اعتدنا على ذلك ، فإننا نتصل بـ Windows Server Core عبر RDP لتشغيل هذه الأداة الإضافية. لا تنظر إلى موقع Microsoft ، خاصة في هذا الدليل. يتم وصف الخطوات الموجودة فيه بشكل غير صحيح.

باستخدام netsh http show sslcert ، تحتاج إلى الحصول على appid على العقدة الرئيسية ، والتي ندخلها كما هو موضح أدناه:

 netsh http add sslcert ccs=443 appid= '{4dc3e181-e14b-4a21-b022-59fc669b0914}' 

يجب أن تكون قيمة appid بعلامات اقتباس ، وإلا فلن تعمل.

4. تثبيت DFS


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

يتم إجراء مزيد من التكوين بشكل حصري من خلال RSAT ، أوامر cmdlets المحددة في الوثائق تعمل فقط تحت Windows Server مع واجهة المستخدم الرسومية. نشر النسخ المتماثل DFS باستخدام Server Core بشكل خاص غير ممكن. تحتاج إما إلى خادم آخر مع واجهة المستخدم الرسومية ، أو جهاز كمبيوتر يعمل بنظام Windows 10 Pro مع تثبيت RSAT ، انضم إلى المجال.

2.1. تثبيت

على كل خادم تحتاج إلى تثبيت DFS Replication:



 Install-WindowsFeature FS-DFS-Replication, FS-DFS-Namespace 

2.2. جعل مجموعة النسخ المتماثل جديدة



تحتاج أولاً إلى الاتصال بمجموعة النسخ المتماثل الخاصة بنا.



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





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



كمجلد للنسخ المتماثل ، اخترت المجلد الافتراضي مع المواقع:

 C:\inetpub\wwwroot 

هذا المجلد هو المسار إلى دليل هذا الخادم الأول بعينه. يمكنك نسخ محتويات هذا المجلد في أي مكان ، بغض النظر عن المسار.



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



انتهينا.

5. اختبار الأداء


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



نذهب إلى Devtools ومشاهدة الشلال. في المتوسط ​​، ستقل شبكة CDN حوالي 200 مللي ثانية قبل أن يتم تحميل الموقع بالكامل. يتم تحميل الصورة ، وهي أكبر كائن في الصفحة ، بمجرد دخولها إلى منفذ العرض ، لذلك انتبه إلى الخط العمودي الأزرق. CDN تسارع أنماط HTML + النصية والنصوص بنسبة 10-15 ميلي ثانية ، وتحميل الصورة 220 ميلي ثانية بشكل أسرع ، وهذا هو الفرق كبير جدا.

موسكو - موسكو:

لندن - موسكو:

زيوريخ - موسكو:

قمت أيضًا بقياس سرعة Jekyll على مضيف محلي:



ننتقل إلى المنزل الخفيف ونرى نتائج غريبة:

موسكو - موسكو:

لندن - موسكو:

زيوريخ - موسكو:

مضيف محلي - جيكيل:

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

موسكو - موسكو:

لندن - موسكو:

زيوريخ - موسكو:

مضيف محلي - جيكيل:

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

الآن سنستخدم VPS مع اثنين من النوى و 4 غيغابايت من ذاكرة الوصول العشوائي الموجودة في فرانكفورت ونرى ما يقوله. الشلالات:

موسكو - فرانكفورت:

لندن - فرانكفورت:

زيورخ - فرانكفورت:

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

موسكو - فرانكفورت:

لندن - فرانكفورت:

زيورخ - فرانكفورت:

قم الآن بتشغيل Google Fonts وانظر إلى المنزل الخفيف مرة أخرى.

موسكو - فرانكفورت:

لندن - فرانكفورت:

زيورخ - فرانكفورت:

لسوء الحظ ، لم يعد لديّ نقاط لإجراء الاختبارات عليها ، لذا سأنتهي.

النتائج


  • CDN لإخراج جميع الإحصائيات أمر ضروري ، خاصة عندما يتعلق الأمر بالصور الثقيلة أو البرامج النصية الطويلة.
  • إن استخدام Google Fonts أمر ممكن وضروري ، في الواقع ، فإنه في السيناريوهات الثقيلة يسرع الموقع بالفعل.
  • الخادم الرئيسي ، إذا قررت القيام بكل هذا على نظام Windows ، فمن المستحسن أن يكون لديك واجهة المستخدم الرسومية.
  • من الأفضل جعل المستخدمين الذين سيأخذون التكوينات من الخادم الرئيسي محليًا - في حالة حدوث فشل في وحدة تحكم المجال ، قد تفقد العقد الاتصال بالتكوينات والشهادات ، وسيتم إيقاف تجمع التطبيقات ، لأن لن تكون قادرة على قراءة التكوين.


Source: https://habr.com/ru/post/ar466447/


All Articles