[ruby-on-rails] AWSが存在するときに人々がHerokuを使用するのはなぜですか? HerokuとAWSの違いは何ですか?


Answers

まず第一に、AWSとHerokuは異なるものです。 AWSはサービスとしてのインフラストラクチャ( IaaS )を提供しますが、Herokuはサービスとしてのプラットフォーム( PaaS )を提供します。

違いは何ですか? 非常におおよそのIaaSは、その上に物事を構築するために必要なコンポーネントを提供します。 PaaSは、コードといくつかの基本設定をプッシュし、実行中のアプリケーションを取得する環境を提供します。 IaaSは、より多くのパワーと柔軟性を提供することができます。

AWS上でコードを実行し、Herokuのデプロイメントのように見えるようにするには、いくつかのEC2インスタンスが必要です(ロード・バランサ/キャッシング・レイヤーをそれらにインストールする必要があります( Varnish )。 Passengernginxがあなたのコードを提供するためには、 PostgreSQLようなもののクラスタ化されたデータベースインスタンスを展開して設定したいと思うでしょう。 Capistranoなどのデプロイメントシステムと、ログ集約を行うものが必要です。

これは、セットアップして維持するための重要な作業ではありません。 Herokuでは、この種のステージに到達するために必要な作業は、おそらく数行のアプリケーションコードとgit pushです。

だからあなたはこれまでのところで、スケールアップしたいと思っています。 すばらしいです。 EC2の展開にPuppetを使用しています。 これで、必要に応じてCapistranoファイルを設定してインスタンスをスピンアップ/ダウンさせるようになりました。 あなたはPuppetの設定を変更し直して、VarnishはWebワーカーのインスタンスを認識し、自動的にそれらのインスタンスをプールします。 またはあなたはheroku scale web:+5

うまくいけば、それはあなたに2つの間の比較のアイデアを与える。 今あなたの特定のポイントに対処する:

速度

現在、Herokuはus-easteu-west AWSインスタンスでのみ動作します。 あなたのために、これはあなたがとにかく欲しいもののように聞こえる。 他の人にとっては、潜在的により多くの考慮事項です。

セキュリティ

私は、内部で管理されている多くのプロダクションサーバを見てきましたが、これはセキュリティアップデートの裏にあります。 Herokuでは、あなたはそれをどのように見ているかに応じて、祝福か呪いかのようなことを管理する他の誰かがいます!

展開すると、コードを効果的にHerokuに渡すことができます。 これは問題です。 Dyno Isolationに関する記事では、分離技術について詳述しています(複数のダイノスが個別のEC2インスタンスで実行されているかのようです)。 いくつかの同僚は、これらの技術とその孤立の強さについて問題を表明しています。 私は本当にコメントするのに十分な知識や経験の立場ではありませんが、私の現在のHerokuの展開は「十分に良い」と考えています。 それはあなたのための問題かもしれない、私は知らない。

スケーリング

私は上記の私のIaaS対PaaS比較でこれをどのように実装するのか触れました。 おおよそ、あなたのアプリケーションはProcfile持っていProcfile 。これは、 dyno_type: command_to_runという形式の行を持っています。例えば、次のようになります( http://devcenter.heroku.com/articles/process-modelからdyno_type: command_to_run )。

web:    bundle exec rails server
worker: bundle exec rake jobs:work

これは:

heroku scale web:2 worker:10

あなたは2つのwebダイノスと10のworkerダイノスを稼動させるでしょう。 ニース、シンプル、簡単。 webは特殊なdynoタイプであり、外部の世界にアクセスし、適切なトラフィックをルーティングする素晴らしいWebトラフィックマルチプレクサ(たぶんVarnish / nginxの組み合わせ)の背後にあることに注意してください。 あなたのワーカーはおそらく、同様のルーティングのためにメッセージキューとやり取りします。そこから、環境内のURL経由でロケーションを取得します。

コスト効率

多くの人々がこれについて多くの意見を持っています。 現在のところ、dyno時間では$ 0.05 / hr、AWSマイクロインスタンスでは$ 0.025 / hr、AWS小インスタンスでは$ 0.09 / hrです。

Herokuのdynoのドキュメントには、512MBのRAMがあると言われています。だから、おそらくdynoをEC2マイクロインスタンスのように考えるのは無理はありませ 。 それは価格の倍の価値があるのですか? どのくらいあなたの時間を評価していますか? IaaS製品をこの標準にするために必要な時間と労力は、安くはありません。 私は本当にあなたのためにこの質問に答えることはできませんが、セットアップとメンテナンスの「隠されたコスト」を過小評価しないでください。

(ちょっとしたことですが、ここからheroku run bashに接続すると( heroku run bash )、 /proc/cpuinfoと36GBのRAMに4つのコアが表示されます。これは私が" Heokuのdyno ドキュメントには512MBのRAMが搭載されているため、最大71台の他のdynosと共有する可能性があります(HerokuのAWSインスタンスの均質性に関する十分なデータはありませんが、あなたの額は変わるかもしれません))

彼らは競合他社とどうやり合いますか?

これは、私が本当にあなたを助けることができないのではないかと心配しています。 私が今まで見てきた唯一の競合相手は、 Google App Engineでした.Javaアプリケーションを配備しようとしていた当時、使用可能なフレームワークとテクノロジに対する制限は非常に少なかったです。 これは「単なるJavaのもの」以上のものです。一般的な制限や必要な考慮事項(いくつかのFAQヒント)は便利ではないようです。 対照的に、Herokuへの展開は夢でした。

結論

私はこれがあなたの質問に答えることを願っています(あなたが取り組むべきギャップ/他の分野がある場合はコメントしてください)。 私は私の個人的な立場を提供すべきだと感じています。 私はHerokuを「クイックデプロイメント」として愛しています。 私がアプリケーションを起動しているときに安価なホスティングが必要な場合(Herokuのフリー層は素晴らしいです - 基本的に1つのWeb dynoと5MBのPostgreSQLが必要な場合は、アプリケーションをホストするのは自由です)、Herokuは私の行き先です。 いくつかの有料顧客との "Serious Production Deployment"のために、サービスレベル契約を結んで、opsなどに費やす時間を費やしているだけに、私はHerokuに多くのコントロールを提供することはできません。私たち自身のサーバーはホスティングプラットフォームとして選ばれました。

最終的には、それがあなたのために最適なものについてです。 あなたは「初心者のプログラマ」と言います。それは、Herokuを使ってRubyを書くことに集中し、コードの周りにある他のすべてのインフラストラクチャを構築する時間を費やす必要がないことです。 私は間違いなくそれを試してみましょう。

AWSにはRuby、Node.js、PHP、Python、.NET、JavaをサポートするPaaSの製品Elastic Beanstalkが実際にあります。 私は一般的に、ほとんどの人が「AWS」を見て、EC2やS3、EBSのようなものに飛びついていると思います。これは間違いなくIaaS製品です

Question

私はHerokuを使って自分のアプリを配備することを計画している初心者のRoRプログラマーです。 私の他の顧問の友人からの言葉は、Herokuは本当に使いやすく、使いやすいと言います。 唯一の問題は、私はまだHerokuが何をしているのか分かりません。

私は彼らのwebsiteを見てきました。一言で言えば、Herokuはスケーリングに役立っていますが...それはなぜ問題なのでしょうか? Herokuはどのように役立ちますか:

  1. スピード - 私の調査によると、米国東海岸にAWSを展開することは、米国/アジアを拠点とするオーディエンスをターゲットにしている場合は最も速くなります。

  2. セキュリティ - どれくらい安全ですか?

  3. スケーリング - 実際にはどのように機能しますか?

  4. コスト効率 - 規模を拡大しやすいdynoのようなものがあります。

  5. 彼らは競合他社とどうやり合いますか? たとえば、 エンジンヤードbluebox

私は初心者のプログラマーです。




まあ! 私はHerokuが出芽して新しく生まれた開発者で有名で、AWSは開発者のPersonaを開発しています。 DigitalOceanもまたこの土台の主要プレーヤーです。 CloudwaysはDigitalOceanとAWSをクリックするだけで簡単にランプスタックを作成することができました。 すべてのサービスとパッケージをワンクリックで更新することは、すべて手動で行うよりはるかに優れています。

ここで完全にチェックアウトすることができます: https://www.cloudways.com/blog/host-php-on-aws-cloud/ : https://www.cloudways.com/blog/host-php-on-aws-cloud/




開発、IT、およびビジネスの目標からこの決定を見る方法はたくさんあります。圧倒的に思えば悪くはありません。 しかし、また、スケーラビリティを過大評価しないでください。

要件について考えてみてください。

私は、1日に8M以上のユニークなサービスを提供し、莫大な$ MMのITスタッフが資本金250,000ドルからインフラストラクチャで構築した週に1テラバイトのビデオを配信したウェブサイトを設計しました。

しかし、私はまた、年間10〜20kドルを生み出すように設計された小規模なウェブサイトを持っており、トラフィック、データベース、処理要件があまり高くないため、10ドル/ moの汎用ホスティングアカウントから妥協することなく実行しました。

将来的には展開がAWSよりHerokuに近いように見えるでしょう。 ますます自動化されないスケーラビリティのインターネットインフラストラクチャのITノブの転換には価値がなく、提供する製品やサービスの価値とは関係しません。

また、商用のウェブサイトにも留意してください。スケーラビリティは、「良い問題」と呼ばれることが多いですが、FacebookやTwitterなどのサイトでのスケーラビリティの問題は非常に高く、成功への悪影響はゼロです。より多くのサインアップに貢献したかもしれません(すべてのプレスは良いプレスです)。

1日に100,000以上のユニークを生成し、スケーリングの問題を抱えているサービスをお持ちの場合は、実行している言語、データベース、プラットフォーム、インフラストラクチャに関係なく、手に入れていただければ幸いです。

スケーラビリティは、実装可能な実装上の問題です。顧客が存在することは存在しません。







これは、HerokuからAWSに移行する当社の事業のかなりの割合を占めています。 両方に利点がありますが、しばらくしてHerokuで乱雑になってしまいます... Herokuの限界を維持するのが容易ではない複雑さのレベルを必要とすると、

つまり、Herokuの使いやすさとAWSの優れた柔軟性を偉大なフレームワーク/ツールを使用してAWSに取り入れることができます。




既存の回答は概ね正確です。

  • Herokuは非常に使いやすく、配備が簡単で、リポジトリ(GitHubなど)の自動デプロイメント用に簡単に設定でき、インスタンスごとに多くのサードパーティ製のアドオンと課金があります。

  • AWSには、DNS、ロードバランシング、安価なファイルストレージなどの競争力のある価格のファーストパーティサービスがあり、セキュリティポリシーを定義できるようなエンタープライズ機能があります。

tl; drの場合は、このポストの最後までスキップしてください。

AWS ElasticBeanstalkは、Herokuのようなオートスケーリングと簡単なデプロイメントプラットフォームを提供する試みです。 EB2サーバは、自動的に作成されるEC2インスタンスを使用するため、他のEC2インスタンスが実行できるすべてのことを実行でき、実行するのが安いです。

EBによる展開は非常に遅いです。 更新プログラムを展開するにはサーバーあたり10-15分かかることがあり、大規模なクラスタに展開することは1時間のうちで最も効果的です(Herokuで更新プログラムを展開するにはわずか数秒かかります)。 EB上の配備は、特にシームレスに処理されないため、アプリケーション設計に制約が生じる可能性があります。

ElasticBeanstalkが使用するすべてのサービスを使用して独自のオーダーメイドシステム(CodeDeploy、Elastic Load Balancer、自動スケーリンググループ、CodeCommit、CodeBuild、CodePipelineなど)を構築できますが、 EC2での設定だけではなく、ちょっと複雑なので、最初から数週間で設定しています。

AWS Lightsailは競争力のある価格のホスティングオプションを提供しますが、展開やスケーリングには役立ちません。実際にはEC2のラッピングにすぎません(ただし、はるかにコストがかかります)。 初期設定でbashスクリプトを自動的に実行できるようになりました。これは素敵ですが、EC2インスタンスを設定するだけのコスト(プログラマチックに行うこともできます)と比べて高価です。

比較についての考え(ラウンドアバウトではあるが質問に答えようとする):

  1. セキュリティパッチ(およびOSの更新プログラム)をインストールしてすべてのものを最新に保つことを含め、作業システム管理の量を過小評価しないでください。

  2. 自動配備、自動スケーリング、およびSSLプロビジョニングと設定の利点がどれくらいかを過小評価しないでください。

    Gitリポジトリを更新する際の自動デプロイメントは、Herokuでは簡単です。 ほぼ即時で優雅なので、エンドユーザーには障害はなく、壊れたコードを展開してもテスト/継続的インテグレーションがパスしてもサイトが壊れない場合にのみ更新するように設定できます。

    また、ElasticBeanstalkを使用して自動デプロイメントを行うこともできますが、最初に設定する時間を1週間費やす準備ができています。つまり、ElasticBeanstalkがデプロイメントを処理する方法やロジックを構築する方法(CSSやJSなど)をデプロイしてビルドする方法を変更する必要がありますデプロイを処理するためにあなたのアプリに。

    EBの停止なしでシームレスに導入するためには、複数のインスタンスを実行する必要があることに気をつけてください.EBが新しいdynoをスピンアップし、それまでのすべての要求が処理されるまで古いサービスを処理します(削除します)。

    興味深いことに、複数のサーバーをEBで稼働させる場合のホスティングコストは、特にアドオンのコストを含めた場合、単一のHerokuインスタンスよりも安くて済みます。

具体的に質問されていないいくつかの他の問題は、他の回答によって提起されています:

  1. 生産と開発のために別のプロバイダを使うことは悪い考えです。

    私は人々がこれを示唆していることを凝縮している。 理想的にはコードは合理的なプラットフォーム上でうまく動くので、できるだけ移植性が高く、各ホスト上のソフトウェアのバージョンは大きく異なります。コードがステージングで実行されても、それが本番環境で実行されるわけではありません(例:Major Node.js / Ruby / Python / PHP / Perlのバージョンは、互換性のないコードを作成する方法が異なる場合があります。通常のテストカバレッジがあっても検出されない可能性があります。

    プロトタイプ作成、小規模なプロジェクト、マイクロサイトにHerokuのようなものを活用することが良いアイディアです。構成やメンテナンスに多くの時間を費やすことなく、物事を素早く構築して展開できます。

    環境全体を複製するコスト(データストア/アドオンなどのサードパーティサービス、SSLのインストールおよび設定など)を忘れることなく、本番環境と運用前の両方のインスタンスを実行するコストを考慮して、 。

  2. AWSを使用している場合は、BitnamiなどのベンダーのAWS事前設定インスタンスに注意してください。これらはセキュリティ上の悪夢です。 彼らは、説明では言及せずに、デフォルトでは、脆弱なアプリケーションが多数公開される可能性があります。

    代わりに、UbuntuやDebian(RPMサポートが必要な場合はCentOS)など、よくサポートされているメインストリームディストリビューションを使用してください。

    注:Amazonの製品には、RPMを使用するAmazon Linuxと呼ばれる独自のディストリビューションがありますが、EC2固有であり、サードパーティ/オープンソースソフトウェアではあまりサポートされていません。

  3. また、AWS(またはLightsail)でEC2インスタンスをセットアップし、flynnやdokkuなどで設定することもできます。複数のサイトを簡単に展開できます。多くのサービスを維持している場合や、新しいものを簡単にスピンアップすることができます。 しかし、それをセットアップすることは、Herokuを使用するだけの自動化ではなく、設定や管理に多くの時間を費やすことになります(AmazonクラスタリングとDocker Swarmを使用して展開すると、設定するよりも簡単です。 YMMV)。

私は、私が取り組んでいるプロジェクトのニーズに応じて、AWS ECインスタンス(単独でもクラスタでも)、Elastic Beanstalk、LightsailとHerokuを同時に使用しました。

私はサービスを構成するのに時間を費やすのが嫌いですが、私はHerokuの請求書を全部使って1年に何千もの費用を費やすことになり、AWSは費用のほんの一部を使い果たします。

tl; dr

お金が問題にならなかったなら、私はHerokuをほとんどの時間に使っていました。しかし、Herokuが提供しない柔軟性と高度なサービスが必要な複雑なプロジェクトにはAWSを使いたいと思っています。

私にとって理想的なシナリオは、ElasticBeanstalkがちょうどHerokuのようにもっと機能した場合です。つまり、構成が簡単ですばやく、展開メカニズムが優れています。

ほぼ now.shサービスの例はnow.shです。実際にはAWSをバックグラウンドで使用していますが、展開とクラスタリングはHerokuのように簡単に行えます(自動SSL、DNS、優雅な展開、管理)。

私はNode.jsアプリケーションとDockerイメージの両方のデプロイメントに非常に多くを使用しましたが、主な注意点はインスタンスが共有されていること(低いコストに反映されているもの)と現在は専用インスタンスを購入するオプションがないことです。 しかし、オープンソースのデプロイメントツール「今」を使用して、AWSとGoogle CloudおよびAzureの専用インスタンスにデプロイすることもできます。




Related