これはかなりロードされた質問です。私の一般的なアドバイスは、複雑さの管理に注意を集中させ、システムが有機的に成長できるようにすることです。
仮想化:
サーバーの無秩序な拡大を本当に避けたいのですが、最近ではすべてが仮想化されています。仮想サーバーをすばやく追加し、効率的に管理できるプラットフォームを選択してください。私が見た1つの傾向は、2つの(たとえば)AIXまたはVMWareクラスターがあり、1つは製品用、もう1つは非製品用です。非製品版は、すべての開発、テスト、ステージング環境で使用されます。これらの環境はWebサーバーやアプリケーションサーバーに最適ですが、私は、大きくなって成長している運用データベースをVMとして(少なくともWindows上で)配置しないようにしています。
データベース
これらは、他のサーバーとリソースを共有する必要があるときはいつでも簡単に手に負えなくなります。データベースは常に専用のOSで実行し、本当に正当な理由がない限り、アプリケーションやWebサーバーと共有しないでください。VMとハードウェアのどちらを使用するかが唯一の問題です。
たとえば、クラスター化されたソリューションに移行する必要が生じた場合でも、制限のないスケーラブルなインフラストラクチャが必要です。多くのデータベースはVMで問題なく機能しますが、VM環境で提供するのに都合のよいものよりも多くの馬力を最終的に必要とするいくつかのデータベースでは、代わりにrawハードウェアにそれらを配置したいと思うでしょう。
ウィンドウについて話していない場合は、これらのガイドラインの一部は関係ありません。たとえば、成長する大規模なデータベースをLPARとしてAIXハイパーバイザーに配置することは、一般的に受け入れられている手法です。
ストレージ
共有ストレージなしでは、実際の仮想化(VMモビリティとホストクラスタリング)はできません。製品、開発、テスト、QAサーバーはすべて、ストレージに対して同じように見えますが、製品に優先順位を付ける方法を見つけるために時間を費やすこともできます。たとえば、開発サーバーとディスク(RAIDセット、プールなど)を共有する負荷の大きいprodデータベースを持つことは非常に悪い考えです。Devは製品版と同じくらいハードディスクにヒットすることがありますが、最後に必要なのは、ある種のテストが本番稼働を遅らせている原因であるかどうかを判断することです。
ストレージを知っている人に座って、すべての潜在的なボトルネック(ポート、キャッシュ、コントローラー、ディスクなど)を分析させ、本番と非本番の間でこれらの可能な限り多くの競合を防ぐために最善を尽くします。
とはいえ、新しいパッチなどの影響を定量化するために、アプリケーションの人々が開発ベンチマークを実行する必要がある場合もあります。この状況では、同様の(または少なくとも定量的に異なる)量のストレージ馬力を提供できるようにする必要がある場合があります。