По-перше, AWS та Heroku - це різні речі. AWS пропонує інфраструктуру як послугу ( IaaS ), тоді як Heroku пропонує платформу як послугу ( PaaS ).
Яка різниця? Приблизно приблизно, IaaS надає вам необхідні компоненти для того, щоб будувати речі над ним; PaaS надає вам середовище, де ви просто натискаєте код та якусь основну конфігурацію та отримуєте запущену програму. IaaS може дати вам більше енергії та гнучкості, ціною того, що потрібно будувати і підтримувати більше.
Щоб ваш код працював на AWS і був схожий на розгортання Heroku, вам знадобиться кілька екземплярів EC2 - вам буде потрібно встановити на них балансир завантаження / кешуючий шар (наприклад, Varnish ), ви хочете, щоб екземпляри виконували щось на зразок Пасажиру та nginx для обслуговування вашого коду, ви хочете розгорнути та налаштувати кластерний екземпляр бази даних щось на зразок PostgreSQL . Вам потрібна система розгортання з чимось на зразок Capistrano і чимось роблячим агрегацією журналів.
Це не незначний об'єм роботи для створення та обслуговування. З Heroku зусилля, необхідні для того, щоб дійти до такого етапу, - це, мабуть, кілька рядків коду програми та git push
.
Отже, ти так далеко, і хочеш масштабувати. Чудово. Ви використовуєте Лялечку для розгортання EC2, правда? Отже, тепер ви налаштовуєте ваші файли Capistrano так, щоб вони обробляли копії вгору / вниз; ви повторно підключите конфігурацію ляльок, щоб Varnish знав про випадки роботи веб-службовців і автоматично об'єднав їх між собою. Або ти heroku scale web:+5
.
Сподіваємось, це дає вам уявлення про порівняння між ними. Тепер, щоб вирішити ваші конкретні моменти:
Швидкість
В даний час Heroku працює лише в екземплярах AWS в us-east
і eu-west
. Для вас це все одно схоже на те, що ви хочете. Для інших це потенційно більше уваги.
Безпека
Я бачив дуже багато виробничих серверів з внутрішнім обслуговуванням, які відстають від оновлень безпеки, або просто взагалі погано складаються. З Heroku у вас є хтось інший, який керує цією справою, що є або благом, або прокляттям, залежно від того, як ви на це дивитесь!
Під час розгортання ви ефективно передаєте код Heroku. Це може бути проблемою для вас. У статті про Dyno Isolation детально описані технології їх ізоляції (здається, що на окремих екземплярах EC2 працює декілька диносів). Кілька колег висловили проблеми з цими технологіями та силою їх ізоляції; Я, на жаль, не в змозі достатньо знань / досвіду, щоб дійсно коментувати, але мої нинішні розгортання Heroku вважають це "досить хорошим". Це може бути проблемою для вас, я не знаю.
Масштабування
Я торкнувся того, як можна реалізувати це в моєму порівнянні IaaS проти PaaS. Приблизно у вашій програмі є лінійка Procfile
, у якій є рядки форми dyno_type: command_to_run
, наприклад (cribbed від 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, який має доступ до зовнішнього світу і стоїть за їх приємним мультиплексором веб-трафіку (можливо, певною комбінацією лаків / nginx), який відповідно спрямовуватиме трафік. Ваші працівники, ймовірно, взаємодіють із чергою повідомлень щодо подібної маршрутизації, з якої вони отримають місцезнаходження за допомогою URL-адреси в оточенні.
Ефективність витрат
Багато людей мають багато різних думок з цього приводу. Наразі це $ 0,05 / год за дино-годину, порівняно з 0,025 дол. / Год. Для мікроекземпляра AWS або 0,09 дол. / Год. Для невеликого екземпляра AWS.
Дино- документація Heroku говорить про те, що у вас є близько 512 Мб оперативної пам’яті, тому, мабуть, не надто необґрунтовано вважати dyno трохи схожим на мікропримірник EC2. Чи варто подвоїти ціну? Скільки ви цінуєте свій час? Кількість часу та зусиль, необхідних для того, щоб доповнити пропозицію IaaS, щоб досягти цього стандарту, безумовно, недешево. Я не можу відповісти на це питання для вас, але не варто недооцінювати "приховані витрати" на налаштування та обслуговування.
(Трохи вбік, але якщо я звідси підключусь до дина ( heroku run bash
), побіжний погляд показує 4 ядра /proc/cpuinfo
та 36 ГБ оперативної пам’яті - це приводить мене до думки, що я перебуваю на «подвійному високопомітному пам’яті, надзвичайно великому екземплярі» " . У документації Heroku dyno сказано, що кожне dyno отримує 512 Мб оперативної пам'яті, тому я, можливо, ділюся з до 71 іншими динами. (У мене недостатньо даних про однорідність випадків AWS Heroku, тому ваш пробіг може змінюватися)"
Як вони виступають проти своїх конкурентів?
Боюсь, я не можу тобі реально допомогти. Єдиним конкурентом, якого я коли-небудь реально дивився, був Google App Engine - на той час я шукав розгортання Java-програм, і кількість обмежень на зручні рамки та технології була неймовірно непомітна. Це більше, ніж "лише справа Java" - кількість загальних обмежень та необхідних міркувань ( підказки FAQ на декілька) здавалися менш ніж зручними. Навпаки, розміщення в Героку було мрією.
Висновок
Я сподіваюся, що це відповість на ваші запитання (будь ласка, коментуйте, якщо є прогалини / інші сфери, які ви хочете вирішити). Я відчуваю, що повинен запропонувати своє особисте становище. Я люблю Heroku за "швидкі розгортання". Коли я запускаю програму, і хочу отримати дешевий хостинг (безкоштовний ярус Heroku є приголомшливим - по суті, якщо вам потрібно лише одне веб-дино і 5 Мб PostgreSQL, це безкоштовно для розміщення програми), Heroku - це моя позиція . Для "Серйозного розгортання виробництва" з декількома платними клієнтами, з домовленістю про рівень обслуговування, з виділеним часом, щоб витратити на ops та ін., Я не можу повністю змусити себе зняти такий контроль над Heroku, а потім або AWS або наші власні сервери були хостинговою платформою на вибір.
Зрештою, мова йде про те, що найкраще працює для вас. Ви кажете, що ви "початківець програміст" - можливо, просто використання Heroku дозволить вам зосередитись на написанні Ruby, а не доведеться витрачати час на створення іншої інфраструктури навколо вашого коду. Я б точно спробував.
Зауважте, AWS насправді має пропозицію PaaS, Elastic Beanstalk , яка підтримує Ruby, Node.js, PHP, Python, .NET та Java. Я думаю, що більшість людей, коли вони бачать "AWS", переходять до таких речей, як EC2 і S3 та EBS, які, безумовно, пропонують IaaS