İlk önce AWS ve Heroku farklı şeyler. AWS Hizmet Olarak Altyapı ( IaaS ) sunarken Heroku Hizmet Olarak Bir Platform ( PaaS ) sunar.
Fark ne? Yaklaşık olarak, IaaS, üzerine bir şeyler inşa etmek için ihtiyacınız olan bileşenleri sunar; PaaS size sadece kodu ve bazı temel yapılandırmaları aktardığınız ve çalışan bir uygulama aldığınız bir ortam sağlar. IaaS size daha fazla güç ve esneklik sağlayabilir, bu da daha fazla kendinizi geliştirmek ve bakımını yapmak zorunda olursunuz.
Kodunuzun AWS'de çalışmasını ve biraz Heroku dağıtımına benzemesini sağlamak için bazı EC2 örnekleri isteyeceksiniz - üzerlerinde bir yük dengeleyici / önbellek katmanı (örn. Vernik ) yüklü olmasını isteyeceksiniz, örneğin Yolcu ve nginx kodunuzu sunmak için, PostgreSQL gibi bir şeyin kümelenmiş bir veritabanı örneğini dağıtmak ve yapılandırmak isteyeceksiniz . Capistrano gibi bir şeyle ve günlük toplama yapan bir şeyle bir dağıtım sistemi isteyeceksiniz .
Bu, kurulması ve sürdürülmesi için önemsiz bir iş değildir. Heroku ile, bu tür bir aşamaya ulaşmak için gereken çaba belki birkaç satır uygulama kodu ve a git push
.
Yani siz bu kadar uzaksınız ve ölçeklendirmek istiyorsunuz. Harika. EC2 dağıtımınız için Kukla kullanıyorsunuz , değil mi? Şimdi Capistrano dosyalarınızı örnekleri gerektiği gibi yukarı / aşağı döndürecek şekilde yapılandırıyorsunuz; Kukla yapılandırmanızı Varjish'in web çalışanı örneklerinden haberdar olması ve aralarında otomatik olarak havuz oluşturması için yeniden jig uygularsınız. Veya sen heroku scale web:+5
.
Umarım bu ikisi arasındaki karşılaştırma hakkında bir fikir verir. Şimdi belirli noktalarınızı ele almak için:
hız
Şu Heroku sadece AWS içinde örneklerinde çalışır us-east
ve eu-west
. Senin için, bu zaten istediğin gibi görünüyor. Diğerleri için, potansiyel olarak daha önemli bir husustur.
Güvenlik
Güvenlik güncelleştirmelerinin çok gerisinde olan veya genellikle kötü bir şekilde bir araya getirilmiş, dahili olarak bakımı yapılan birçok üretim sunucusu gördüm. Heroku ile, nasıl baktığınıza bağlı olarak bir nimet veya lanet olan bu tür şeyleri yöneten bir başkası var!
Konuşlandırdığınızda, kodunuzu doğrudan Heroku'ya dağıtıyorsunuz. Bu sizin için bir sorun olabilir. Dyno İzolasyonu ile ilgili makaleleri, izolasyon teknolojilerini detaylandırıyor (sanki ayrı EC2 bulut sunucularında birden çok dinamo çalışıyor gibi görünüyor). Bazı meslektaşlar bu teknolojilerle ilgili sorunları ve tecrit güçlerini ifade ettiler; Ne yazık ki gerçekten yorum yapmak için yeterli bilgi / deneyim pozisyonunda değilim, ama şu anki Heroku dağıtımlarım "yeterince iyi" olduğunu düşünüyor. Senin için bir sorun olabilir, bilmiyorum.
ölçekleme
Birinin yukarıdaki IaaS vs PaaS karşılaştırmasında bunu nasıl uygulayabileceğine değindim. Yaklaşık olarak, uygulamanızda Procfile
form satırları olan bir a vardır , dyno_type: command_to_run
örneğin ( http://devcenter.heroku.com/articles/process-model adresinden kopyalanmıştır ):
web: bundle exec rails server
worker: bundle exec rake jobs:work
Bu, bir:
heroku scale web:2 worker:10
2 web
dinamosun ve 10 worker
dinamo'nun çalışmasına neden olur. Güzel, basit, kolay. Not web
dış dünyaya erişimi olan özel bir Dyno tipidir ve onların güzel web trafiği çoklayıcı arkasında (Vernik / nginx kombinasyonunun muhtemelen bir çeşit) buna göre o güzergahın trafik olduğunu. Çalışanlarınız büyük olasılıkla, konumu ortamdaki bir URL yoluyla alacakları benzer yönlendirme için bir ileti kuyruğu ile etkileşime girer.
Maliyet Verimliliği
Birçok insanın bu konuda birçok farklı görüşü var. Şu anda, bir AWS mikro örneği için 0.025 $ / saat veya AWS küçük örneği için 0.09 $ / saat ile karşılaştırıldığında, bir dinamo saati için 0.05 $ / saat.
Heroku en Dyno belgeleri muhtemelen değil yani, 512MB RAM hakkında diyor çok bir EC2 mikro örneği gibi biraz gibi bir dyno düşünün mantıksız. Fiyatın iki katı mı? Zamanınıza ne kadar değer veriyorsunuz? Bu standarda ulaşmak için bir IaaS teklifinin üzerine inşa etmek için gereken zaman ve çaba miktarı kesinlikle ucuz değildir. Bu soruyu sizin için gerçekten cevaplayamıyorum, ancak kurulum ve bakımın 'gizli maliyetlerini' küçümsemeyin.
(Biraz bir kenara, ama buradan bir dinamoya bağlanırsam ( heroku run bash
), lanetli bir görünüm 4 çekirdeği /proc/cpuinfo
ve 36 GB RAM'i gösteriyor - bu beni "Yüksek Bellek Çift Ekstra Büyük Eşgörünümde olduğuma inandırıyor " . Heroku dyno belgeleri her dyno'nun 512MB RAM aldığını söylüyor, bu yüzden potansiyel olarak 71'e kadar başka dinamoyla paylaşıyorum. (Heroku'nun AWS örneklerinin homojenliği hakkında yeterli veri yok, bu yüzden göçünüz değişebilir))
Rakiplerine karşı nasıl ücret alıyorlar?
Bu, sana gerçekten yardım edememekten korkuyorum. Gerçekten baktığım tek rakip Google App Engine'di - Java uygulamalarını dağıtmaya çalışırken , kullanılabilir çerçeveler ve teknolojiler üzerindeki kısıtlamalar inanılmaz derecede rahatsız ediciydi. Bu "sadece bir Java şeyinden" daha fazlasıdır - genel kısıtlamaların ve gerekli düşüncelerin ( birkaçında SSS ipuçları) miktarı uygun olmaktan daha az görünüyordu. Buna karşılık, Heroku'ya konuşlanmak bir rüyaydı.
Sonuç
Umarım bu sorularınızı yanıtlar (ele alınmasını istediğiniz boşluklar / diğer alanlar varsa lütfen yorum yapın). Kişisel konumumu sunmam gerektiğini hissediyorum. Heroku'yu "hızlı dağıtımlar" için seviyorum. Bir uygulamaya başladığımda ve bazı ucuz barındırma istediğimde (Heroku ücretsiz katmanı harika - esasen sadece bir web dinamosuna ve 5 MB PostgreSQL'e ihtiyacınız varsa, bir uygulamayı barındırmak ücretsizdir), Heroku benim konumum . Birkaç ödeme müşterisi olan, hizmet seviyesi sözleşmesi olan, ops, c cetera için harcanacak zamana sahip "Ciddi Üretim Dağıtımı" için, kendimi bu kadar kontrolü Heroku'ya ve daha sonra AWS veya kendi sunucularımız barındırma platformudur.
Sonuçta, sizin için en iyi olan şeyle ilgilidir. "Yeni başlayan bir programcı" olduğunuzu söylüyorsunuz - bu sadece Heroku'yu Ruby yazmaya odaklanmanıza izin verecek ve kodunuzun etrafındaki diğer tüm altyapıları almak için zaman harcamanıza gerek olmayabilir. Kesinlikle denemek istiyorum.
AWS'nin aslında Ruby, Node.js, PHP, Python, .NET ve Java'yı destekleyen bir PaaS teklifi, Elastik Beanstalk var . Genelde çoğu insan, "AWS" gördüklerinde, kesinlikle IaaS teklifleri olan EC2 ve S3 ve EBS gibi şeylere atlıyorlar.