از CDN استفاده نکنید

تقریباً هر مقاله یا ابزاری برای بهینه‌سازی سرعت سایت یک بند متوسط ​​دارد «استفاده از CDN». به طور کلی CDN یک شبکه تحویل محتوا یا شبکه تحویل محتوا است. ما در آزمایشگاه روش اغلب با سوالاتی از مشتریان در این زمینه مواجه می شویم؛ برخی از آنها CDN خود را فعال می کنند. هدف این مقاله این است که بفهمیم یک CDN از نظر سرعت بارگذاری سایت چه چیزی می تواند ارائه دهد، چه مشکلاتی ممکن است ایجاد شود و در چه مواردی استفاده از CDN موجه است.

از CDN استفاده نکنید

تاخیرهای دایره شده در تصویر به دلیل استفاده از CDN ایجاد می شود.

کمی از تاریخ

مانند بسیاری از فناوری‌ها، CDN‌ها نیز از سر ضرورت پدید آمدند. با توسعه کانال های اینترنتی در بین کاربران اینترنت، خدمات ویدئویی آنلاین ظاهر شد. به طور طبیعی، محتوای ویدیویی در مقایسه با محتوای معمولی وب سایت (تصاویر، متن، و کدهای CSS یا JS) به پهنای باند بیشتری نیاز دارد.

هنگام تلاش برای پخش یک جریان ویدیویی به موازات بسیاری از مشتریان از یک سرور، کانال اینترنتی سرور به احتمال زیاد به گلوگاه تبدیل می شود. به عنوان یک قاعده، چند هزار رشته برای مسدود کردن یک کانال سرور معمولی کافی است. البته ممکن است محدودیت های منابع دیگری نیز وجود داشته باشد، اما در حال حاضر مهم نیستند. همچنین مهم است که گسترش کانال سرور بسیار پرهزینه (و گاهی غیرممکن) و همچنین غیرعملی باشد. بار روی کانال در طول پخش به صورت دوره ای خواهد بود.

مشکل محدود کردن کانال یک سرور به طور کامل توسط CDN حل شده است. کلاینت ها مستقیماً به سرور متصل نمی شوند، بلکه به گره های شبکه CDN متصل می شوند. در یک موقعیت ایده آل، سرور یک جریان را به گره CDN ارسال می کند و سپس شبکه از منابع خود برای ارائه این جریان به بسیاری از کاربران استفاده می کند. از نقطه نظر اقتصادی، ما فقط برای منابعی که واقعاً مصرف شده‌اند (این می‌تواند پهنای باند یا ترافیک باشد) پرداخت می‌کنیم و مقیاس‌پذیری عالی خدمات خود را دریافت می‌کنیم. استفاده از CDN برای ارائه محتوای سنگین کاملاً موجه و منطقی است. اگرچه شایان ذکر است که بزرگترین بازیکنان در این فضا (به عنوان مثال Netflix) به جای استفاده از CDN های تجاری بزرگ (Akamai، Cloudflare، Fastly و غیره) CDN های خود را می سازند.

با تکامل وب، برنامه های کاربردی وب خود پیچیده تر و پیچیده تر شده اند. مشکل سرعت بارگذاری مطرح شد. علاقه مندان به سرعت وب سایت به سرعت چندین مشکل عمده را شناسایی کردند که باعث شد وب سایت ها به کندی بارگذاری شوند. یکی از آنها تاخیرهای شبکه بود (RTT - زمان رفت و برگشت یا زمان پینگ). تأخیرها بر بسیاری از فرآیندها در بارگذاری وب سایت تأثیر می گذارد: ایجاد یک اتصال TCP، شروع یک جلسه TLS، بارگیری هر منبع جداگانه (تصویر، فایل JS، سند HTML و غیره)

مشکل با این واقعیت تشدید شد که هنگام استفاده از پروتکل HTTP/1.1 (قبل از ظهور SPDY، QUIC و HTTP/2 این تنها گزینه بود)، مرورگرها بیش از 6 اتصال TCP را به یک میزبان باز نمی کنند. همه اینها منجر به قطعی اتصال و استفاده ناکارآمد از پهنای باند کانال شد. مشکل تا حدی با اشتراک گذاری دامنه حل شد - ایجاد میزبان های اضافی برای غلبه بر محدودیت تعداد اتصالات.

