2010-07-10 12 views
5

Me he estado preguntando por un tiempo; ¿cómo los sitios web como el código de Facebook pueden tener múltiples servidores?Escribir código de varios servidores

¿Cómo puede tener en cuenta el código de que varios servidores ejecutarán el mismo código y ganarán al agregar más?

¿O el servidor web puede tratar con esto independientemente del código?

Respuesta

4

Compartiendo y creando redes. El código 'debería' ser el mismo para un servidor o varios.

Puede compartir datos a través de bases de datos, memoria con cosas como Memcache, la carga con un equilibrador, etc. Si se especializa en servidores como Google (algunos realizan búsqueda de URL, algunos almacenan datos, algunos procesan números, etc.) hardware a mano puede ser mejor utilizado.

El código puede usar lógica de despacho (normalmente abstraída a través de una API) para que funcione igual si hay un servidor o millones de ellos.

IPC (Inter Process Communication) puede habilitarse en red y permitir una vinculación 'más estrecha' de los servicios. Google incluso tiene un proyecto protocol buffer para ayudar con esto.

Básicamente, los servidores deben compartirse para obtener beneficios reales (más allá de la conmutación por error/copia de seguridad), el código debe usar un nivel de abstracción para ayudar a compartir. El intercambio real generalmente usa la lógica Round-Robin o Map/Reduce.

3

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.

Cuestiones relacionadas