tipos sistemas segun qué horizontal escalable escalabilidad definicion cluster autores aplicaciones analisis php design amazon-ec2 load-balancing

php - sistemas - qué es escalabilidad horizontal



Escalabilidad 101: ¿cómo puedo diseñar una aplicación web escalable usando PHP? (2)

¿Has considerado jugar primero con máquinas virtuales? Puede ejecutar 2-3 máquinas virtuales en su máquina local y configurarlas como lo haría con los servidores reales, simplemente no podrán manejar los niveles reales de tráfico. Si todo lo que está buscando es la experiencia de aprendizaje, podría ser una forma ideal de hacerlo.

Estoy construyendo una aplicación web y tengo un par de preguntas rápidas. Por lo que aprendí, uno no debería preocuparse por la escalabilidad al construir inicialmente la aplicación y solo debería comenzar a preocuparse cuando el tráfico aumenta. Sin embargo, al ser esta mi primera aplicación web, no estoy seguro de si debería adoptar un enfoque en el que diseñe las cosas de una manera ad-hoc y luego las "corrija". He estado leyendo historias sobre cómo las personas comienzan con una aplicación que recibe millones de usuarios en una semana o dos. No es que vaya a enfrentar la misma situación, pero no puedo evitar preguntarme, ¿cómo lo hace esta gente?

Actualmente, compré una cuenta de alojamiento compartido en Lunarpages y eso me ayudó a comenzar a construir y probar la aplicación. Sin embargo, estoy interesado en aprender a construir la misma aplicación de una manera escalable utilizando la nube, por ejemplo, Amazon EC2. Desde mi entendimiento, puedo ver un par de componentes:

  • Hay un equilibrador de carga que primero recibe solicitudes y luego decide dónde enrutar cada solicitud
  • Esta solicitud es manejada por una réplica de servidor que luego procesa la solicitud y actualiza (si es necesario) la base de datos y devuelve la respuesta al cliente
  • Si se recibe una solicitud similar, se activa un mecanismo de caché como memcached y devuelve objetos del caché
  • Un blackbox que maneja la replicación de la base de datos

Específicamente, estoy tratando de hacer lo siguiente:

  • Configuración de un equilibrador de carga (mi tarea reveló que HAProxy es uno de estos equilibradores de carga)
  • Configurar la replicación para que las bases de datos se puedan sincronizar
  • Usando memcached
  • Configurar Apache para que funcione con múltiples servidores web
  • Aplicación de partición para usar Amazon EC2 y Amazon S3 (mi aplicación es algo que necesitará gran cantidad de almacenamiento)
  • Finalmente, ¿cómo puedo evitar quemarme cuando uso los servicios de Amazon? Debido a que esta es solo una fase de aprendizaje, probablemente pueda hacerlo con 2-3 servidores con un simple balanceador de carga y replicación, pero hasta que quiera evitar pagar un montón de dinero accidentalmente.

Puedo encontrar recursos sobre temas individuales pero no puedo encontrar algo que comience desde una perspectiva general. ¿Alguien puede ayudarme a comenzar?


Personalmente, creo que debería considerar cómo se escalará su aplicación inicialmente, ya que de lo contrario se encontrará con problemas en el futuro.

No estoy diciendo que necesites construirlo inicialmente como un sistema de servidores múltiples, pero si crees que necesitarás hacerlo más tarde, ten en cuenta las preocupaciones ahora.

En mi experiencia, esto incluye cosas como:

  • Sesiones A menos que utilice el equilibrio de carga ''pegajoso'', tendrá que tener alguna forma de compartir el estado de la sesión entre los servidores. Esto probablemente significa almacenar datos de sesión en el almacenamiento compartido o en un DB.

  • Carga de archivos y replicación. Si permite que los usuarios carguen archivos, o si tiene un CMS que le permite cargar imágenes / documentos, debe tener en cuenta el hecho de que estos archivos también deberán encontrar su camino en otros nodos de su clúster. Sin embargo, si ha bajado por la ruta de almacenamiento compartido mencionada anteriormente, esto debería cubrirla.

  • Escalabilidad de DB Si está utilizando servidores de bases de datos tradicionales, es posible que desee pensar en cómo implementará la escalabilidad en ese nivel. Esto puede significar que codifique su aplicación para que use una cadena de conexión para las lecturas y otra para las escrituras. Entonces, es libre de implementar la replicación con un nodo maestro manejando las inserciones / actualizaciones en cascada de los cambios para leer solo los nodos que manejan la mayor parte del trabajo.

  • Middleware. Tal vez desee seguir la ruta de implementar algún tipo de solución de middleware orientada a mensajes para transferir por completo las funciones de lógica de negocios, esto le dará un gran nivel de flexibilidad en la forma en que desea escalar esta capa de lógica de negocios en el futuro. Aunque inicialmente esto supondrá una gran complicación y no generará grandes ganancias.