اینجاست که دومین قابلیت CDN نمایان می شود - کاهش تاخیر (RTT) به دلیل تعداد زیاد نقاط و نزدیکی گره ها به کاربر. فاصله در اینجا نقش تعیین کننده ای دارد: سرعت نور محدود است (حدود 200 کیلومتر بر ثانیه در فیبر نوری). این بدان معناست که هر 000 کیلومتر سفر، 1000 میلی ثانیه تاخیر یا 5 میلی ثانیه به RTT اضافه می کند. این حداقل زمان لازم برای انتقال است، زیرا در تجهیزات میانی نیز تاخیر وجود دارد. از آنجایی که یک CDN معمولاً می داند چگونه اشیاء را در سرورهای خود کش کند، ما می توانیم از بارگذاری چنین اشیایی از طریق CDN بهره مند شویم. شرایط لازم برای این کار: وجود شی در حافظه پنهان، نزدیک بودن نقطه CDN به کاربر در مقایسه با سرور برنامه وب (سرور مبدا). درک این نکته مهم است که نزدیکی جغرافیایی یک گره CDN تأخیر کم را تضمین نمی کند. مسیریابی بین مشتری و CDN می تواند به گونه ای ساخته شود که مشتری به میزبانی در کشور دیگری و احتمالاً در قاره ای دیگر متصل شود. اینجاست که رابطه بین اپراتورهای مخابراتی و سرویس CDN (همتاسازی، اتصالات، مشارکت در IX و غیره) و سیاست مسیریابی ترافیک خود CDN مطرح می‌شود. به عنوان مثال، Cloudflare، هنگام استفاده از دو طرح اولیه (رایگان و ارزان)، تحویل محتوا از نزدیکترین میزبان را تضمین نمی کند - میزبان برای دستیابی به حداقل هزینه انتخاب می شود.

بسیاری از شرکت های اینترنتی پیشرو علاقه عمومی (توسعه دهندگان وب و صاحبان خدمات) را به موضوع سرعت بارگذاری و عملکرد وب سایت جلب می کنند. از جمله این شرکت ها یاهو (ابزار Yslow)، AOL (WebPageTest) و گوگل (سرویس صفحه سرعت Insights) هستند که در حال توسعه توصیه های خود برای افزایش سرعت سایت ها هستند (در درجه اول آنها به بهینه سازی مشتری مربوط می شوند). بعداً ابزارهای جدید تست سرعت وب سایت ظاهر می شوند که نکاتی را در مورد افزایش سرعت وب سایت ارائه می دهند. هر یک از این سرویس‌ها یا افزونه‌ها یک توصیه ثابت دارند: «از CDN استفاده کنید». کاهش تأخیر شبکه معمولاً به عنوان توضیحی برای تأثیر CDN ذکر می شود. متأسفانه، همه حاضر نیستند دقیقاً بفهمند که اثر شتاب CDN چگونه به دست می‌آید و چگونه می‌توان آن را اندازه‌گیری کرد، بنابراین این توصیه بر اساس ایمان گرفته می‌شود و به عنوان یک اصل استفاده می‌شود. در واقع، همه CDN ها یکسان ایجاد نمی شوند.

استفاده از CDN امروز

برای ارزیابی سودمندی استفاده از CDN ها، باید آنها را طبقه بندی کرد. آنچه اکنون در عمل می توان یافت (البته مثال های داخل پرانتز جامع نیستند):

  1. CDN رایگان برای توزیع کتابخانه های JS (MaxCDN، Google. Yandex).
  2. CDN خدمات برای بهینه سازی مشتری (به عنوان مثال، فونت های گوگل برای فونت، کلودیناری، کلودیماژ برای تصاویر).
  3. CDN برای بهینه سازی استاتیک و منابع در CMS (موجود در Bitrix، WordPress و دیگران).
  4. CDN با هدف عمومی (StackPath، CDNVideo، NGENIX، Megafon).
  5. CDN برای شتاب وب سایت (Cloudflare، Imperva، Airi).

تفاوت اصلی بین این انواع این است که چه مقدار از ترافیک از طریق CDN می رود. انواع 1-3 تحویل تنها بخشی از محتوا است: از یک درخواست تا چندین ده (معمولاً تصاویر). انواع 4 و 5 پروکسی کامل ترافیک از طریق CDN هستند.

در عمل، این به معنای تعداد اتصالاتی است که برای بارگذاری سایت استفاده می شود. با HTTP/2، ما از یک اتصال TCP به میزبان برای پردازش هر تعداد درخواست استفاده می کنیم. اگر منابع را به میزبان اصلی (مبداء) و CDN تقسیم کنیم، لازم است درخواست ها را در چندین دامنه توزیع کنیم و چندین اتصال TCP ایجاد کنیم. بدترین حالت این است: DNS (1 RTT) + TCP (1 RTT) + TLS (2-3 RTT) = 6-7 RTT. این فرمول تاخیر در شبکه های تلفن همراه برای فعال سازی کانال رادیویی دستگاه (اگر فعال نبود) و تاخیر در برج سلولی را در نظر نمی گیرد.

