Esta es una pregunta bastante cargada. Mi consejo general es centrar su atención en la gestión de la complejidad y permitir que el sistema crezca orgánicamente.
Virtualización:
Realmente desea evitar la expansión del servidor, y en estos días, todo está virtualizado. Elija una plataforma que le permita agregar servidores virtuales rápidamente, así como administrarlos de manera eficiente. Una tendencia que he visto es tener dos (por ejemplo) clústeres AIX o VMWare, uno para prod, uno para no prod. El que no es de producción se usa para todos los entornos de desarrollo, prueba y preparación. Estos entornos son perfectos para servidores web o servidores de aplicaciones, pero trataría de evitar poner grandes bases de datos de producción en crecimiento como VM (al menos en Windows).
Bases de datos
Estos pueden salirse de control fácilmente cuando necesiten compartir recursos con otros servidores. Siempre tenga bases de datos ejecutándose en un sistema operativo dedicado, nunca compartido con una aplicación o servidor web a menos que haya una buena razón para ello. Si usa una VM o hardware es la única pregunta.
Desea una infraestructura escalable que no lo limite si alguna vez necesita, por ejemplo, pasar a una solución en clúster. Muchas bases de datos estarán bien en una máquina virtual, pero para las pocas que eventualmente necesitarán más potencia de la que es conveniente proporcionar en un entorno de máquina virtual, deseará ponerlas en hardware sin formato .
Si no está hablando de Windows, algunas de estas pautas no serán relevantes. Es una práctica común aceptada poner grandes bases de datos en crecimiento como LPAR en un hipervisor AIX, por ejemplo.
Almacenamiento
No puede tener una virtualización real (con movilidad de VM y agrupación de host) sin almacenamiento compartido. Los servidores de producción, desarrollo, pruebas y control de calidad tienen el mismo aspecto para su almacenamiento, sin embargo, es posible que desee invertir algo de tiempo en encontrar una manera de priorizar su producción. Es una muy mala idea, por ejemplo, tener una base de datos prod fuertemente gravada que comparta discos (conjuntos de incursiones, grupos, lo que sea) con un servidor de desarrollo. El desarrollador puede golpear los discos con tanta fuerza como la producción, a veces, y lo último que necesita es averiguar si algún tipo de prueba es lo que está frenando su producción.
Pídale a alguien que conozca su almacenamiento que se siente y analice todos los posibles cuellos de botella (puertos, caché, controladores, disco, etc.) y haga todo lo posible para evitar la contención de la mayor cantidad posible entre prod y no prod.
Dicho esto, a veces las personas de la aplicación necesitan ejecutar puntos de referencia de desarrollo para ayudar a cuantificar los efectos de un nuevo parche o algo así. En esta situación, es posible que deba poder ofrecerles cantidades de potencia de almacenamiento similares (o al menos cuantificablemente diferentes).