CDN на практике: тесты, цифры, результаты

По существу и в цифрах показываем, как работает CDN на реальном примере. Мы создали экспериментальный блог — katexp.xyz, замерили показатели сервера в htop и Grafana под нагрузкой и без неё, замерили доступность сайта из различных точек мира через онлайн-сервис ping-admin.com и провели нагрузочное тестирование с помощью Jmeter.

В итоге получили наглядную аналитику, из которой видно — насколько CDN ускоряет работу сайта, находящегося под нагрузкой и дает потенциал к его развитию в будущем. Если вам интересно узнать об общих принципах работы CDN — ознакомьтесь со статьёй из нашего блога: «Что такое CDN простыми словами».

Вводные и матчасть

Вводные и матчасть

У нас есть блог, собранный на связке Nginx + WordPress + MariaDB, размещенный на виртуальном сервере с 4 ядерным Intel Xeon Gold 3GHz, 4Gb RAM и 40 GB SSD в ЦОде Xelent. Обратите внимание, CMS написанные на PHP (WordPress, Joomla, Drupal) под нагрузкой становятся требовательны к производительности процессора. Поэтому важно, чтобы была возможность расширить ресурсы виртуального сервера в будущем.

Виртуальные серверы от 1cloud построены на Enterprise-виртуализации, что дает возможность гибкого управления ресурсами, безопасностью, сетями. Также есть возможность управлять инфраструктурой по API и создавать свои сценарии автоматизации.

Симулируем с помощью Jmeter ситуацию, при которой количество посетителей блога увеличилось с 1-5 до 30+ в 1с. При таких нагрузках наш сервер начал захлебываться: время загрузки сайта увеличилось с 0,93 c. до 8+ с., количество сброшенных сетевых соединений поднялось с 0% до 35-40%, а нагрузка на процессор превысила 75%.

Мы предполагаем, что в будущем ситуация только ухудшится, ведь количество посетителей будет только расти, дополнительные ресурсы мы приобретать не хотим, специалистов, умеющих оптимизировать PHP-FPM и NGINX у нас нет, а проблему нужно решать сейчас.

Выход: подключить CDN и решить проблему пиковых нагрузок, увеличится запас по производительности в будущем и восстановится доступность сайта из разных точек мира.

Начнем с показателей работы и доступности сайта без нагрузки и без CDN.

Показатели сервера без нагрузки и без CDN

В состоянии покоя сервер использует лишь малую часть своих ресурсов: CPU — 0,3%; RAM — 26%; NET — 0,05%; Disk I/O — 0,3%. Как видно ресурсов хватает с запасом.

 
 
 

Проверка доступности сайта из различных точек мира также показывает хорошие результаты:

Точка мониторинга Общее время, сек. DNS, сек. Соединение, сек. Ожидание ответа, сек. Скорость загрузки, МБ/с
Россия, Москва, восток 1 1,59 1,51 0,01 0,07 18,66
Россия, Владивосток 2,17 1,87 0,12 0,18 9,38
Россия, Казань 0,37 0,25 0,02 0,09 34,94
Россия, Санкт-Петербург, восток 0,37 0,25 0,02 0,09 22,62
Белоруссия, Минск 3,63 3,51 0,02 0,09 1,53
Германия, Мюнхен 0,21 0,06 0,05 0,10 9
Грузия, Тбилиси 0,53 0,25 0,11 0,17 6,33
Казахстан, Алатау 0,71 0,51 0,07 0,13 10
Латвия, Рига 0,26 0,12 0,02 0,11 15,84
Литва, Вильнюс 0,35 0,25 0,02 0,08 20,93
Молдавия, Кишинёв 0,44 0,26 0,06 0,12 18,28
США, Аризона, Феникс 0,45 0,06 0,17 0,23 17,99
Турция, Измир 1,75 1,51 0,08 0,16 21,65
Франция, Рубе 0,20 0,06 0,04 0,10 42,93
Средний показатель 0,93 0,74 0,05 0,12 17,86

Среднее время загрузки сайта: 0,93 с., а скорость загрузки: почти 18 Mb/s. Всё работает отлично даже без оптимизации NGINX, WordPress и PHP. Однако картина сильно меняется, когда на сайт приходит большое количество пользователей одновременно.

Показатели сервера без CDN и под нагрузкой

Создаём тестовую нагрузку на сайт с помощью Jmeter — 30 посетителей в 1 с. При такой нагрузке наш сервер чувствует себя уже очень некомфортно: CPU — 75%; RAM — 26%; NET — 5%; Disk I/O — 10%.

 
 
 

Сайт стал почти недоступен из любой точки мира:

