Каковы плюсы и минусы AWS Elastic Beanstalk по сравнению с другими стратегиями развертывания?

17

Я довольно новичок во всем стеке Netflix OSS и развертываниях в целом. В качестве фона для моего текущего уровня знаний, моя основная роль заключается в качестве инженера внешнего интерфейса. Тем не менее, мне нравится эксплуатационная сторона, поэтому я пытаюсь настроить новую стратегию развертывания и инструменты для нового проекта.

Наши цели

  • Супер легкое развертывание (мы хотим нажать кнопку, чтобы обновить производство)
  • Автоматическое развертывание в тестовых средах (с использованием Jenkins)
  • Простота обслуживания (у нас есть приложение для написания, мы не хотим тратить время на решение производственных проблем)
  • Способность обрабатывать сервис-ориентированную архитектуру (множество небольших приложений, различные языки и хранилища данных)
  • Достаточная гибкость, чтобы гарантировать, что нам не придется менять стратегии в ближайшее время (мы уже пытаемся уйти от RightScale)

У нас все в порядке с небольшим временем начальной настройки, если в будущем это избавит нас от головной боли.

Итак, в соответствии с этим, я слушал подкасты, смотрел доклады Ops и читал тонны постов в блоге, и исходя из наших целей и того, что я принял за формирование лучших практик, мы начали формировать план, используя Асгард, закатывая нашу посылку в банку и превращая ее в АМИ.

Мы все спланировали и нам понравились преимущества процесса по сравнению с использованием сервера Chef и конвергенции экземпляров на лету (мы чувствовали, что это может привести к ошибкам, учитывая нашу ограниченную временную шкалу и отсутствие понимания рабочего процесса сервера Chef). Тем не менее, коллега сам немного осмотрелся и почувствовал, что Elastic Beanstalk удовлетворил наши потребности.

Я изучил его и ускорил тестовую среду с помощью файла WAR и прикрепленной базы данных RDS. Кажется, все работает, и я считаю, что мы можем автоматизировать развертывание в среде тестирования с помощью Jenkins через AWS API. Кажется достаточно простым ... возможно, слишком простым.

Что мне интересно, в чем подвох? Если Elastic Beanstalk настолько прост и эффективен, почему о нем не говорится больше? Мне трудно найти достаточно объективных мнений и фактов о двух разных стратегиях развертывания, поэтому я решил спросить.

Вы используете Elastic Beanstalk? Если да, то почему и какие факторы приводят к такому решению? Что тебе нравится и не нравится?

Если вы не используете Elastic Beanstalk, но рассматриваете его, что вы используете и почему вы не использовали Elastic Beanstalk?

Каковы преимущества и недостатки стратегии развертывания на основе Elastic Beanstalk для SOA? То есть, будет ли Elastic Beanstalk хорошо работать со многими небольшими приложениями, которые полагаются на работу друг друга?

Джеймс ван Дайк
источник

Ответы:

11

Я оценил Elastic Beanstalk в дополнение к другим предложениям AWS, пытаясь улучшить наши откатанные вручную экземпляры AWS. Причины, по которым я решил не использовать его, были вызваны сложностями, которые могут привести к переносу моего существующего приложения, а не самим предложением. Загвоздка в том, что вы не имеете достаточного контроля над развертыванием приложений / настройкой серверов. Если вы запускаете новое приложение, то может быть полезно не заниматься такими вещами прямо сейчас, если у вас есть существующее приложение, то это более сложная задача - вписаться в модель Beanstalk.

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

Проблемы, с которыми я столкнулся при работе с приложениями:

  • Развертывания на основе Git - я люблю их, но наше репо составляет более 1 ГБ. Довольно большой, чтобы давить на регулярной основе. Этот репо также содержит около 40 приложений (которые действительно должны быть разделены), но это займет некоторое время. Загрузка любого вида пакета может работать, но большинству наших приложений потребуется большой объем работы, чтобы превратить его в пакет.

  • Интеграция с другими сервисами. Из того, что я видел, Beanstalk предполагает, что все, к чему вы подключаетесь, является одним сервисом. Это хорошо работает, если ваши сервисы отстают и ELB, но наши были отдельными узлами, которые мы использовали через HAProxy, работающий на каждом сервере приложений. Если вы используете свои хранилища данных и другие службы в качестве единой конечной точки, все будет в порядке.

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

Я решил использовать вместо этого AWS Autoscaling Groups с некоторой автоматизацией, предоставленной Asgard . Это было наименьшее изменение в существующей конфигурации / коде приложения и дало нам те преимущества, которые мы искали, простое управление несколькими серверами, доступное через AWS API.

Ограничения, установленные Elastic Beanstalk для вашего приложения, очень полезны. Вы должны будете убедиться, что ваше приложение в основном не имеет состояния, предоставляет конечную точку для службы и полагается на другие службы для состояния. Если вы пытаетесь создать многократно используемые автономные сервисы, то несколько приложений в Beanstalk - отличное начало.

Если / когда вы дойдете до точки, когда вам нужно больше настроек, OpsWorks - отличный следующий шаг. Предопределенные роли должны облегчать переход с начала, и он обеспечивает среду автоматизации вокруг Chef, чтобы помочь координировать подготовку нескольких серверов.

Филипп Криштиану
источник
2
Отличный ответ, Филипп. Кажется, что самое большое ограничение для Elastic Beanstalk - то, что базовый AMI настроил на нем. Так что, да, для базовой службы без сохранения состояния она кажется великолепной. Однако, как только вам нужно запустить несколько сервисов (например, nginx, специализированный мониторинг) в одном экземпляре, вы должны свернуть свой собственный AMI, а затем потерять автоматические обновления базовой AMI для сервисов AWS. К этому моменту вы уже в процессе развертывания. Мне кажется, что сейчас самое время подумать о том, чтобы отойти от EB.
Джеймс ван Дайк
0

Я вижу смысл потери контроля, но я не обязательно вижу обязательное безгражданство. Все, что на самом деле делает eb - это развертывание автоматизации, что, кстати, потрясающе. Я вижу смысл большого хранилища. В общем, я думаю, что разделение логических функций приложения на отдельные приложения bean, а затем создание «промежуточной» и «расширенной» сред - это действительно хорошо. У нас есть модули среды, такие как uploader, это не очень много, и в теории это добавляет много затрат, но тогда вы используете меньшие экземпляры, только больше. Мы запустили централизованный nginx, и нам пришлось написать множество пользовательских дескрипторов sns, чтобы уведомить ngnix об изменениях в политике автоматического масштабирования. Еще одна большая проблема - невозможность изменить баланс нагрузки, так как мы используем ngnix, почему? elb не поддерживает websocket.

Зеев Глозман
источник