در اینجا به نظر می رسد که در آبشار بارگیری سایت (تاخیر برای اتصال به CDN در RTT 150 میلی ثانیه برجسته شده است):

از CDN استفاده نکنید

اگر CDN تمام ترافیک سایت را پوشش دهد (به جز سرویس های شخص ثالث)، می توانیم از یک اتصال TCP استفاده کنیم و تاخیر در اتصال به هاست های اضافی را کاهش دهیم. البته این در مورد اتصالات HTTP/2 صدق می کند.

تفاوت های بیشتر توسط عملکرد یک CDN خاص مشخص می شود - برای نوع اول فقط یک فایل ثابت را میزبانی می کند، برای نوع پنجم چندین نوع محتوای سایت را به منظور بهینه سازی تغییر می دهد.

قابلیت های CDN برای سرعت بخشیدن به وب سایت

بیایید طیف کاملی از قابلیت های CDN را برای سرعت بخشیدن به سایت ها، بدون توجه به عملکرد انواع CDN جداگانه، توصیف کنیم و سپس ببینیم که در هر یک از آنها چه چیزی پیاده سازی شده است.

1. فشرده سازی منابع متنی

ابتدایی ترین و قابل درک ترین ویژگی، اما اغلب ضعیف اجرا می شود. همه CDN ها وجود فشرده سازی را به عنوان ویژگی شتاب خود اعلام می کنند. اما اگر با جزئیات بیشتری نگاه کنید، کاستی ها مشخص می شود:

  • می توان از درجه کم برای فشرده سازی پویا استفاده کرد - 5-6 (به عنوان مثال، برای gzip حداکثر 9 است).
  • فشرده سازی استاتیک (فایل ها در حافظه پنهان) از ویژگی های اضافی استفاده نمی کند (مثلا zopfi یا brotli با درجه 11)
  • هیچ پشتیبانی برای فشرده سازی کارآمد brotli وجود ندارد (در مقایسه با gzip حدود 20٪ صرفه جویی می شود).

اگر از CDN استفاده می کنید، ارزش بررسی این چند نکته را دارد: فایلی را که از CDN آمده است را بردارید، اندازه فشرده آن را ضبط کنید و برای مقایسه آن را به صورت دستی فشرده کنید (مثلاً می توانید از برخی خدمات آنلاین با پشتیبانی brotli استفاده کنید. vsszhat.rf).

2. تنظیم هدرهای ذخیره مشتری

همچنین یک ویژگی ساده افزایش سرعت: اضافه کردن هدر برای ذخیره محتوا توسط مشتری (مرورگر). جدیدترین سرصفحه کنترل حافظه پنهان است، سرصفحه قدیمی منقضی شده است. علاوه بر این، Etag می تواند مورد استفاده قرار گیرد. نکته اصلی این است که حداکثر سن کنترل کش به اندازه کافی بزرگ است (از یک ماه یا بیشتر).

CDN ها می توانند مقدار حداکثر سن را کاهش دهند، و کاربر را مجبور می کند محتوای استاتیک را بیشتر بارگذاری کند. مشخص نیست که این به چه چیزی مرتبط است: تمایل به افزایش ترافیک در شبکه یا افزایش سازگاری با سایت هایی که نمی دانند چگونه حافظه پنهان را بازنشانی کنند. به عنوان مثال، زمان کش پیش‌فرض هدر Cloudflare 1 ساعت است که برای داده‌های ثابت ثابت بسیار کم است.

3. بهینه سازی تصویر

از آنجایی که CDN کارکردهای ذخیره و ارائه تصاویر را بر عهده می گیرد، منطقی است که آنها را در سمت CDN بهینه کرده و به این شکل به کاربران ارائه دهیم. بیایید فوراً رزرو کنیم که این ویژگی فقط برای انواع CDN 2، 3 و 5 در دسترس است.

می‌توانید تصاویر را به روش‌های مختلفی بهینه کنید: با استفاده از فرمت‌های فشرده‌سازی پیشرفته (مانند WebP)، رمزگذارهای کارآمدتر (MozJPEG)، یا به سادگی پاک کردن ابرداده‌های غیرضروری.

