Запуск TechDays.ru в Облака

15 февраля произошло замечательное событие – наш сайт TechDays.ru переехал на платформу Windows Azure.


Вместе с этим портал так же приобрел новые функциональные возможности, которые должны понравиться как посетителям портала, так и авторам докладов:

  1. Интерфейс портала был полностью переработан. Новая версия выполнена в Metro стиле. Портал стал современнее, быстрее, динамичнее и удобней в использовании. Хочется отметить, что работы по улучшению интерфейса продолжаются.
  2. Добавлен сервис кодирования видео. Теперь TechDays стал полноценным видео хостингом. Раньше видео приходилось кодировать авторам докладов в несколько форматов, теперь это происходит автоматически.
  3. Благодаря сервису кодирования всё видео теперь доступно в формате h264 и проигрывается с помощью HTML5 плеера. Теперь доклады с TechDays можно смотреть на мобильных устройствах, например, на Windows Phone 7, на iPhone и iPad.

Мне удалось пообщаться с Сергеем Пугачевым, который занимался переносом портала в Windows Azure. Сергей является MVP по Silverlight, а так же основателем сообщества Silverlighter.ru. Далее предлагаю вашему вниманию наше интервью.


Сергей, расскажи, пожалуйста, немного о портале TechDays.ru?

TechDays.ru – это портал, где вы можете найти записи докладов с технологических конференций, проводимых компанией Microsoft в России, например, DevCon, TechEd Russia, Платформа и т.д., а также обучающее видео по технологиям и продуктам как компании Microsoft, так и других вендоров. Все доклады можно посмотреть и скачать абсолютно бесплатно и без регистрации. 

Большинство докладов на TechDays создано независимыми разработчиками и системными администраторами, что особенно важно, так как такие доклады основаны на практическом опыте их авторов. В месяц TechDays.ru посещает более 60 000 человек, а всего зарегистрировано более 185 000 пользователей. За год пользователи просматривают и скачивают доклады, как непосредственно с сайта, так и по ссылкам на других сайтах, более 5 000 000 (пяти миллионов) раз.

Когда было принято решение о переносе сайта на Windows Azure? Как вы планировали процесс миграции?
В облако мы мигрировали постепенно. В начале 2011 года было принято решение перенести всё видео в Azure, что мы осуществили в достаточно короткий срок, буквально за неделю. Причиной переноса послужило то, что Azure предоставляет очень удобное хранилище данных (Blob storage). Это хранилище обладает такими преимуществами, как бесконечный объём (при демократичных ценах за гигабайт данных), высокая доступность, а также прекрасная масштабируемость. До перевода видео в Azure мы постоянно упирались то в ограничения канала, то в ограничения дисковой системы, то в ограничения серверов. Сейчас канал не проблема. Тысячи пользователей могут качать видео параллельно, без замедления скорости отдачи. 

После этого, осенью 2011 года мы решили создать новую версию движка сайта с использованием технологии ASP.NET MVC/Razor (старая версия использовала ASP.NET Web Forms), а также переработать структуру и интерфейс сайта. Было логично, что новая версия будет полностью работать в Window Azure. 15 февраля 2012 года мы запустили данную версию. 

Перенос портала в Azure решил целый ряд проблем. В первую очередь мы смогли адаптироваться под возрастающие нагрузки. Нам очень нравится то, что в Azure нет необходимости заниматься ручной настройкой и администрированием железа и операционных систем, настройкой NLB (Network Load Balancer) кластеров и прочими вещами, отнимавших достаточно много времени раньше. Мы просто указываем то количество виртуальных машин, которое нам нужно в данный момент. И всё работает. 

Также мы используем функциональность тестовых сред. В Azure есть разделение на Staging и Production. Мы можем выкатить новую версию на Staging, оттестировать её, и сразу перевести в Production. При этом всё в любой момент можно вернуть обратно. 

Расскажи, пожалуйста, подробнее об архитектуре портала и об используемых сервисах и службах Windows Azure?

Мы используем большинство сервисов, предоставляемых Azure. У нас есть web-frontend (Web роль) и backend (Worker роль). Backend нужен для кодирования видео и других утилитарных задач. Общение между частями приложения происходит асинхронно с помощью очередей. Кроме того, роли общаются между собой напрямую с помощью WCF сервисов. Это нужно для управления процессом кодирования конкретных файлов. 

