2011-02-23 21 views
7

Estoy buscando guías, consejos o ejemplos de cómo equilibrar la carga de una aplicación de php. Mi configuración es Ubuntu 10.04 y PHP 5.3. Nunca antes he cargado servidores balanceados y estoy buscando cualquier ayuda que se ofrezca.¿Cómo equilibrar la carga de una aplicación php?

Actualización:
Es una aplicación web que se espera que tenga unos pocos cientos de usuarios que la usan al mismo tiempo. MySQL será la base de datos. Habrá sesiones usadas para los usuarios pero he escuchado que las sesiones no pueden ser llevadas a través de múltiples servidores. Habrá actualizaciones de contenido muy frecuentes. Habrá archivos, pero usaré un CDN para esos.

+1

Quizás agregue un poco de contexto por qué necesita esto en primer lugar y qué tipo de aplicaciones va a ejecutar y qué hacen (¿utiliza bases de datos, archivos, sesiones ... ¿Hay actualizaciones frecuentes de contenido? ¿Hay algún respaldo? ¿fin? etc. etc.) –

Respuesta

13

equilibrio de carga una aplicación web no tiene mucho que ver con la aplicación en sí, sino más con alojamiento e infraestructura. Sin embargo, todavía hay algunos puntos clave a los que debe prestar atención cuando construya una aplicación que se supone que tiene un equilibrio de carga. Éstos son algunos:

  • No utilice el servidor de estado. Lo que significa que no puede usar el objeto de sesión tradicional porque está almacenado en la memoria de la máquina local para que un objeto esté disponible en un servidor pero no en el otro
  • No utilice el disco para almacenar nada. La misma razón que la anterior. Puede escribir un archivo en el disco del servidor 1 e intentar leer en el servidor 2
  • En pocas palabras, debe evitar cualquier tipo de recursos que dependan del servidor. Si necesita usar algo como esto (servidor de estado, disco, etc.) debe almacenar un recurso compartido para que todas las máquinas de equilibrio de carga accedan a él

Si esto es un problema para una aplicación existente, por ejemplo, puede Esto se soluciona configurando afinidad en Load Balancer, lo que significa que todas las solicitudes que provienen de un usuario específico serán atendidas por el mismo servidor. Obviamente, este enfoque tiene el inconveniente de hacer que su aplicación sea menos escalable, ya que un servidor puede obtener más procesamiento que el otro.

Por lo tanto, con respecto al software para hacer el equilibrador de carga, no soy Linux, pero veo mucha gente hablando de Apache como WebServer y HAProxy como la aplicación de balanceador de carga.

Espero que ayude!

1

Hay clases de PHP que le permiten almacenar la sesión en MySQL.

http://php.net/manual/en/function.session-set-save-handler.php

me gustaría poner algo así como Nginx en el servidor front-end y el uso que para el equilibrio de carga. Detrás de eso, podrías tener tus dos servidores web e incluso usar nginx para servir tu contenido estático.

Detrás de tus servidores web tendrías tu mysql db.

He diseñado algunas redes que han recibido poco más de 1,000/imp/sec y comencé el diseño de red con esto. Después de que el tráfico aumentó, usualmente reduje la infraestructura a partir de ahí agregando más servidores web y más bases de datos de solo lectura y cambiando nginx con un par de F5.

Cuestiones relacionadas