Хостинг Amazon EC2

Уже лет пять размещаю свои проекты на арендованных выделенных серверах. Свой отдельный сервер — это круто. Сайты всегда имеют гарантированные ресурсы, достаточно памяти, можно устанавливать любое ПО, на свой вкус и делать различные настройки. Плюс, за это время я научился администрировать Linux сервера.

Правильно сконфигурированный сервер на правильном железе может работать без сбоев несколько лет. ПО в серверных дистрибутивах Linux достаточно стабильно (я использовал раньше Debian, а сейчас Ubuntu Server). ECC оперативная память уменьшает в разы сбои в памяти, а Raid 1 или Raid 10 — позволяют пережить крах одного из серверных дисков.

Но часто серьёзные падения приходят не со стороны оборудования, а со стороны человеческого фактора. За лет десять помню около пяти серьёзных сбоев связанных с полной или частичной потерей данных. Например один раз сгорел целый датацентр похоронив недельную работу над сервисом одного из клиентов, а другой раз у провайдера серверы арестовало ФБР, захватив на всякий случай, вместе с нужными им серверами ещё несколько соседних стоек.

Кроме того аренда отдельного выделенного сервера имеет несколько минусов:

1. Цена за сервер не снижается со временем. Небольшим датацентрам или ресселерам (тем кто перепродаёт серверы) просто невыгодно это делать. Нужно через год-два искать новое интересное предложение и переезжать. А переезд занимает два-три дня потраченного времени. За всё время помню только один случай, когда цена снизилась.

2. Апгрейд (переезд на более мощный сервер в случае роста посещаемости) или даунгрейд (переезд на более слабый сервер), опять же требует переезда и переустановки всего ПО.

3. На «боевом» сервере нужно очень аккуратно работать с установкой ПО и с изменением настроек, т.к. в случае неудачи, может произойти длительный простой.

4. Обычная операция включения/перезагрузки сервера — иногда может занять несколько часов. Не везде есть интерфейсы доступа к перезагрузки. Часто это делают люди. Самое удобное что я видел, это iLo интерфейс у блейд-серверов HP, где можно не только перезагрузить сервер, но получить к нему доступ в случае отключения сетевых интерфейсов.

Т.е. для меня, аренда сервера уже не даёт нужной мне гибкости. Основная проблема в том, что если произойдет крах сервера, то нужно срочно искать другой сервер (+сразу платить за него), ждать пока его запустят, устанавливать и настраивать. Это может занять два-три дня. А длительный даунтайм сайтов не очень любит Google. Если находишься где-то в поездке, такая ситуация может обернуться целым кошмаром.

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

Самые крупные игроки, которых я рассматривал — Amazon Elastic Compute Cloud (EC2), RackSpace, Google Compute Engine, Microsoft Asuze (да да, Microsoft тоже предоставляет хостинг linux серверов). Т.е. это решения где можно заказать сервер в «облаке». Это будет обыкновенный linux веб-сервер, на который можно установить всё что угодно, но работать он будет не на отдельном веб-сервере, а где-то в «облаке» в инфраструктуре «облачного» хостера. Такой виртуальный веб-сервер можно «апгрейдить» (увеличивая ресурсы).

Я рассматривал цены, гибкость, различные сервисы и остановился на  Amazon EC2. Amazon один из самых старых игроков, они лидеры и кроме самого хостинга, это активно развивающаяся платформа (Amazon Web Services) с очень интересными решениями. По сути, это не просто сервис, а инфраструктура как сервис (Iaas). Я уже использую CND CloudFront — для кеширования и отдачи мелких картинок на одном из проектов и подключил его, помню, всего за пару дней.

amazon-web-services

Попробую описать вкратце плюсы и минусы размещения на Amazon Elastic Compute Cloud  (по-моему мнению).

Плюсы Amazon EC2:

