Оптимизация затрат на CDN с помощью Amazon Route 53

Обычно CDN используют в случае, когда у сайта или приложения аудитория распределена по большой территории. Однако, в какой-то момент времени CDN начнет стоить дорого (ведь вы всегда оплачиваете трафик). В таком случае необязательно строить свой CDN или жертвовать опытом пользователей ради экономии.

Вспомним, что CDN — это просто сеть компьютеров, которые отдают контент посетителям сайта:

Сколько что стоит

Сейчас сервер средней конфигурации, например в Селектеле стоит около $250 в месяц. Обычно такие сервера имеют полосу пропускания в 100Мб и довольно большой предел по месячному трафику (иногда даже без него).

Это значит, что за $250 вы сможете обслужить отдачу приблизительно 5...10 млн фотографий в сутки (около 1 Тб, при среднем размере фотки в 250 Кб).

При этом, если использовать Cloudfront для такой же задачи, обслуживание 30 Тб в месяц обойдется в 10 раз дороже.

Использование частичной раздачи

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.


Подпишитесь на Хайлоад с помощью Google аккаунта
или закройте эту хрень