Обычно CDN используют в случае, когда у сайта или приложения аудитория распределена по большой территории. Однако, в какой-то момент времени CDN начнет стоить дорого (ведь вы всегда оплачиваете трафик). В таком случае необязательно строить свой CDN или жертвовать опытом пользователей ради экономии.
Вспомним, что CDN — это просто сеть компьютеров, которые отдают контент посетителям сайта:
Сколько что стоит
Сейчас сервер средней конфигурации, например в Селектеле стоит около $250 в месяц. Обычно такие сервера имеют полосу пропускания в 100Мб и довольно большой предел по месячному трафику (иногда даже без него).
Это значит, что за $250 вы сможете обслужить отдачу приблизительно 5...10 млн фотографий в сутки (около 1 Тб, при среднем размере фотки в 250 Кб).
При этом, если использовать Cloudfront для такой же задачи, обслуживание 30 Тб в месяц обойдется в
Использование частичной раздачи
CDN будет очень невыгоден, если ваша аудитория распределена, но имеет точки концентрации. Например:
- Германия: 50%
- Нью Йорк: 40%
- Остальные локации: 10%
В этом случае будет разумно:
- Поставить сервера, отдающие контент в Германии и Нью Йорке.
- Для запросов из других географий использовать CDN.
Т.е. иметь структуру, в которой часть запросов обслуживает CDN, а часть — наши сервера:
Стоит обязательно учесть, что CDN провайдеры обладают повышенными показателями доступности. Иногда, может быть выгоднее переплатить и остаться с настроенной системой качества. В других случаях можно обеспечить простое и надежное решение самостоятельно используя, например, несколько датацентров в каждой локации.
Пример реализации на основе Amazon Route 53
Для реализации схемы нам понадобится провайдер Geo DNS, например Amazon Route 53. Схема решения будет следующая:
- Необходимо создать новый поддомен на основном домене. У нас это будет testi.onthe.io.
- Для него необходимо создать CNAME запись типа Geolocation на все локации по умолчанию (Default). Она должна указывать на сабдомен вашего CDN провайдера:
- Теперь для локаций, в которых стоят наши сервера, необходимо создать отдельные CNAME записи. В примере запись для Северной Америки:
# Вместо "CDN Provider" должен быть (саб)домен CDN провайдера, увеличить
Теперь домен testi.onthe.io будет отдавать контент следующим образом:
- Если посетитель запрашивает контент с Северной Америки, он будет раздаваться сразу с домена i.onthe.io (наши сервера).
- Если контент запрашивается из другой страны, запрос будет обслужен провайдером CDN.
А это значит, что мы не будем платить CDN провайдеру за трафик, который можем сами обслужить и сделать это эффективнее.
TL;DR
Затраты на CDN можно существенно сократить, если ваша аудитория имеет точки концентрации. Тогда для части аудитории можно будет отдавать контент со своих серверов, а для другой части — с помощью CDN. Для этого потребуется арендовать несколько серверов и использовать Geo DNS.