1. Гибкость —  можно запустить инстанс (виртуальную машину) нужной производительности. Инстанс можно запустить из готового образа с чистой системой (любой дистрибутив Linux или Windows) или из специально подготовленного образа с определённым софтом. Можно заранее подготовить образ и получить уже сконфигурированную систему. Создание новой машины занимает несколько минут. Например, у меня есть готовый образ для тестирования со всем нужным софтом, и создание новой машины для тестирования нового проекта, с учётом закачки файлов, занимает около получаса.

2. Оплата только за потреблённые ресурсы — за работающие инстансы оплата за каждый час. Если инстанс остановлен или удалён, то за него платить не нужно. Можно создать новую машину, проверить нужную конфигурацию за пару часов, а затем её удалить и заплатить за это несколько десятков центов. Можно сделать копию диска работающей машины, запустить новый инстанс с копией диска и проверить всё что нужно без риска что-то «поломать».

3. Вертикальное масштабирование — можно быстро перейти на любой тарифный план, если ресурсы избыточны или наоборот. Для этого нужно остановить инстанс, поменять план и запустить его. Это занимает около минуты. Например, я свой новый работающий сервер под нагрузкой, запускал на трёх тарифных планах, чтобы сравнить производительность.

4. Бэкап всей системы — используя систему снапшотов, за несколько минут можно сохранить диск всей системы. Причём сохраняются не файлы, а вообще вся ОС на данный момент времени. В случае краха инстанса, можно создать новый предварительно создав образ из снапшота, либо создав диск из снапшота и поменять его у нового инстанса. Т.е. восстановление их бэкапа всей системы занимает считанные минуты. Создание снапшотов можно также автоматизировать.

4. EBS — Elastic Block Store, сетевой диск в «облаке», на котором работает вся система. EBS не зависим от сервера на котором работает инстанс, более надёжен чем жёсткий диск и обеспечивает до 2000 iops (операций ввода-вывода). Размер диска можно увеличить (для этого нужно останавливать машину на несколько минут). EBS диск существует отдельно от инстанса, можно создать другой инстанс и к нему приатачить уже существующий EBS.

5. Гибкая цена — при аренде на длительное время можно хорошо сэкономить. Это обширный вопрос, напишу об этом в следующем посте.

6. Оплата по факту — деньги нужно платить не вперёд, а в конце месяца по итогам потраченных ресурсов.

7. В отличие от ничем не подтверждённых гарантий многих провайдеров, Amazon гарантирует достаточно приличный 99,95% аптайм (чуть меньше 4.5 часа в год или 20 минут в месяц простоя) и обязуется платить штраф клиентам, если даунтайм больше допустимых значений.

8. Цены снижаются — например в этом году было два снижения.

 

Минусы Amazon EC2:

1. Меньшая производительность — виртуальные машины по мощности за ту же цену, заметно проигрывают отдельному серверу. Это плата за все «плюшки» что даёт Amazon. Впрочем если платить вперёд (об этом в следующем посте), цены более сравнимы.

2. EBS — Elastic Block Store, кроме плюсов имеет минусы. Скорость меньше чем у реального жёсткого диска, а судя по отзывам при большой нагрузке кол-во операций в секунду (iops) может упасть до десятков. (Но это решаемо, если заказывать EBS с гарантированным iops — правда это дороже).

3. Сложность с несколькими ip для одного сервера — к каждому инстансу можно подключить по умолчанию только один ip. Часто нужно несколько ip для «виртуального» хостинга.  Подключить несколько ip можно, использовав Amazon VPS, но это дополнительная оплата за VPS. Я например, я просто запустил два разных виртуальных сервера.

4. Кроме EBS, в виртуальных машинах даётся место на дисках сервера, но оно сбрасывается, если инстанс останавливается. Т.е. его можно использовать только для логов, к примеру, или для временных данных.

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

Следующим постом опишу цены и типы инстансов у Amazon Elastic Cloud Compute EC2.