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