Hal pertama yang pertama, AWS dan Heroku adalah hal yang berbeda. AWS menawarkan Infrastruktur sebagai Layanan ( IaaS ) sedangkan Heroku menawarkan Platform sebagai Layanan ( PaaS ).
Apa bedanya? Sangat kira-kira, IaaS memberi Anda komponen yang Anda butuhkan untuk membangun hal-hal di atasnya; PaaS memberi Anda lingkungan di mana Anda hanya menekan kode dan beberapa konfigurasi dasar dan mendapatkan aplikasi yang sedang berjalan. IaaS dapat memberi Anda lebih banyak kekuatan dan fleksibilitas, dengan biaya harus membangun dan mempertahankan lebih banyak diri Anda.
Untuk membuat kode Anda berjalan pada AWS dan terlihat agak seperti penyebaran Heroku, Anda akan menginginkan beberapa instance EC2 - Anda ingin menginstal load balancer / caching layer pada mereka (misalnya Varnish ), Anda akan ingin instance menjalankan sesuatu seperti Penumpang dan nginx untuk melayani kode Anda, Anda ingin menyebarkan dan mengkonfigurasi contoh basis data berkerumun seperti PostgreSQL . Anda akan menginginkan sistem penyebaran dengan sesuatu seperti Capistrano , dan sesuatu yang melakukan agregasi log.
Itu bukan jumlah pekerjaan yang tidak signifikan untuk didirikan dan dipertahankan. Dengan Heroku, upaya yang diperlukan untuk sampai ke tahap semacam itu mungkin adalah beberapa baris kode aplikasi dan a git push
.
Jadi Anda sejauh ini, dan Anda ingin meningkatkan. Bagus. Anda menggunakan Wayang untuk penyebaran EC2 Anda, bukan? Jadi sekarang Anda mengkonfigurasi file Capistrano Anda untuk memutar / menurunkan instance sesuai kebutuhan; Anda menyatukan kembali konfigurasi Wayang Anda sehingga Varnish mengetahui contoh web-pekerja dan akan secara otomatis menyatukan di antara mereka. Atau Anda heroku scale web:+5
.
Semoga itu memberi Anda gambaran tentang perbandingan keduanya. Sekarang untuk membahas poin spesifik Anda:
Kecepatan
Saat ini Heroku hanya berjalan pada instance AWS di us-east
dan eu-west
. Bagi Anda, ini kedengarannya seperti apa yang Anda inginkan. Bagi yang lain, ini berpotensi lebih sebagai pertimbangan.
Keamanan
Saya telah melihat banyak server produksi yang dikelola secara internal yang berada jauh di belakang pada pembaruan keamanan, atau secara umum buruk. Dengan Heroku, Anda memiliki orang lain yang mengelola hal semacam itu, yang merupakan berkah atau kutukan tergantung pada bagaimana Anda melihatnya!
Ketika Anda menggunakan, Anda secara efektif menyerahkan kode Anda langsung ke Heroku. Ini mungkin masalah bagi Anda. Artikel mereka tentang Dyno Isolation merinci teknologi isolasi mereka (sepertinya beberapa dino dijalankan pada instance EC2 individu). Beberapa rekan telah mengungkapkan masalah dengan teknologi ini dan kekuatan isolasi mereka; Saya sayangnya tidak dalam posisi cukup pengetahuan / pengalaman untuk benar-benar berkomentar, tetapi penyebaran Heroku saya saat ini menganggap bahwa "cukup baik". Mungkin itu masalah bagimu, aku tidak tahu.
Scaling
Saya menyentuh tentang bagaimana seseorang dapat menerapkan ini dalam perbandingan IaaS vs PaaS saya di atas. Kira-kira, aplikasi Anda memiliki Procfile
, yang memiliki garis-garis bentuk dyno_type: command_to_run
, jadi misalnya (dikutip dari http://devcenter.heroku.com/articles/process-model ):
web: bundle exec rails server
worker: bundle exec rake jobs:work
Ini, dengan:
heroku scale web:2 worker:10
akan menghasilkan Anda menjalankan 2 web
dino dan 10 worker
dino. Bagus, sederhana, mudah. Perhatikan bahwa web
ini adalah jenis dyno khusus, yang memiliki akses ke dunia luar, dan berada di belakang multiplekser lalu lintas web mereka yang bagus (mungkin semacam kombinasi Varnish / nginx) yang akan merutekan lalu lintas yang sesuai. Pekerja Anda mungkin berinteraksi dengan antrian pesan untuk perutean serupa, yang darinya mereka akan mendapatkan lokasi melalui URL di lingkungan.
Penghematan biaya
Banyak orang memiliki banyak pendapat berbeda tentang ini. Saat ini $ 0,05 / jam untuk satu jam dyno, dibandingkan dengan $ 0,025 / jam untuk instance mikro AWS atau $ 0,09 / jam untuk instance kecil AWS.
Dokumentasi dyno Heroku mengatakan Anda memiliki RAM sekitar 512MB, jadi mungkin tidak terlalu tidak masuk akal untuk menganggap sebuah dyno seperti contoh mikro EC2. Apakah nilainya dua kali lipat dari harga? Berapa nilai waktu Anda? Jumlah waktu dan upaya yang diperlukan untuk membangun di atas penawaran IaaS untuk mencapai standar ini jelas tidak murah. Saya tidak bisa menjawab pertanyaan ini untuk Anda, tetapi jangan meremehkan 'biaya tersembunyi' pengaturan dan pemeliharaan.
(Sedikit kesamping, tetapi jika saya terhubung ke sebuah dyno dari sini ( heroku run bash
), tampilan sepintas menunjukkan 4 core /proc/cpuinfo
dan 36GB RAM - ini membuat saya percaya bahwa saya menggunakan "High-Memory Double Extra Large Instance " . Dokumentasi dyno Heroku mengatakan bahwa setiap dyno menerima RAM 512MB, jadi saya berpotensi berbagi dengan hingga 71 dyno lainnya. (Saya tidak punya cukup data tentang homogen dari AWS Heroku, jadi jarak Anda mungkin bervariasi))
Bagaimana cara mereka melawan pesaing?
Ini, aku khawatir aku tidak bisa membantumu. Satu-satunya pesaing yang pernah saya lihat adalah Google App Engine - pada saat itu saya ingin menyebarkan aplikasi Java, dan jumlah pembatasan pada kerangka kerja dan teknologi yang dapat digunakan sangat tidak menguntungkan. Ini lebih dari "hanya hal Jawa" - jumlah pembatasan umum dan pertimbangan yang diperlukan ( petunjuk FAQ di beberapa) tampaknya kurang nyaman. Sebaliknya, penggelaran ke Heroku telah menjadi mimpi.
Kesimpulan
Saya harap ini menjawab pertanyaan Anda (beri komentar jika ada celah / bidang lain yang ingin Anda selesaikan). Saya merasa saya harus menawarkan posisi pribadi saya. Saya suka Heroku untuk "penyebaran cepat". Ketika saya memulai aplikasi, dan saya ingin hosting murah (tingkat gratis Heroku luar biasa - pada dasarnya jika Anda hanya perlu satu web dyno dan 5MB PostgreSQL, gratis untuk meng-host aplikasi), Heroku adalah posisi saya yang paling utama . Untuk "Serious Production Deployment" dengan beberapa pelanggan yang membayar, dengan perjanjian tingkat layanan, dengan waktu khusus untuk dihabiskan untuk operasi, dan lain-lain, saya tidak bisa memaksa diri untuk melepas kendali sebanyak itu ke Heroku, dan kemudian AWS atau server kami sendiri telah menjadi platform hosting pilihan.
Pada akhirnya, ini tentang apa yang paling cocok untuk Anda. Anda mengatakan bahwa Anda adalah "seorang programmer pemula" - mungkin saja menggunakan Heroku akan membuat Anda fokus menulis Ruby, dan tidak perlu menghabiskan waktu untuk mendapatkan semua infrastruktur lain di sekitar kode yang Anda buat. Saya pasti akan mencobanya.
Catatan, AWS sebenarnya memiliki penawaran PaaS, Elastic Beanstalk , yang mendukung Ruby, Node.js, PHP, Python, .NET, dan Java. Saya pikir umumnya kebanyakan orang, ketika mereka melihat "AWS", melompat ke hal-hal seperti EC2 dan S3 dan EBS, yang jelas merupakan penawaran IaaS