Всем привет!
В последнее время в своей работе (а это — разработка и поддержка высоконагруженных веб-сайтов) мы стали активно использовать облачные вычисления. Но до сих пор мы не запускали проекта, целиком живущего в облаках.
И вот такая возможность представилась.
Позвольте показать вам сайт, созданный по заказу Goldfinger Applications Ltd. и Luxand, Inc. который мы запустили на прошлой неделе, и немного рассказать о том как мы делали его.
Что это за сайт?
In20Years.com
Вы можете загрузить вашу фотографию на сайт и узнать как возможно вы будете выглядеть через 20 или 30 лет. При включении опции «Drug Addict» можно посмотреть что с вами станет через 20 лет при активном употреблении наркотиков.
Как это работает?
Само приложение фронтэнда было разработано на PHP5, в качестве серверной базы использовался Linux/Nginx/PHP-FPM
Исходя из требований заказчиков, работа с базой данных не требовалась, и не нужна была особенная работа с сессией.
Это позволило создать легко клонируемый «образ» фронт-энда. В зависимости от обстоятельств мы могли собрать от одноядерного до восьмиядерного инстанса.
Хотя «облака» и приносят с собой множество плюсов, существует большое количество подводных камней.
О некоторых из них мы рассказывали на РИТе
Первым вопросом встала балансировка.
Поскольку каждый новый запрос пользователя может прийти на другой инстанс фронт-энда необходимо было атомизировать операции по обработке фотографий.
Мы решили это следующим образом:
Другой проблемой которую надо было решить являлась минимизация работы с жестким диском.
По нашему опыту основным узким местом «облаков» является его производительность — работа со стораджем сложнее всего поддается виртуализации.
Соответственно, мы старались минимизировать работу с диском максимально:
На РИТе мы говорили, что в качестве хостинг провайдера мы используем компанию Softlayer. В последнее время мы стали недовольны надежностью их облачных решений, и постепенно переводим наши проекты на Amazon, который использовали и раньше, но не так активно. Между тем доверия и тем и другим особого нет, поэтому мы пришли к выводу, что для процессинга изображений в API нужно использовать инстансы обоих провайдеров, для того, чтобы в случае проблем у одного из них — быстро переключиться на другого.
Немного о читерстве — сохраненные файлы надо все же наверное где-то и как то хранить. Вообще для этого подошло бы решение S3 от Amazon или аналогичное от Софтлеера, но, поскольку у нас уже был storage-сервер для makemebabies.com мы использовали его. Поэтому да, сохраненные картинки лежат не в облаках).
Спустя пять часов после запуска случился пост на Mashable (это уже четвертый наш проект, освещаемый там!), и аудитория начала увеличиваться экспоненциально. За первые сутки было обработано 300 тысяч изображений, а дальше с каждым днем это число только росло.
Сейчас, хотя рост и продолжается, ничего экстраординарного не происходит.
Как мы уже сказали, это был наш первый опыт создания проекта целиком находящегося в облаках, и, к нашему удивлению, очень успешный.
Можем ли мы после всего этого посоветовать облака как решение для высокопосещаемых проектов? И да и нет.
Спасибо за внимание!
В последнее время в своей работе (а это — разработка и поддержка высоконагруженных веб-сайтов) мы стали активно использовать облачные вычисления. Но до сих пор мы не запускали проекта, целиком живущего в облаках.
И вот такая возможность представилась.
Позвольте показать вам сайт, созданный по заказу Goldfinger Applications Ltd. и Luxand, Inc. который мы запустили на прошлой неделе, и немного рассказать о том как мы делали его.
Что это за сайт?
In20Years.com
Вы можете загрузить вашу фотографию на сайт и узнать как возможно вы будете выглядеть через 20 или 30 лет. При включении опции «Drug Addict» можно посмотреть что с вами станет через 20 лет при активном употреблении наркотиков.
Как это работает?
Фронтэнд
Само приложение фронтэнда было разработано на PHP5, в качестве серверной базы использовался Linux/Nginx/PHP-FPM
Исходя из требований заказчиков, работа с базой данных не требовалась, и не нужна была особенная работа с сессией.
Это позволило создать легко клонируемый «образ» фронт-энда. В зависимости от обстоятельств мы могли собрать от одноядерного до восьмиядерного инстанса.
Хотя «облака» и приносят с собой множество плюсов, существует большое количество подводных камней.
О некоторых из них мы рассказывали на РИТе
Первым вопросом встала балансировка.
Поскольку каждый новый запрос пользователя может прийти на другой инстанс фронт-энда необходимо было атомизировать операции по обработке фотографий.
Мы решили это следующим образом:
- Загрузка файла и передача его в процессинг осуществляется одним запросом. Результатом этой операции является идентификатор запроса, который используется при проверки готовности фотографии.
- Любой инстанс по данному идентификатору готов ответить о состоянии обработки.
- Информация о пути до страницы с итоговой фотографией содержится в самом URL — www.in20years.com/photo?st=3&fid=1005149&fname=aged_wb20100514045631899489.png
st обозначает идентификатор хранилища данных, fid — конкретную папку, а fname — имя файла
Исходя из этих сведений, любой инстанс может подставить в шаблон полный путь до фотографии и отобразить ее.
Другой проблемой которую надо было решить являлась минимизация работы с жестким диском.
По нашему опыту основным узким местом «облаков» является его производительность — работа со стораджем сложнее всего поддается виртуализации.
Соответственно, мы старались минимизировать работу с диском максимально:
- Загрузка файлов
С помощью Accelerated upload support в PHP-FPM и Nginx мы стали принимать пользовательские файлы в tmpfs хранилище, таким образом мы избежали необходимости грузить диск большим числом пользовательских данных (а их много, как мы об этом позже раскажем). - Обработка файлов
Задачей номер два являлась обработка файлов — передача их в процессинг, кроппинг лица, создание фрейма. Здесь мы тоже максимально старались избежать работы с диском.
Обработкой картинок занимается API-сервер, получая от которого данные мы не сохраняли их на диск, а грузили непосредственно в GD. Соответственно там же, в памяти и выполнялась дальнейшая обработка.
Бэкэнд
На РИТе мы говорили, что в качестве хостинг провайдера мы используем компанию Softlayer. В последнее время мы стали недовольны надежностью их облачных решений, и постепенно переводим наши проекты на Amazon, который использовали и раньше, но не так активно. Между тем доверия и тем и другим особого нет, поэтому мы пришли к выводу, что для процессинга изображений в API нужно использовать инстансы обоих провайдеров, для того, чтобы в случае проблем у одного из них — быстро переключиться на другого.
Хранение данных
Немного о читерстве — сохраненные файлы надо все же наверное где-то и как то хранить. Вообще для этого подошло бы решение S3 от Amazon или аналогичное от Софтлеера, но, поскольку у нас уже был storage-сервер для makemebabies.com мы использовали его. Поэтому да, сохраненные картинки лежат не в облаках).
Запуск
Спустя пять часов после запуска случился пост на Mashable (это уже четвертый наш проект, освещаемый там!), и аудитория начала увеличиваться экспоненциально. За первые сутки было обработано 300 тысяч изображений, а дальше с каждым днем это число только росло.
- в первые минуты после публикации на mashable мы исчерпали производительности «бэкэнда» и многократно увеличили его ресурсы в течении всего лишь десятков минут.
- спустя несколько часов мы достигли предела пропускной способности балансировщика нагрузок, и эта проблема решилась простым увеличением канала.
- спустя сутки мы «уткнулись» в производительность фронт-эндов и, опять же, создав новые клоны инстансов легко увеличили производительность всей системы.
Сейчас, хотя рост и продолжается, ничего экстраординарного не происходит.
Как мы уже сказали, это был наш первый опыт создания проекта целиком находящегося в облаках, и, к нашему удивлению, очень успешный.
Выводы
Можем ли мы после всего этого посоветовать облака как решение для высокопосещаемых проектов? И да и нет.
- Нет — нужно понимать что финансовой экономии достичь очень сложно (мы не хотим говорить слово «нельзя»).
Популярным мнением является идея о том, что для любого владельца сайта, посещаемость которого плавает в дневное/ночное время достаточно будет иметь «слабую» конфигурацию ночью, увеличивая ее в часы пик.
Нужно понимать, что время создания новых конфигураций в облаках составляет от 10 до 40 минут — вам надо решить, готовы ли терять аудиторию в этот период? Если нет — вам придется держать инстанс сопоставимый по мощности с настоящим выделенным сервером — а это, чаще всего дороже «железа». - Да — Можно, и относительно легко удается обеспечить возможность масштабирования роста проекта. К вам пришло в 10 раз больше посетителей чем приходит в обычный день? Вы легко масштабируете ресурсы. Если надежность сервиса — ваш главный приоритет — облака — ваш выбор.
- При этом — Как мы говорили на РИТе — облака не надежны, не забывайте о том, что на деле сократить работу по системному администрированию не удастся. Вам нужно будет либо подготовить свой персонал к поддержке своих облачных решений, либо обратиться к специалистам, и то и другое в любом случае стоит денег.
Спасибо за внимание!