В данный момент web-frontend, как и backend состоят из 2 medium виртуальных машин. При перекодировании видео мы использовали на backend до 32 medium виртуальных машин параллельно, что позволило перекодировать всё видео буквально за пару дней. Изменение количества используемых виртуальных машин на данный момент реализовано вручную, но мы работаем над автоматизацией данного процесса, чтобы ресурсы выделялись в зависимости от количества видео файлов, ожидающих кодирования. 

Ещё одним сервисом, с которым мы работаем, является Window Azure Cache. Это распределённый и очень быстрый кэш, использовать который в ASP.NET сайтах на удивление просто. В том числе благодаря ему мы смогли увеличить производительность портала. Ещё одним фактором увеличения скорости работы явилось использование CDN. Благодаря использованию CDN мы можем быстро отдавать файлы пользователям в любой точке планеты. Во многих случаях увеличение скорости при использовании CDN достигает более чем двух раз.

В качестве хранилища данных используется SQL Azure. Имя опыт работы с SQL Server разобраться в SQL Azure не составило труда, во многом, поэтому SQL Azure применяется так широко. Кроме того, схему БД не пришлось даже модифицировать для работы с SQL Azure. Хотя вся разработка велась на SQL Server 2008 R2. 

Мы постепенно увеличиваем и долю ещё одного сервиса, предоставляемого Azure для хранения данных, а именно сервиса таблиц (Tables Storage). Таблицы не являются реляционным хранилищем, но с ними удобно работать и они могут хранить колоссальные объёмы данных. Кроме того, хранить данные в таблицах намного дешевле, чем в SQL Azure. Пока таблицы у нас используются для хранения логов и служебной информации. 

Сергей, получается, что с точки зрения затрат переход оказался экономически выгодным. А что ты можешь сказать по поводу DDos-атак на techdays.ru, ведь в Windows Azure оплата идет по факту использования и фактической нагрузки? 
Да, переход на Azure оказался рентабельным. Не стоит ожидать, что использование Azure будет дешевле самого простого виртуального хостинга, но в нашем случае затраты на Azure оказались не больше затрат на построение собственной инфраструктуры. При этом многие компоненты нашей собственной инфраструктуры не были отказоустойчивыми. 

Про DDoS можно сказать следующее. С одной стороны сама платформа Windows Azure предоставляет NLB и защиту от DDoS на сетевом уровне, но платить всё равно придётся за то количество ресурсов, которое позволит выдержать DDoS. На TechDays регулярно совершаются атаки, и один раз, когда мы не работали в Azure, DDoS атака вывела портал из строя примерно на сутки. Проблема была в сетевой инфраструктуре. Сетевая инфраструктура в Azure таких проблем не имеет и схожую нагрузку выдерживает. Но в любом случае, количество виртуальных машин должно быть таким, чтобы выдержать DDoS.

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

И, конечно, чем меньше ошибок в коде и упущений, тем более стойкой является ваша система к угрозам. Потребуется очень много ресурсов (которые можно и не найти), чтобы с помощью DDos положить хорошо спроектированный и «закодированный» сайт.

С какими основными трудностями вы столкнулись в процессе миграции?
Основной трудностью была сложность отладки кода непосредственно в Azure. Бывали ситуации, когда код работал на эмуляторе, но не работал в Azure. С выходом новых версий SDK эти трудности серьезно нивелировались. Я работаю с Azure с 2010 года, и прогресс в развитии SDK просто поражает. Если раньше мне не хватало многих вещей, то теперь то, что мне было нужно уже реализовано. И это не может не радовать. Естественно, реализованы не все мои пожелания. Но скорость развития SDK меня приятно удивила. 

Другой трудностью была заливка данных в SQL Azure. Штатных средств для миграции баз данных больших объёмов пока нет. Поэтому мы воспользовались продуктом SQL Azure Migration Wizard, c http://codeplex.com. Этот продукт справился со своими задачами. 

Хочется ещё отметить, что более чем за год моей работы с Azure с технической поддержкой пришлось контактировать dсего один раз и то по организационно-административным вопросам.

Переход на Windows Azure можно назвать успешным?

Да, переход можно назвать успешным. Мы серьёзно увеличили скорость работы портала и теперь не боимся наплыва посетителей. Также повысился uptime. Теперь мы можем не думать о канале, жестких дисках, физических серверах и инфраструктуре в целом, благодаря чему у нас появилось больше времени на создание полезных для пользователей фич.

Сергей, спасибо большое за твои усилия по переработке techdays.ru и интервью!