システムコンテナは実際に何を提供しますか? それらはどこで使用すべきですか?

オペレーティングシステムコンテナーとも呼ばれるシステムコンテナーは、仮想マシンによく似ています。 従来の仮想マシンとの最も重要な違いは、ハイパーバイザーの代わりに、名前空間を使用して、仮想化とリソースによる分離のためにオペレーティングシステム(通常はLinux)のカーネルのリソースを制限することです。



画像



コンテナ仮想化テクノロジーの出現以来、ユーザーは、従来のハイパーバイザーと比較して仮想環境の最高のパフォーマンスと密度に魅了されてきました。 そして今日、コンテナインフラストラクチャが重要な負荷にも対応する価値をすでに実証している場合、どのアプリケーションがコンテナでの作業から最も大きなメリットを得ることができるかについて話し合うことは理にかなっています。



コンテナ、仮想マシン、サーバー-誰が高速ですか?



マーケティングリーフレットでは、コンテナは「物理サーバーと同じくらい高速」であることがよくわかります。 一方で、これは現実に近い。少なくとも仮想マシンと比較して、仮想化とコンテナの分離が動作するために最低限の物理サーバーリソースを必要とするからである。



ただし、この一方的なステートメントでは、セットの1つの要素のみが考慮されます。 たとえば、状況によっては、コンテナーと仮想マシンは、それらが実行されている物理サーバーよりも優れたパフォーマンスを示すことがあります。 物理サーバー上で単純に実行されている同じアプリケーションの複数のコピーが、複数のコンテナまたは仮想マシンにロードするときよりもパフォーマンスが低いが、内部にアプリケーションが1つしかない場合を確認しました。



同様の結果は、コンテナまたは仮想マシンの同一メモリの重複排除技術など、多くの要因に関連しています。 ディスクキャッシュの効率とNUMAの局所性(メモリが不均一ないわゆるアーキテクチャ)-仮想化によりコンテナを1つのNUMAノードにバインドでき、結果としてパフォーマンスが向上する場合。



さらに、最新のハイパーバイザーは、特にプロセッサーレベルで実装されたハードウェアサポートにより、VMにサービスを提供するためにハイパーバイザーによって実行される追加の手順の数が少ないため、プロセッサーに比較的小さな負荷を作成します。 そのため、ハイパーバイザーが正しく構成された仮想マシンで別のコンピューターでアプリケーションを実行する場合、CPU、メモリ、データストレージ、ネットワークパフォーマンスなどのすべてのカテゴリで違いはほとんどありません。



ただし、実際の状況については説明していません(コンピューターで1つの仮想マシンを起動することは、サーバーではなくデスクトップコンピューターのシナリオであるため)。このように仮想、コンテナー、および物理的な負荷の動作を比較することは正しくありません。 しかし、考慮された例は、仮想マシンとコンテナのパフォーマンスが「純粋な鉄」のパフォーマンスに非常に近いことを示しています-それはすべて条件に依存します。 しかし、これはもちろん、コンテナと仮想マシンがどのタスクにも同等に適していることを意味するものではありません。 そして、これを示すいくつかの例があります。



実際の条件



画像



以下に、パフォーマンステストのグラフを示します。このテストでは、一連のアプリケーションを起動する仮想サーバーのグループをいくつか作成し、それぞれ独自の負荷(いわゆるConsolidation Stack Unit(CSU))を使用します。 グループ内の各サーバーは、1秒あたりのトランザクション数などの結果を提供します。 次に、このデータを要約して、各仮想化テクノロジーに共通の結果を取得し、これらのアプリケーションが同じハードウェアで実行されているが、異なる仮想化ツールを使用している状況を比較します。 この場合、仮想マシンとシステムコンテナの機能を比較し、CSUの数を増やすと、さまざまな負荷レベルでこれらのテクノロジーの動作を比較する機会が得られます。



ご覧のように、ピークパフォーマンス、コンテナおよび仮想マシンが非常に近い結果を示すまで、パフォーマンスの差はパーセント単位に制限されます。 ただし、完全なプロセッサ使用率になると、違いが明らかになります。 中央プロセッサに空きサイクルがない場合、アプリケーションに影響を与えずにハイパーバイザーにサービスを提供するための時間を割り当てることができないため、仮想マシンエコシステムのパフォーマンスはコンテナエコシステムより早く成長しなくなります。 その後、次のことが起こります。仮想マシンは、システムメモリを最初に使い果たします。 事実は、VMはハイパーバイザーの「ブラックボックス」であり、コンテナーの場合、コンテンツは透過的であり、オペレーティングシステムは未使用のメモリを使用し、重複(メモリに繰り返し読み込まれたファイルのコピー)を削除できます。 したがって、コンテナは、仮想マシンとは異なり、CSUの数をさらに増やしてもパフォーマンスが低下することはありません(確かに、一定の限度まで)。