به طور کلی، دو نوع از این بهینه سازی وجود دارد: با افت کیفیت و بدون افت کیفیت. CDN ها معمولاً سعی می کنند از بهینه سازی بدون تلفات استفاده کنند تا از شکایات احتمالی مشتری در مورد تغییرات کیفیت تصویر جلوگیری کنند. در چنین شرایطی، سود حداقل خواهد بود. در واقعیت، اغلب سطح کیفیت JPEG بسیار بالاتر از حد لازم است و می‌توانید با خیال راحت با سطح کیفیت پایین‌تر بدون به خطر انداختن تجربه کاربر، دوباره فشرده‌سازی کنید. از سوی دیگر، تعیین سطح کیفیت و تنظیمات به صورت جهانی برای همه برنامه های کاربردی وب ممکن دشوار است، بنابراین CDN ها از تنظیمات محافظه کارانه تری در مقایسه با مواردی که می توانند با در نظر گرفتن زمینه (هدف تصاویر، نوع برنامه وب) اعمال شوند، استفاده می کنند. ، و غیره.)

4. بهینه سازی اتصال TLS

امروزه بیشتر ترافیک از طریق اتصالات TLS انجام می شود، به این معنی که زمان بیشتری را صرف مذاکره با TLS می کنیم. اخیرا فناوری های جدیدی برای سرعت بخشیدن به این فرآیند توسعه یافته است. به عنوان مثال، این رمزنگاری EC، TLS 1.3، حافظه پنهان جلسه و بلیط‌ها، شتاب رمزگذاری سخت‌افزار (AES-NI)، و غیره است. تنظیم صحیح TLS می‌تواند زمان اتصال را به RTT 0-1 کاهش دهد (بدون احتساب DNS و TCP).

با نرم افزارهای مدرن، پیاده سازی چنین شیوه هایی به تنهایی دشوار نیست.

همه CDN ها بهترین شیوه های TLS را اجرا نمی کنند؛ می توانید این را با اندازه گیری زمان اتصال TLS بررسی کنید (مثلاً در Webpagetest). ایده آل برای اتصال جدید - 1RTT، 2RTT - سطح متوسط، 3RTT و بیشتر - بد.

همچنین لازم به ذکر است که حتی هنگام استفاده از TLS در سطح CDN، سرور با برنامه وب ما نیز باید TLS را پردازش کند، اما از سمت CDN، زیرا ترافیک بین سرور و CDN در شبکه عمومی منتقل می شود. در بدترین حالت، دوبرابر تاخیر در اتصال TLS دریافت خواهیم کرد (اولی به میزبان CDN، دومی بین آن و سرور ما).

برای برخی از برنامه ها، ارزش توجه به مسائل امنیتی را دارد: ترافیک معمولاً در گره های CDN رمزگشایی می شود و این یک فرصت بالقوه برای رهگیری ترافیک است. گزینه کار بدون افشای ترافیک معمولا در طرح های تعرفه برتر با هزینه اضافی ارائه می شود.

5. تاخیرهای اتصال را کاهش دهید

مزیت اصلی CDN که همه در مورد آن صحبت می کنند: تاخیر کم (فاصله کمتر) بین میزبان CDN و کاربر. با ایجاد یک معماری شبکه توزیع شده جغرافیایی، که در آن میزبان ها در نقاط تمرکز کاربران (شهرها، نقاط تبادل ترافیک و غیره) قرار دارند، به دست آمد.

در عمل، اولویت ها برای شبکه های مختلف ممکن است در مناطق خاصی باشد. به عنوان مثال، CDN های روسی نقاط حضور بیشتری در روسیه خواهند داشت. آمریکایی ها اول از همه شبکه را در ایالات متحده توسعه خواهند داد. به عنوان مثال، یکی از بزرگترین CDN Cloudflare تنها 2 نقطه در روسیه دارد - مسکو و سنت پترزبورگ. یعنی می‌توانیم حداکثر حدود 10 میلی‌ثانیه تأخیر را در مقایسه با قرارگیری مستقیم در مسکو ذخیره کنیم.

اکثر CDN های غربی اصلاً در روسیه امتیاز ندارند. با اتصال به آنها، فقط می توانید تاخیرها را برای مخاطبان روسی خود افزایش دهید.

6. بهینه سازی محتوا (کوچک سازی، تغییرات ساختاری)

پیچیده ترین و پیشرفته ترین نقطه. تغییر محتوا در حین تحویل می تواند بسیار خطرناک باشد. حتی اگر کوچک سازی را در نظر بگیریم: کاهش کد منبع (به دلیل فضاهای اضافی، ساختارهای بی اهمیت و غیره) می تواند بر عملکرد آن تأثیر بگذارد. اگر در مورد تغییرات جدی تر صحبت کنیم - انتقال کد JS به انتهای HTML، ادغام فایل ها و غیره - خطر اختلال در عملکرد سایت حتی بیشتر می شود.

