まず最初に、AWSとHerokuは異なります。AWSはサービスとしてのインフラストラクチャ(IaaS)を提供し、Herokuはサービスとしてのプラットフォーム(PaaS)を提供します。
違いは何ですか?概して、IaaSは、その上に物事を構築するために必要なコンポーネントを提供します。PaaSは、コードといくつかの基本構成をプッシュし、実行中のアプリケーションを取得するだけの環境を提供します。IaaSを使用すると、より多くのパワーと柔軟性を得ることができますが、自分でより多くを構築して維持する必要があります。
AWSでコードを実行し、Herokuデプロイメントのように見えるようにするには、いくつかのEC2インスタンスが必要です。それらにロードバランサー/キャッシングレイヤーをインストールする必要があります(たとえばVarnish)。インスタンスは次のように実行する必要があります。Passengerとnginxがコードを提供するには、PostgreSQLなどのクラスター化データベースインスタンスをデプロイして構成する必要があります。Capistranoのようなものと、ログの集約を行うもののあるデプロイメントシステムが必要になります。
これは、設定して維持するのに取るに足らない量ではありません。Herokuでは、このような段階に到達するために必要な作業は、おそらく数行のアプリケーションコードとgit push
です。
だから、あなたはここまで来て、あなたはスケールアップしたいと思っています。すごい。EC2のデプロイメントにPuppetを使用していますか?したがって、必要に応じてインスタンスをスピンアップ/スピンダウンするようにCapistranoファイルを構成します。VarnishがWebワーカーインスタンスを認識し、それらの間で自動的にプールするように、Puppet構成を再ジグします。またはあなたheroku scale web:+5
。
うまくいけば、2つの比較を理解できます。次に、特定のポイントに対処します。
速度
現在、Herokuは、us-east
およびのAWSインスタンスでのみ実行されますeu-west
。あなたにとって、これはとにかく欲しいもののように聞こえます。他の人にとっては、それは潜在的にもっと考慮すべきことです。
安全保障
私は、セキュリティ更新が遅れている、または一般的にうまく統合されていない、内部で保守されている多くの運用サーバーを見てきました。Herokuを使用すると、他の誰かがそのようなことを管理します。これは、それをどのように見るかによって祝福か呪いのどちらかです。
デプロイすると、効果的にコードがHerokuに直接渡されます。これはあなたにとって問題になるかもしれません。Dyno分離に関する彼らの記事は、それらの分離技術について詳述しています(複数のdynoが個々の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
dynoと10のworker
dynoが実行されます。いい、シンプル、簡単。web
は、外界にアクセスできる特別なdynoタイプであり、それに応じてトラフィックをルーティングする素敵なWebトラフィックマルチプレクサ(おそらく何らかの種類のVarnish / nginxの組み合わせ)の後ろにあることに注意してください。ワーカーはおそらく、同様のルーティングのためにメッセージキューを操作し、そこから環境内のURLを介して場所を取得します。
コスト効率
多くの人がこれについて多くの異なる意見を持っています。現在、1時間あたり0.05ドルですが、AWSマイクロインスタンスの場合は0.025ドル、AWS小規模インスタンスの場合は0.09ドルです。
Herokuのdynoのドキュメントには、約512MBのRAMがあると書かれているので、おそらくdynoをEC2マイクロインスタンスのように考えるのはそれほど不合理ではありません。価格の2倍の価値はありますか?あなたはあなたの時間をどれくらい大切にしていますか?この標準に到達するためにIaaSオファリングの上に構築するのに必要な時間と労力は、決して安くはありません。この質問にはお答えできませんが、セットアップとメンテナンスの「隠れたコスト」を過小評価しないでください。
(少し余談ですが、ここからdyno に接続すると(heroku run bash
)、ざっと見たところ、4コアのイン/proc/cpuinfo
メモリと36 GBのRAMが表示されます。これにより、「ハイメモリダブルエクストララージインスタンス"。Herokuののダイナモのドキュメントでは、私は潜在的に71他のdynosまでと共有していますので、各ダイノは、512MBのRAMを受けると言います。(あなたの走行距離は変更になる場合がありますので、私は、HerokuののAWSインスタンスの同性についての十分なデータを持っていません))
彼らはどのように競争相手に対抗していますか?
これは、私は本当にあなたを助けることができないと思います。私が今まで見た中で唯一の競争相手はGoogle App Engineでした-当時Javaアプリケーションをデプロイしようとしていましたが、使用可能なフレームワークとテクノロジーに対する制限の量は信じられないほど不快でした。これは「単なるJavaのこと」以上のものです。一般的な制限と必要な考慮事項(いくつかのFAQのヒント)の量は、あまり便利ではないように見えました。対照的に、Herokuへの展開は夢でした。
結論
これがあなたの質問に答えてくれることを願っています(ギャップやその他の対応したい領域がある場合はコメントしてください)。私は自分の立場を申し出るべきだと思います。Herokuは「迅速な展開」が大好きです。アプリケーションを開始していて、安価なホスティングが必要な場合(Herokuの無料枠は素晴らしいです-基本的に1つのWeb dynoと5MBのPostgreSQLだけが必要な場合、アプリケーションをホストするのは無料です)、Herokuが私の頼りになるポジションです。いくつかの有料顧客がいて、サービスレベル契約があり、運用などに費やす時間を費やしている「深刻な本番環境での展開」の場合、Herokuにそれだけの制御をオフロードして、AWSまたは私たちのサーバーは、ホスティングプラットフォームとして最適です。
結局のところ、それはあなたにとって最も効果的なものです。あなたは「初心者プログラマー」だと言っています。Herokuを使用すると、Rubyの作成に集中できるので、コードに関連する他のすべてのインフラストラクチャを構築するために時間を費やす必要がない場合もあります。ぜひやってみます。
AWSには、Ruby、Node.js、PHP、Python、.NET、JavaをサポートするPaaSオファリングであるElastic Beanstalkが実際にあります。ほとんどの人は、「AWS」が表示されたら、間違いなくIaaSサービスであるEC2、S3、EBSなどに移動すると思います。