ここに別のテストがありますが、違いはさらに明白です。 いわゆる「DVD-store」シナリオはvConsolidateの負荷の性質を連想させますが、作業はe-storeアプリケーションで行われます。



画像



ここでは、特定のアプリケーションによって説明される、さらに顕著な違いを確認します。 もちろん、すべての場合において、コンテナと仮想マシンの違いがそれほど顕著ではありません。 仮想マシンと比較してコンテナのパフォーマンスが向上する要因に、さらにいくつか追加できます。



第一に、コンテナは文字通り一瞬で可能な限り速いシステム起動を提供します。 そして、これは、常に起動、破壊、再作成されるマイクロサービスにとって非常に重要です。 また、この要因は、細かな負荷に対してプラスの効果があります。その中で、負荷を実行して小さな問題を解決できます。



第二に、Virtuozzo OSシステムコンテナには独自の「pfcache」機能があります。 簡単に言えば、システムはメモリへのロード時に異なるコンテナからの同一ファイルの結合を提供します。 その結果、全体的なRAM消費が減少し、キャッシュの改善によりI / Oパフォーマンスが向上します-キャッシュはファイルのコピーを少なく保持する必要があるため、システムはより多くの一意のファイルを保持できるため、ファイルへのアクセスが高速化されます。



しかし、すべてのコンテナが同じというわけではありません。 特に、テストによると、Virtuozzo 7システムコンテナーは、他のLinux仮想化ソリューションと比較して最大密度を示します。これは、以前のバージョン(Virtuozzo 6)よりも数パーセント高く、KVMベースの仮想マシンよりも約2倍です。 これは私たちにとって非常に重要です-プラットフォームのパフォーマンスは、お客様が他のプラットフォームではなくVirtuozzoを選択する主な理由の1つです。 数千のサーバーのサイトに関しては、数パーセントが深刻な量になる可能性があります。したがって、私たちの目標は、Windowsを含むすべてのアプリケーションとシステムで常にピアよりも優れたパフォーマンスを示すことです。



現実のシナリオ



システムコンテナ、特に新しいコンテナVirtuozzo 7を使用すると最大のメリットが得られるいくつかのシナリオがあります。



シナリオ1.サーバーが最大負荷で実行されている場合、特にプロセッサリソースの使用率だけでなくRAMも100%に近づいている場合、コンテナは非常に役立ちます。 実際、これはデータ分析システムまたは情報のバッチ処理を開始する際の非常に典型的なケースです。 また、ピーク時の負荷に対して予備の生産性を残さない場合、コンテナは利用可能な機器を最大限に活用するのに役立ちます。



シナリオ2.同じまたは類似のアプリケーションの複数のコピーを実行します。 この場合、pfcacheはメモリを解放し、I / Oを最適化することにより、エコシステム全体のパフォーマンスを大幅に改善できます。



シナリオ3.マルチスレッドWebサーバーを起動するとき、およびさまざまな仮想マシン用に多数の仮想プロセッサ(物理数を大幅に超える)を作成するとき、コンテキストの絶え間ない変化が発生します。 小さなユーザーリクエストを処理し、プロセッサを異なるVMの処理タスクに切り替えると、従来のVMの場合、リソースを消費し、パフォーマンスが低下します。



シナリオ4.多数の小さなタスクが存在し、同時に作業し、リソースを奪い合う。 この場合、各仮想マシンは独自の追加メモリロードを作成します(カーネルお​​よびハイパーバイザー構造のロード用)。 そして、個々のプロセスが多いほど、OSコンテナを使用するメリットは大きくなります。



効率に焦点を当てる



すべての場合において、コンテナーが基本的な利点を提供するわけではありませんが、そのタスクの範囲では、コンテナーは仮想マシンを備えたハイパーバイザーの機能を本当に大幅に上回ります。 マイクロサービス、マルチコンポーネントWebアプリケーション、データ分析タスク、および粒度と負荷の高いその他のアプリケーションに役立ちます。



さらに、Virtuozzo Containersのパフォーマンスを継続的に改善し、バージョン7では同じ機器でのコンテナー密度とパフォーマンスの両方を改善しました。 Virtuozzoソリューション用にLinuxカーネルを更新すると、最初はライブコンテナ移行用のCRIUや、サービスを停止せずにカーネルを更新するためのKpatchなどのツールを構築できました。 システムコンテナの利点として、テクノロジー全体として、今日では、新しいユニークな機能が追加されており、実際のビジネス上の問題に対するさらに興味深いソリューションとなっています。



All Articles