Pull to refresh
233.78
ITSumma
Эксперты в производительности

In20Years.com — взлет в облака

Reading time4 min
Views13K
Всем привет!

В последнее время в своей работе (а это — разработка и поддержка высоконагруженных веб-сайтов) мы стали активно использовать облачные вычисления. Но до сих пор мы не запускали проекта, целиком живущего в облаках.

И вот такая возможность представилась.

Позвольте показать вам сайт, созданный по заказу Goldfinger Applications Ltd. и Luxand, Inc. который мы запустили на прошлой неделе, и немного рассказать о том как мы делали его.

Что это за сайт?


In20Years.com
Вы можете загрузить вашу фотографию на сайт и узнать как возможно вы будете выглядеть через 20 или 30 лет. При включении опции «Drug Addict» можно посмотреть что с вами станет через 20 лет при активном употреблении наркотиков.

Как это работает?

Фронтэнд


Само приложение фронтэнда было разработано на PHP5, в качестве серверной базы использовался Linux/Nginx/PHP-FPM
Исходя из требований заказчиков, работа с базой данных не требовалась, и не нужна была особенная работа с сессией.
Это позволило создать легко клонируемый «образ» фронт-энда. В зависимости от обстоятельств мы могли собрать от одноядерного до восьмиядерного инстанса.

Хотя «облака» и приносят с собой множество плюсов, существует большое количество подводных камней.
О некоторых из них мы рассказывали на РИТе

Первым вопросом встала балансировка.

Поскольку каждый новый запрос пользователя может прийти на другой инстанс фронт-энда необходимо было атомизировать операции по обработке фотографий.

Мы решили это следующим образом:
  1. Загрузка файла и передача его в процессинг осуществляется одним запросом. Результатом этой операции является идентификатор запроса, который используется при проверки готовности фотографии.
  2. Любой инстанс по данному идентификатору готов ответить о состоянии обработки.
  3. Информация о пути до страницы с итоговой фотографией содержится в самом URL — www.in20years.com/photo?st=3&fid=1005149&fname=aged_wb20100514045631899489.png
    st обозначает идентификатор хранилища данных, fid — конкретную папку, а fname — имя файла
    Исходя из этих сведений, любой инстанс может подставить в шаблон полный путь до фотографии и отобразить ее.


Другой проблемой которую надо было решить являлась минимизация работы с жестким диском.

По нашему опыту основным узким местом «облаков» является его производительность — работа со стораджем сложнее всего поддается виртуализации.
Соответственно, мы старались минимизировать работу с диском максимально:
  1. Загрузка файлов
    С помощью Accelerated upload support в PHP-FPM и Nginx мы стали принимать пользовательские файлы в tmpfs хранилище, таким образом мы избежали необходимости грузить диск большим числом пользовательских данных (а их много, как мы об этом позже раскажем).
  2. Обработка файлов
    Задачей номер два являлась обработка файлов — передача их в процессинг, кроппинг лица, создание фрейма. Здесь мы тоже максимально старались избежать работы с диском.
    Обработкой картинок занимается API-сервер, получая от которого данные мы не сохраняли их на диск, а грузили непосредственно в GD. Соответственно там же, в памяти и выполнялась дальнейшая обработка.

Бэкэнд



На РИТе мы говорили, что в качестве хостинг провайдера мы используем компанию Softlayer. В последнее время мы стали недовольны надежностью их облачных решений, и постепенно переводим наши проекты на Amazon, который использовали и раньше, но не так активно. Между тем доверия и тем и другим особого нет, поэтому мы пришли к выводу, что для процессинга изображений в API нужно использовать инстансы обоих провайдеров, для того, чтобы в случае проблем у одного из них — быстро переключиться на другого.

Хранение данных



Немного о читерстве — сохраненные файлы надо все же наверное где-то и как то хранить. Вообще для этого подошло бы решение S3 от Amazon или аналогичное от Софтлеера, но, поскольку у нас уже был storage-сервер для makemebabies.com мы использовали его. Поэтому да, сохраненные картинки лежат не в облаках).

Запуск


Спустя пять часов после запуска случился пост на Mashable (это уже четвертый наш проект, освещаемый там!), и аудитория начала увеличиваться экспоненциально. За первые сутки было обработано 300 тысяч изображений, а дальше с каждым днем это число только росло.

  1. в первые минуты после публикации на mashable мы исчерпали производительности «бэкэнда» и многократно увеличили его ресурсы в течении всего лишь десятков минут.
  2. спустя несколько часов мы достигли предела пропускной способности балансировщика нагрузок, и эта проблема решилась простым увеличением канала.
  3. спустя сутки мы «уткнулись» в производительность фронт-эндов и, опять же, создав новые клоны инстансов легко увеличили производительность всей системы.


Сейчас, хотя рост и продолжается, ничего экстраординарного не происходит.

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

Выводы


Можем ли мы после всего этого посоветовать облака как решение для высокопосещаемых проектов? И да и нет.

  • Нет — нужно понимать что финансовой экономии достичь очень сложно (мы не хотим говорить слово «нельзя»).
    Популярным мнением является идея о том, что для любого владельца сайта, посещаемость которого плавает в дневное/ночное время достаточно будет иметь «слабую» конфигурацию ночью, увеличивая ее в часы пик.
    Нужно понимать, что время создания новых конфигураций в облаках составляет от 10 до 40 минут — вам надо решить, готовы ли терять аудиторию в этот период? Если нет — вам придется держать инстанс сопоставимый по мощности с настоящим выделенным сервером — а это, чаще всего дороже «железа».
  • Да — Можно, и относительно легко удается обеспечить возможность масштабирования роста проекта. К вам пришло в 10 раз больше посетителей чем приходит в обычный день? Вы легко масштабируете ресурсы. Если надежность сервиса — ваш главный приоритет — облака — ваш выбор.
  • При этом — Как мы говорили на РИТе — облака не надежны, не забывайте о том, что на деле сократить работу по системному администрированию не удастся. Вам нужно будет либо подготовить свой персонал к поддержке своих облачных решений, либо обратиться к специалистам, и то и другое в любом случае стоит денег.


Спасибо за внимание!
Tags:
Hubs:
Total votes 99: ↑55 and ↓44+11
Comments73

Articles

Information

Website
www.itsumma.ru
Registered
Founded
Employees
101–200 employees
Location
Россия
Representative
ITSumma