El patrón de arquitectura subyacente es "arquitectura compartida-nada". La idea es construir las partes más utilizadas de la arquitectura de una forma que pueda distribuirse y que los compañeros distribuidos no necesiten saber nada sobre otros compañeros, por lo que no necesitan comunicarse entre sí. De esa manera, pueden escalarse agregando otros pares.
Normalmente, esto requiere algún tipo de enrutamiento del tráfico (equilibrio de carga) para alimentar los componentes compartidos y cierta persistencia y/o sincronización de estado.
La arquitectura "clásica" para esto es uno o más balamcers de carga que distribuyen el tráfico a varios servidores de aplicaciones de "nada compartido" que se ejecutan en una base de datos común. Normalmente, el hardware del servidor de aplicaciones es bastante barato y el hardware de la base de datos es uno o dos planchas grandes dependiendo de la carga.
En estos días, cada vez más soluciones también cortan la base de datos en pedazos para escalarla. Eventualmente, esto lleva a bases de datos distribuidas y fragmentadas, donde existen varios nodos db y cada nodo contiene solo un subconjunto de los datos.