Точка мониторинга Общее время, сек. DNS, сек. Соединение, сек. Ожидание ответа, сек. Скорость загрузки, МБ/с
Россия, Москва, восток 1 8,38 0,14 0,10 8,14 18,66
Россия, Владивосток 8,34 0,26 0,04 8,04 8,38
Россия, Казань 7,92 0,25 0,02 7,64 34,94
Россия, Санкт-Петербург, восток 8,89 0,40 0,04 8,45 20,62
Белоруссия, Минск 8,58 0,04 0,09 8,45 1,53
Германия, Мюнхен 8,62 0,20 0,04 8,38 7,00
Грузия, Тбилиси 9,12 0,07 0,10 8,95 4,33
Казахстан, Алатау 8,77 0,20 0,12 8,45 8,00
Латвия, Рига 7,91 0,25 0,02 7,63 15,84
Литва, Вильнюс 7,94 0,25 0,02 7,67 20,93
Молдавия, Кишинёв 8,55 0,15 0,02 8,38 18,28
США, Аризона, Феникс 7,75 0,06 0,05 7,65 15,99
Турция, Измир 7,95 0,25 0,07 7,63 20,65
Франция, Рубе 9,31 0,30 0,04 8,97 41,93
Средний показатель 8,43 0,20 0,06 8,17 16,93

Среднее время загрузки сайта: 8+ с., скорость загрузки: 16 Mb/s. К тому же появились сбросы сетевых соединений из-за медленных php-скриптов. Потолок производительности нашего блога — 25-30 пос./1c. Дальше работать с сайтом просто не возможно.

Давайте подключим CDN и посмотрим, что изменилось?

Показатели сервера под нагрузкой и c CDN

После подключения CDN, которое заняло буквально пару часов с учётом обновления DNS-записей и прогрева сети, показатели сервера вернулись в норму: CPU — 0,5%, RAM — 26%; NET — 4%; Disk I/O — 9%.

 
 
 

Интересно, что показатели доступности сайта под нагрузкой с подключенным CDN стали лучше, чем были, когда сайт находился в состоянии покоя:

Точка мониторинга Общее время, сек. DNS, сек. Соединение, сек. Ожидание ответа, сек. Скорость загрузки, МБ/с
Россия, Москва, восток 1 0,24 0,14 0,10 0,00 20,66
Россия, Владивосток 0,32 0,26 0,04 0,02 9,38
Россия, Казань 0,28 0,25 0,02 0,01 32,94
Россия, Санкт-Петербург, восток 0,45 0,40 0,04 0,01 22,62
Белоруссия, Минск 0,16 0,04 0,09 0,03 1,53
Германия, Мюнхен 0,25 0,20 0,04 0,01 8,00
Грузия, Тбилиси 0,19 0,07 0,10 0,02 4,33
Казахстан, Алатау 0,19 0,03 0,12 0,04 10,00
Латвия, Рига 0,27 0,25 0,02 0,00 14,84
Литва, Вильнюс 0,28 0,25 0,02 0,01 19,93
Молдавия, Кишинёв 0,19 0,15 0,02 0,02 18,28
США, Аризона, Феникс 0,14 0,06 0,05 0,03 15,99
Турция, Измир 0,33 0,25 0,07 0,01 21,65
Франция, Рубе 0,13 0,02 0,09 0,02 42,93
Средний показатель 0,24 0,17 0,06 0,02 17,86

Cкорости ответа DNS-серверов стала значительно ниже — 0,17 c. против 0,75 с., среднее время загрузки сайта сократилось с 0,93 до 0,24 с., скорость загрузки вернулась в норму — 17 Mb/s. Сбросы соединений также пропали. Всю нагрузку на себя забрал CDN.

Нагрузка теперь приходит не на наш виртуальный сервер в Xelent — 185.158.153.25, а на CDN-сервер сети G-core — 92.223.99.99. Конечно, нам стало интересно, а насколько его хватит? Без лишнего фанатизма мы довели уровень запросов до 100 п./1с. — CDN-сервер переварил такую нагрузку без проблем.

Что в итоге?

Что в итоге?

CDN полностью разгрузил сервер от текущей пиковой нагрузки в 30 пос./1с., на 30% ускорил загрузку сайта из многих точек мира, ускорил ответ DNS-серверов на 75% и дал запас по мощности в будущем. Также CDN помог нам не тратить время и ресурсы на оптимизацию ПО.

CDN мы подключили за 1 день. После подключения ушла пара часов на ожидание обновления DNS-серверов Namecheap. Еще 30 минут мы потратили на прогрев сети с помощью ping-admin.com. В итоге мы быстро решили проблему пиковой нагрузки, получили хороший запас мощности на будущие и всё это без каких-либо серьезных вложений.

Обратите внимание, оперативно услугу CDN можно подключить только в будние дни. Также стоит помнить, что на обновление публичных DNS-серверов может уйти до 24 ч.

Подключается CDN от 1cloud очень легко. Достаточно оставить заявку на подключение через Панель. Услуга подключается в 5 простых шагов:

  1. Выбрать уровень защиты и ускорения работы сайта с помощью сервисов CDN и DNS;
  2. Ввести сайт, который вы хотите ускорить и защитить;
  3. Добавьте нужные DNS записи к своему домену;
  4. Заменить NS-записи вашего регистратора на G-core;
  5. Настройте опции CDN-ресурса, чтобы повысить безопасность, ускорить работу и максимально эффективно использовать свой сайт.

При настройке CDN можно установить сжатие gzip, разрешать WebSocket-соединения с источником, настроить редиректы с HTTP на HTTPS, подключить SSL, настроить WAF и опции защиты от DDoS. Если у вас остались вопросы — вы можете задать их нашим специалистам через форму обращения на сайте. Подключить услугу можно по кнопке ниже.