web-dev-qa-db-ja.com

スケーリングとキャパシティプランニングのベストプラクティス:VMのみ?VM +コンテナ?コンテナのみ?クラスター?他に何か?

(すでに回答済みの同様の質問は見つかりませんが、私はフランス人の学生なので、良い言葉を使わないかもしれません;))
私が探しているものに最も近い答えは: スケーラブルなWebアプリケーションハードウェアトポロジのベストプラクティス しかし、すべてに答えるわけではありません

KVM VMを実行する小さなプライベートクラウド(Openstack)を構築しました。ほとんどの場合、ドメイン/ウェブサイトごとに1つVMを実行します。これは、数十のウェブサイトと一部のクライアントにも使用できます。
クラウド内で実行するものとEC2で実行するものを組み合わせて、「ハイブリッドクラウド」に進化できるかどうかをテストする予定です。ですから、私の「やり方」が私の使用に最も適しているかどうかを知りたいのです。
これらのVMはCoreOSを実行し、CoreOSは異なるDockerサービス(Nginx用に1つのコンテナー、pgsql用に1つのコンテナーなど)を実行します。 1つのサービスが何かに対して「短すぎる」ようになった場合は、より大きなVMを作成するか、古いVMをより大きなVMにコピーして古いサービスを削除するか、作成します。必要なサービス専用のVM(たとえば、より多くの接続を処理するためのNginx専用の2番目のVM)。

しかし、私は物事を間違ってやっていないのだろうかと思っています。
この「モデル」を使用することを選択したのは、異なるドメイン/クライアント間で強力な分離が必要だったためです。 Dockerで遊んで慣れること、そしてDockerがサービスを迅速にデプロイするための最も効果的な方法の1つであることがわかったためです。

むしろVMのみを使用する必要があります(したがって、コンテナーは使用しません)。サービスごとに1つのVM(1つのVMではなく) _ドメインごと)?
または代わりにコンテナーのみを使用して異なるサービスを分離し、それらすべてをノードで混合して実行する必要がありますか?さまざまなサービスやさまざまなクライアントの数十から数十のコンテナのように?次に、さまざまなドメイン/クライアントを効果的な方法で分離するにはどうすればよいですか?次に、これらのサービスをどのようにスケーリングしますか?ノードを追加するだけですか?
または、大きなVMまたはベアメタルマシンのクラスターを作成し、それらを使用して大きなCoreOSクラスターを作成する必要があります。ベアメタルノードを追加して成長するには?次に、コンテナの場合と同じ質問が適用されます。

私の質問があまりにも馬鹿げているか、初心者であるか、適していないように思われる場合は申し訳ありませんが、一歩下がるには遅すぎるときよりも、今すぐ質問することを好みます;)

どんな提案も歓迎します:)

Y

1
Yannovitch

特にこの種のシナリオでは、両方のVM およびコンテナを使用することはまったく問題ありません。

VMは、安価で高価な安全な分離レイヤーを提供します。-VMで優れたセキュリティを実現するために非常に苦労する必要がないため、労力が安価です。 -特に適度な量のRAMを必要とする小規模なサービスの場合、VMのオーバーヘッドが大きくなる可能性があるため、リソースが高価になります。

(「仮想化税」は小さな定数と見なすことができます。大きなサービスの場合、その定数はごくわずかですが、小さなサービスの場合、総フットプリントのかなりの部分になります。)

一方、コンテナーは、安価で効率的なソフトウェアの分離およびデプロイメント方法(バージョンの競合を心配せずに複数のコンテナーを並べてデプロイできるという意味で)を提供します。

さらに、ハイブリッドクラウドを実装する場合(つまり、プライベートクラウドからパブリッククラウドへの波及効果)、コンテナーは両方の環境を橋渡しする非常に簡単な方法であり、それらの違いを抽象化します。

私の個人的な戦略(私があなたのニーズを正しく理解していると仮定して)は、VMでテナントを分離し、単純なプライベートクラウド(OpenStackまたはその他)に依存し、コンテナーにデプロイし、それらのコンテナーをプライベートクラウドとパブリックの間で移動することです。必要に応じてクラウド。もちろん、リソース要件の変動に対応するために、(いずれかのクラウド上の)VMのサイズを変更することもできます。

1
jpetazzo