Перво-наперво, AWS и Heroku - это разные вещи. AWS предлагает инфраструктуру как услугу ( IaaS ), тогда как Heroku предлагает платформу как услугу ( PaaS ).
Какая разница? Примерно так, IaaS предоставляет вам компоненты, которые вам нужны для того, чтобы создавать вещи на его основе; PaaS предоставляет вам среду, в которой вы просто добавляете код и некоторую базовую конфигурацию и получаете работающее приложение. IaaS может дать вам больше мощности и гибкости, за счет того, что вам придется создавать и поддерживать больше самостоятельно.
Чтобы ваш код работал на AWS и выглядел немного как развертывание Heroku, вам понадобятся некоторые экземпляры EC2 - вам понадобится установить на них балансировщик нагрузки / уровень кэширования (например, Varnish ), вам нужно, чтобы экземпляры выполняли что-то вроде Пассажир и nginx для обслуживания вашего кода, вы захотите развернуть и настроить экземпляр кластерной базы данных, например, PostgreSQL . Вам понадобится система развертывания с чем-то вроде Capistrano и чем-то, что объединяет журналы.
Это немалый объем работ по настройке и обслуживанию. В Heroku усилия, необходимые для перехода на такую стадию, могут составить несколько строк кода приложения и git push
.
Так что вы так далеко, и вы хотите увеличить. Отлично. Вы используете Puppet для своего развертывания EC2, верно? Итак, теперь вы настраиваете ваши файлы Capistrano так, чтобы они вращались вверх / вниз по мере необходимости; Вы повторно настраиваете свою конфигурацию Puppet, чтобы Varnish знал об экземплярах веб-работника и автоматически объединял их между собой. Или ты heroku scale web:+5
.
Надеюсь, это даст вам представление о сравнении между ними. Теперь рассмотрим ваши конкретные вопросы:
скорость
В настоящее время Heroku работает только на экземплярах AWS в us-east
и eu-west
. Для вас это звучит как то, что вы хотите в любом случае. Для других это потенциально больше внимания.
Безопасность
Я видел много производственных серверов с внутренним обслуживанием, которые сильно отстают в обновлениях безопасности или просто плохо собраны. С Heroku у вас есть кто-то еще, кто управляет такими вещами, которые являются благословением или проклятием в зависимости от того, как вы на это смотрите!
При развертывании вы фактически передаёте свой код Heroku. Это может быть проблемой для вас. В их статье о изоляции динамометрических элементов подробно описываются технологии изоляции (кажется, что на отдельных экземплярах EC2 работают несколько динамометров). Несколько коллег выразили проблемы с этими технологиями и силой их изоляции; У меня, к сожалению, недостаточно знаний / опыта, чтобы действительно комментировать, но мои нынешние развертывания Heroku считают это «достаточно хорошим». Это может быть проблемой для вас, я не знаю.
пересчет
Я коснулся того, как можно реализовать это в моем сравнении IaaS и PaaS выше. Примерно, ваше приложение имеет Procfile
, который имеет линию формы dyno_type: command_to_run
, так, например (списано из http://devcenter.heroku.com/articles/process-model ):
web: bundle exec rails server
worker: bundle exec rake jobs:work
Это, с:
heroku scale web:2 worker:10
приведет к тому, что у вас будет 2 web
дина и 10 worker
дин. Красиво, просто, легко. Обратите внимание, что web
это особый тип dyno, который имеет доступ к внешнему миру и находится за красивым мультиплексором веб-трафика (вероятно, какой-то комбинацией Varnish / nginx), который будет соответствующим образом маршрутизировать трафик. Ваши сотрудники, вероятно, взаимодействуют с очередью сообщений для аналогичной маршрутизации, из которой они получают местоположение через URL-адрес в среде.
Эффективность затрат
Многие люди имеют много разных мнений по этому поводу. В настоящее время он составляет 0,05 долл. США в час в течение динамо-часа, по сравнению с 0,025 долл. США в час для микроэкземпляра AWS или 0,09 долл. США в час для небольшого экземпляра AWS.
В документации Heroku по динамометрии говорится, что у вас есть около 512 МБ ОЗУ, поэтому, вероятно, не слишком разумно рассматривать динамографию как микро-экземпляр EC2. Стоит ли удваивать цену? Сколько вы цените свое время? Количество времени и усилий, необходимых для создания IaaS-предложения, обеспечивающего его соответствие этому стандарту, определенно недешево. Я не могу ответить на этот вопрос для вас, но не стоит недооценивать «скрытые затраты» на установку и обслуживание.
(Немного в стороне, но если я подключусь к dyno отсюда ( heroku run bash
), беглый взгляд показывает 4 ядра /proc/cpuinfo
и 36 ГБ ОЗУ - это наводит меня на мысль, что я нахожусь на «Двойной очень большой экземпляр с высокой памятью» « В документации Heroku dyno говорится, что каждый dyno получает 512 МБ ОЗУ, поэтому я потенциально могу поделиться с 71 другими dyno. (У меня недостаточно данных об однородности экземпляров Heroku AWS, поэтому ваш пробег может отличаться)
Как они живут против своих конкурентов?
Я боюсь, что не могу вам с этим помочь. Единственным конкурентом, на которого я когда-либо обращал внимание, был Google App Engine - в то время, когда я искал развертывание приложений Java, и количество ограничений на используемые платформы и технологии было невероятно отталкивающим. Это больше, чем «просто Java» - количество общих ограничений и необходимых соображений ( часто задаваемые вопросы часто задаваемые вопросы ) казалось менее чем удобным. Напротив, развертывание на Heroku было мечтой.
Вывод
Я надеюсь, что это ответит на ваши вопросы (пожалуйста, прокомментируйте, если есть пробелы / другие области, которые вы хотели бы устранить). Я чувствую, что должен предложить свою личную позицию. Я люблю Heroku за «быстрое развертывание». Когда я запускаю приложение и мне нужен дешевый хостинг (бесплатный уровень Heroku потрясающий - по сути, если вам нужен только один веб-dyno и 5 МБ PostgreSQL, он бесплатен для размещения приложения), Heroku - моя позиция перехода , Для "Серьезного развертывания производства" с несколькими платящими клиентами, с соглашением об уровне обслуживания, с выделенным временем, чтобы тратить на операции и т. Д., Я не могу заставить себя передать такой большой контроль Heroku, а затем либо AWS, либо наши собственные серверы были платформой хостинга.
В конечном счете, это о том, что работает лучше для вас. Вы говорите, что вы «начинающий программист» - возможно, просто использование Heroku позволит вам сосредоточиться на написании Ruby, и вам не придется тратить время на сборку всей другой инфраструктуры вокруг вашего кода. Я бы определенно попробовал.
Обратите внимание, что на самом деле AWS предлагает PaaS Elastic Beanstalk , который поддерживает Ruby, Node.js, PHP, Python, .NET и Java. Я думаю, что большинство людей, когда видят «AWS», переходят на такие вещи, как EC2, S3 и EBS, которые, безусловно, являются предложениями IaaS.