بنابراین، فقط برخی از CDN های نوع 5 این کار را انجام می دهند. البته، امکان خودکارسازی تمام تغییرات مورد نیاز برای سرعت بخشیدن به کارها وجود نخواهد داشت - تجزیه و تحلیل دستی و بهینه سازی مورد نیاز است. به عنوان مثال، حذف کد استفاده نشده یا تکراری یک کار دستی است.

به عنوان یک قاعده، تمام این بهینه سازی ها توسط تنظیمات کنترل می شوند و خطرناک ترین آنها به طور پیش فرض غیرفعال می شوند.

پشتیبانی از قابلیت های شتاب بر اساس نوع CDN

بنابراین بیایید نگاهی بیندازیم که انواع مختلف CDN ها چه فرصت های بالقوه شتاب را فراهم می کنند.

برای راحتی، طبقه بندی را تکرار می کنیم.

  1. CDN رایگان برای توزیع کتابخانه های JS (MaxCDN، Google. Yandex).
  2. CDN خدمات برای بهینه سازی مشتری (به عنوان مثال، فونت های گوگل برای فونت، کلودیناری، کلودیماژ برای تصاویر).
  3. CDN برای بهینه سازی استاتیک و منابع در CMS (موجود در Bitrix، WordPress و دیگران).
  4. CDN با هدف عمومی (StackPath، CDNVideo، NGENIX، Megafon).
  5. CDN برای شتاب وب سایت (Cloudflare، Imperva، Airi).

حال بیایید ویژگی ها و انواع CDN را با هم مقایسه کنیم.

فرصت
1 تایپ کنید
2 تایپ کنید
3 تایپ کنید
4 تایپ کنید
5 تایپ کنید

فشرده سازی متن
+–
-
+–
+–
+

هدرهای کش
+
+
+
+
+

تصاویر
-
+–
+–
-
+

TLS
-
-
-
+–
+

تاخیر
-
-
-
+
+

مقدار
-
-
-
-
+

در این جدول، "+" برای نشان دادن پشتیبانی کامل، "-" بدون پشتیبانی و "+-" پشتیبانی جزئی استفاده می شود. البته ممکن است در واقعیت انحرافاتی از این جدول وجود داشته باشد (به عنوان مثال، برخی از CDN های همه منظوره ویژگی هایی را برای بهینه سازی تصاویر پیاده سازی می کنند)، اما برای یک ایده کلی مفید است.

نمایش نتایج: از

امیدواریم پس از خواندن این مقاله تصویر واضح تری در مورد توصیه "استفاده از CDN" برای سرعت بخشیدن به سایت های خود داشته باشید.

مانند هر کسب و کاری، نمی توانید وعده های بازاریابی هیچ خدماتی را باور کنید. اثر باید در شرایط واقعی اندازه گیری و آزمایش شود. اگر قبلاً از CDN استفاده می کنید، با استفاده از معیارهای شرح داده شده در مقاله، آن را برای اثربخشی بررسی کنید.

این امکان وجود دارد که استفاده از CDN در حال حاضر باعث کند شدن زمان بارگذاری سایت شما شود.

به عنوان یک توصیه کلی، می توانیم روی موارد زیر تمرکز کنیم: مخاطب خود را مطالعه کنید، محدوده جغرافیایی آن را تعیین کنید. اگر مخاطبان اصلی شما در شعاع 1-2 هزار کیلومتری متمرکز هستند، برای هدف اصلی آن - کاهش تأخیر - نیازی به CDN ندارید. در عوض، می‌توانید سرور خود را نزدیک‌تر به کاربران خود قرار دهید و آن را به درستی پیکربندی کنید و بیشتر بهینه‌سازی‌های توضیح داده شده در مقاله (رایگان و دائمی) را دریافت کنید.

در صورتی که مخاطبان شما واقعاً از نظر جغرافیایی توزیع شده باشند (شعاع بیش از 3000 کیلومتر)، استفاده از یک CDN با کیفیت واقعاً مفید خواهد بود. با این حال، باید از قبل بدانید که CDN شما دقیقاً چه چیزی را می تواند سرعت بخشد (جدول قابلیت ها و توضیحات آنها را ببینید). با این حال، شتاب‌دهی وب‌سایت همچنان یک کار پیچیده است که با اتصال CDN قابل حل نیست. علاوه بر بهینه سازی های فوق، موثرترین ابزار شتاب در پشت CDN باقی می ماند: بهینه سازی بخش سرور، تغییرات پیشرفته در بخش مشتری (حذف کدهای استفاده نشده، بهینه سازی فرآیند رندر، کار با محتوا، فونت ها، سازگاری و غیره). )

منبع: www.habr.com

اضافه کردن نظر