Недавно мы запустили новый сервис — облако для сайта, айри.рф. Облако для сайта — это когда весь сайт легкий, прозрачный, воздушный и быстрый. Никакие картинки, скрипты, сложная серверная логика, базы данных и никакой DDoS не могут его опустить. Это когда сайт летает. Мы реализовали свою мечту — теперь любой сайт, независимо от платформы, внутренних особенностей или клиентской логики можно положить в облако. И он станет работать быстрее и надежнее на всех устройствах и для всех пользователей. И доступно это как для самых маленьких сайтов, так и для самых крупных.
Да, это похоже на западный CloudFlare. И первоначальная модель у нас такая же. Но только на просторах России, согласно ее географии. И развиваться мы планируем по-другому.
P.S. Сейчас Айри в стадии беты, мы активно набираем первых пользователей, хотя сервис уже перешел в коммерческую эксплуатацию, и надежность является приоритетом.
Архитектура
Первоначально мы планировали сделать несколько компонентов сервиса, максимально разделив уровни ответственности. Но позже, в силу разного рода ограничений на целостность данных и отказоустойчивость системы, мы дошли до следующей архитектуры:
Весь сервис разбивается на географически-независимые узлы, пользователи направляются на тот или иной узел в зависимости от IP адреса и DNS записи. DNS-записи гео-балансируются (при отказе какого-либо узла мы в течение короткого периода времени можем перенаправить локальных пользователей на другой узел).
- Слой DNS. Каждый узел представляет собой пару серверов, настроенных при помощи LVS для максимальной отказоустойчивости. Дополнительно зоны на разных DNS серверах отвечают по-разному для разных регионов, создавая гео-балансировку.
- Слой балансировки (LVS). Основные машины, которые принимают на себя всю нагрузку. Они же предназначены для подключения к защите от DDoS и перераспределяют запросы на различные FEO-CDN сервера, в зависимости от домена сайта.
- FEO-CDN слой (от Front-End Optimization и Content Delivery Network). Каждый узел представляет собой кэширующий и оптимизирующий кластер прокси-серверов. Над архитектурой этого слоя мы думали долго, и продолжаем думать, как максимально оптимизировать и работу сайта, и нагрузку на сервера. На текущий момент у нас есть 4 уровня кэширования и проксирования:
- Front-end уровень, только сжимает (через gzip) контент и кэширует финальные HTML-страницы сайты, если необходимо. Если запросов нет в кэше, то проксирует их дальше. Собирает статистику по отданному контенту.
- Оптимизирующий уровень. Здесь развернут Page Speed с некоторыми нашими улучшениями в части отложенной загрузки и динамического кэширования страниц. Наиболее сложный уровень с точки зрения применяемых алгоритмов. Все запросы не из кэша отправляются на уровень ниже.
- Кэширующий уровень. Кэширует всю статику и, по возможности, динамику. Отдает все из кэша, если может. Если нет — запрашивает исходный сайт. Также логирует низкоуровневые запросы и обеспечивает распаковку (unzip) данных от исходного сайта.
Балансировка и отказоустойчивость
В ходе реализации мы рассматривали несколько сценариев отказа сервиса (или сайта). Приведу некоторые основные:
- Отказывает DNS-слой какого-нибудь узла — подключается второй из LVS-пары. Если отказывают оба сервера, то на DNS-запросы (ровно с тем же содержанием) начинают отвечать DNS-слои других узлов.
- Отказывают оба сервера LVS-пары слоя балансировки какого-нибудь узла. В этом случае за счет DNS-балансировки запросы автоматически направляются на другие узлы.
- Отказывает (перегружен) FEO-CDN слой — автоматически подключаем дополнительные запасные сервера на этом слое. Если доступных серверов нет, то действуем по предыдущему сценарию — переводим сайты на другой узел.
- Перегружен канал (DDoS) на один или несколько узлов — автоматически подключаем QRator для «проблемных» слоев балансировки.
- Исходный сайт отказывает (становится недоступен). Если сайт кэшируется и период недоступности меньше времени жизни кэша, то пользователи ничего не замечают. Если период недоступности меньше суток, то продолжаем выдавать страницы сайта из кэша. Для динамических сайтов — индивидуальная политика (страницы-заглушки, кэшированный контент или перенаправление).
Основные проблемные места и риски устранены архитектурой, поэтому мы можем говорить об отказоустойчивости 99,9%.
Как работает ускорение
Самое сложное и интересное — как работает ускорение. Мы проанализировали имеющиеся фильтры Page Speed, собрали из них несколько вариантов, подходящих для большинства сайтов. И называли уровни ускорения соответствующим образом: Безопасный (когда никакого вреда сайту гарантированно не будет причинено), Минимальный (когда есть минимальные риски навредить сайту), Оптимальный (подходит для большинства сайтов, обеспечивает значительное ускорение, но потенциально опасен) и Максимальный (самый рисковый и самый эффективный вариант). Кроме этого мы предлагает и ручную настройку всех параметров, при необходимости (в полном соответствии с уже имеющейся политикой настройки нашего продукта — WEBO Site SpeedUp).
Подчеркну, что по умолчанию все статические объекты сайта надолго кэшируются, а все текстовые — надежно архивируются. Кроме этого доступно объединение файлов, включение небольших объектов в содержание страниц, логика отложенной загрузки и Local Storage, равно как и использование множественных доменов и data:URI для изображений. В общем, полный фарш для тех, кто хочет настроить все. И гарантированный уровень скорости и надежности сайта для всех остальных.
В совокупности с гео-балансировкой запросов (посетители сайта получают объекты сайта с наиболее близкого к ним сервера) мы решаем все проблемы со скоростью сайта «в один клик».
Тарифы
Мы подошли максимально дружелюбно к пользователям — и предлагаем тарифы от бесплатного (включено 50 Гб исходящего трафика в месяц) до максимального (от 50 тысяч рублей). Средний сайт может подключиться за 1000-2000 рублей в месяц (это включает 100-250 Гб трафика в месяц, хватает до 100 тысяч пользователей в месяц).
Подключение
Есть два основных вида подключения: через смену DNS серверов и через CNAME синоним www. В первом случае мы подключаем домены, которые доступны только без www (например, айри.рф) — нужно делегировать домен на наши сервера, чтобы мы могли полностью управлять гео-балансировкой.
Второй вид подключения подходит для сайтов, которые доступны только через www или и так, и так. В последнем случае необходимо сделать перенаправление с сайта без www на сайт с www и создать DNS запись для сайта
www IN CNAME cloud.airee.ru.
После этого сайт начнет обслуживаться через облако.
Конечно, все эти действия нужно выполнять после отправки заявки. Мы пока не обслуживаем все домены Рунета :)
В самое ближайшее время появится и личный кабинет для управления облаком.
Буду рад вопросам и комментариям. Наша цель — сделать Айри стандартом де-факто при размещении сайтов в Рунете.
Автор: sunnybear