私は Java 開発者であり、AWS、Rackspace、Heroku をアプリの潜在的なクラウド プロバイダーとして検討しています。以前は従来の Web ホスト (仮想専用サーバー プラン) しか使用していなかったので、ちょっと圧倒されました。
私の理解では、クラウドを使用すると、仮想アプライアンス (アプリケーション サーバー、データベース サーバーなどのソフトウェア スタックが事前に構成された仮想マシン) を必要に応じて生成/停止できます。そのため、真夜中または休日で誰もアプリを使用していない場合は、実行中のインスタンスの数を減らしてお金を節約できます。しかし、土曜日の朝で負荷が危険なほどピークに近づいている場合は、新しいサーバーを起動して、アプリがクラッシュしないことを確認できます。
まず、私の理解が間違っていたり、間違っていたりする場合は、まず訂正してください!
私がクラウドについて多かれ少なかれ正しいと仮定すると、アプリの使用の急激な増加/減少/パターンを監視する独自のモニターを構築する必要があるのは理にかなっています (ネットワーク トラフィックと帯域幅に基づいていると思います!)。トラフィックが特定のポイントまで増加すると、より多くの VM をインスタンス化する必要があり、トラフィックが遅くなるとその逆になります。
JClouds ではこれを実行できるため、私のモニターは JClouds API を使用してサーバーを生成/停止します。
私が窒息しているのは、VM をいつスポーン/キルするかをモニターに伝えるためにどのアルゴリズム/式を使用すればよいかということです。基本的に、常に必要な "馬力" (VM) の 2 倍を確保する暫定的なアルゴリズムを作成しました。モニターは約 10 秒ごとに各ノードをポーリングし、システムの現在の負荷が特定のデルタによって変化したClusterResizer
場合、ノードを追加/削減する必要があるかどうかを判断することができます。
この動的なサイズ変更システムのアウトライン/スケルトンの設計に数時間を費やしましたが、あまりにも先を行く前に停止し、不必要なこと、間違っていること、または単純なことをしている場合に備えて、ここで健全性チェックを行いたいと思いましたクレイジー!
他のクラウド アプリはどのように VM を監視し、サイズを変更しますか? どのようなアルゴリズムやベスト プラクティスを理解しておく必要がありますか? 前もって感謝します!