2010-04-15 10 views
15

Actualmente estoy creando un sitio web para un proyecto social en Suiza.Cómo escalar una aplicación PHP (servidores, mysql, memcache)

Y antes de que haya un desbordamiento de usuario, quiero preparar la aplicación a escala.

He respondido muchas preguntas, pero quedan algunas.

Explico lo que quiero hacer.


Primera

en el beginnning, la aplicación tendrá un solo servidor (tiempo corto) con el DNS, PHP, MySQL, datos y Memcache.


Segunda

continuación, voy a dividir en dos

  1. DNS, Mysql, Memcache
  2. de datos, PHP

Tercera

Aquí está el problema, no sé cómo hacerlo exactamente aquí para que la aplicación funcione correctamente.

que podía hacer:

  1. delantera: equilibrador de carga, Memcache, DNS
  2. Web 1: PHP, DATOS
  3. Web 2: PHP, DATOS
  4. Mysql

Este sería el esquema, todas las sesiones de PHP se mantienen en la base de datos.

PERO, ¿cómo sincronizo los datos? ejecuto un Rsync para mantenerlos actualizados. ¿Los pongo en un disco aparte (disco de red) para estar seguro? pero en este caso, ¿cómo puedo hacer en caso de que el usuario cargue?

y si el sitio web tiene más éxito y tenemos que ir en estructuras más grandes, ¿no creará alguna latencia en las actualizaciones?

o sería una buena idea ir directamente a los servicios web de Amazon?

algunas informaciones Uso codeigniter como Framework. Uso linux como servidor web (distribución no elegida ahora, pero debe ser Debian)

Gracias de antemano por sus respuestas.

+0

http://stackoverflow.com/questions/189903/scaling-solutions-for-mysql-replication-clustering – zaf

+0

http://highscalability.com/ – David

+0

AWS ofrece algunas excelentes herramientas para dividir sus servicios: entrega de contenido y S3 para elementos estáticos, RDS y SimpleDB para bases de datos distribuidas, y EC2 para recursos de servidores escalables. –

Respuesta

15

De acuerdo con Wikipedia, Suiza tiene 4,6 millones de hablantes de alemán, 1,5 millones de hablantes de francés y .5 millones de hablantes de italiano, romanche y otros idiomas. Entonces, sospecho que encontrará que un solo servidor se ajustará a sus necesidades. Adivina qué porcentaje de la población visitará tu sitio cada mes o cada día para tener una idea de lo grande que puedes llegar antes de toparte con problemas de escalado.

Por lo tanto, no creo que deba preocuparse por la ampliación aún. Bonificación: el tiempo que no pasa preocupándose por este problema, puede usarlo para resolver otros problemas para sus usuarios.

+1

De acuerdo, siempre debe medir el rendimiento y luego eliminar los cuellos de botella como los ve. Dicho esto, sería una buena idea planear para múltiples servidores web si este sitio va a tener que escalar rápidamente. Una vez que pueda escalar a dos, gran parte de la tubería estará en su lugar para escalar a más ... –

+0

El OP necesita usar un cluster FS y obtener sesiones de la base de datos. ¿Cuántas consultas se necesitan para producir una sola página para un usuario conectado? –

+1

-1 ... la respuesta no prueba la necesidad/falta de necesidad de escalar, sino que sugiere una hipótesis que debe probarse (es decir, que no se necesita escalar). Puede haber otras razones (que no sean la cantidad de usuarios) que requieran escalado. –

0

Recuerde que puede montar/compartir carpetas.

¿Qué datos te estarías sincronizando?

Puede considerar poner datos en la máquina de la base de datos u otra máquina. La máquina db suele ser una buena idea al principio, ya que es probable que tenga un IO mayor que un servidor web normal.

Probablemente sea una buena idea configurar una SAN o similar para que sus datos permanezcan en un solo lugar. Varias copias de datos son difíciles de manejar. Seguir esta ruta significa que puedes poner los archivos db allí también.

8

Hay unos caminos comunes a escala de servicios web hacia arriba, con el fin de que sitios como Flickr y Facebook parecen utilizar: servidores

  • divididos sobre la base de conceptos (API, inicio de sesión, los archivos multimedia, anuncios, páginas estáticas, páginas dinámicas)
  • Divide bases de datos basadas en conceptos que no necesitan ser JUNTADOS (inicios de sesión, informes a largo plazo, datos de página, etc.)
  • Compila/optimiza tu PHP y otros recursos (sprites, compilados css, zend)
  • Agregar caché (front end, back end)
  • Añadir delegación (round robin, etc.)

Pero, antes de escalar, mida. Conjunto de pruebas, calcule su capacidad y no optimice antes de hacerlo.

2

veo algunas cosas cuestionables:

  • tiene un servidor SQL, y va a almacenar las sesiones en una base de datos en un sitio donde se espera un volumen muy alto. ¿Cuántas consultas se necesitan para producir una sola página si alguien está conectado y cuál es la ralentización esperada cuando finalmente emplea la replicación de MySQL?

  • Si se utiliza un clúster FS, todo se 'mantendrá' sincronizado. No terminará con la compilación A en el servidor web 1 mientras se produce la compilación B en el servidor web 2. Si realmente esperas mucho tráfico, en el tiempo que lleva cargar un cambio, sincronizar todos los nodos, simplemente cabreas a miles de personas.

He desplegado aplicaciones que se ejecutan en clústeres mediante OCFS2 con más de 40 nodos sin problema, y ​​OCFS2 no es exactamente la 'mejor' FS clúster disponibles. Consulte Lustre y considere mantener las sesiones en el disco.

Cuestiones relacionadas