¿Una aplicación web de 3 niveles necesita tener cada nivel en un servidor diferente?

Bueno, diría que los contras son más complejos que probablemente no sean necesarios.

La parte frontal en su mayor parte se puede obtener desde un CDN estático y se sirve en el navegador. Eso definitivamente sería una experiencia rápida.

El backend y la separación de la base de datos son buenos con el tiempo, no lo necesita de inmediato. Pero si diseña su aplicación de modo que la base de datos esté en otro servidor, y la aplicación pueda funcionar con 2 bases de datos replicadas … le hará la vida más fácil cuando necesite escalar.

En cuanto a la seguridad, no soy un experto, así que no me cites en nada de esto. Si separa la capa de base de datos de la aplicación, la seguridad podría ser mejor desde el punto de vista de que tiene menos servidores dev / sysadmins en contacto. En una arquitectura básica, creo que si su servidor backend está comprometido, no sería tan difícil comprometer su servidor DB, o al menos obtener acceso a todos los datos.

No es necesario por definición. Los servidores en estos días también son más a menudo servidores de nube virtual, contenedores o agrupaciones de contenedores que ofrecen un servicio con mucha automatización.

Dependiendo de la escala que necesite, es posible que desee empaquetar todo en un servidor (que puede tener una IP o múltiples). Puede ejecutar contenedores de ventana acoplable que se comunican entre sí para que aparezcan como configuraciones separadas. Puedes tener tres o más instancias con las cosas hablando sobre la red real.

Puede ejecutar el frontend y el backend de un servidor y tener el SQL administrado por su proveedor (por ejemplo, Google Cloud SQL o Amazon RDS). Eso te ahorrará tiempo configurándolo y manteniéndolo. Es probable que sea más estable, ya que saben lo que están haciendo.

En definitiva, muchas opciones. Para un sitio web simple que necesita poca escala, mantendría las cosas simples para que sirvan para ese propósito.

No tienen que serlo, es muy común tenerlo todo en un servidor. Pero puede ser ventajoso ejecutar su base de datos en un servidor separado. De hecho, si su sitio se vuelve lo suficientemente grande, a menudo es necesario ejecutar su base de datos en varios servidores. La base de datos consume una gran cantidad de memoria y E / S, por lo que generalmente verá una buena mejora en el rendimiento ejecutándola en varios servidores remotos y eliminándola del servidor “principal”, que está ocupado procesando todas sus demás solicitudes.

En cuanto a sus activos front-end, solo use un CDN para entregarlos, y estará listo.