Escalabilidad: ¿Cuál es la mejor manera de manejar un mes temporal de grandes picos de tráfico y solicitudes?

Como probablemente deduzca de las otras respuestas, la respuesta es “depende de lo que esté ralentizando su sitio”. Suponiendo que tiene una aplicación relativamente estándar, supongo que tiene algunos contenidos estáticos, algunos contenidos dinámicos y una base de datos.

Las CDN como CloudFlare o S3 / CloudFront son excelentes para acelerar los activos estáticos, pero rara vez son los cuellos de botella que hacen que su sitio se caiga. Típicamente es una de dos cosas. O el servidor no puede manejar el procesamiento del contenido dinámico (por ejemplo, PHP, Ruby, Node, Python) o está limitado por el número de conexiones simultáneas a la base de datos.

La forma más estándar de lidiar con los límites de contenido dinámico es escalar (no aumentar), es decir, usar más servidores. Los servicios de PaaS como AppFog, Heroku, Cloud Foundry hacen que esto sea muy fácil. Deberá asegurarse de que su aplicación no dependa de las cosas que escribe en el disco, ya que el disco no se comparte entre los diferentes nodos. Yo personalmente recomiendo AppFog porque obtienes una tonelada de recursos gratuitos y tienen grandes optimizaciones de rendimiento integradas. Lo uso para todos mis sitios. (Descargo de responsabilidad, solía trabajar en AF)

El otro cuello de botella común es la base de datos. Las bases de datos, especialmente las bases de datos compartidas, limitan el número de conexiones simultáneas que su aplicación puede hacer a la base de datos. El uso de una base de datos dedicada como Amazon RDS o un servicio como Xeround puede ampliar esto para que pueda manejar más conexiones.

Nota : Estas son soluciones generalizadas para su problema de escala. Algunos pueden requerir rediseñar su aplicación. Hay formas de optimizar su código.

Lograr cualquier escalamiento serio con una solución de caja negra única para todos, como un servicio de terceros que mencionas, sin modificar tu propio código, es un sueño imposible. No hay una respuesta fácil o única, pero la pregunta es lo suficientemente tentadora como para intentar responder de todos modos.

Básicamente, el problema se divide en tres partes (en orden de complejidad creciente):

1. Escalando vistas
2. Escala escribe
3. Procesamiento de datos a escala.

# 1 Vistas de escala

Este es probablemente el más sencillo y se reduce al almacenamiento en caché agresivo. Akamai, AWS CloudFront o CDN similares son sus mejores amigos allí. Y no estoy hablando de javascript, imágenes, css y otro contenido estático de almacenamiento en caché de CDN. Eso es obvio. Estoy hablando de almacenar en caché su contenido real (HTML).

Lo más importante para recordar: intente hacer que el HTML generado por el servidor sea lo más genérico posible. Por ejemplo: nunca haga nada específico del usuario en el código del lado del servidor que genere HTML. Si hace eso: se negará el lujo de almacenar en caché HTML en un CDN. Haga todo lo dinámico y específico del usuario en Javascript hablando de forma asíncrona con una API ligera del lado del servidor o use widgets JS de terceros (por ejemplo, Disqus para comentar).

Recuerde también que escalar no se trata de velocidad. Su sistema ya debería ser rápido para hasta 100 usuarios simultáneos. El escalado consiste en mantener el sistema rápido cuando el número de usuarios aumenta de 100 a 2,000,000+.

No se preocupe demasiado por el contenido obsoleto. Algún retraso siempre es aceptable. Incluso los principales sitios web de noticias almacenan en caché la mayoría de sus páginas (¡incluida la página de inicio!) Durante 10-30 segundos en CDN. Una vez más: se trata de escala, no de rendimiento, por lo que incluso 20 segundos de caché pueden ayudar mucho. Imagine cuántos usuarios servirá un CDN en lugar de sus servidores en incluso 20 segundos si tiene un tráfico enorme.

# 2 Escala escribe

Nunca, repita: NUNCA escriba algo sincrónicamente si desea escalar. Siempre pase las escrituras a través de una cola de mensajes para que pueda acelerar las solicitudes de escritura, suavizar los picos y proteger sus sistemas de fondo. Ser amigable con las colas de mensajes, la programación distribuida y asincrónica es la base de la escala.

# 3 Procesamiento de datos a escala.

Hay momentos en que: ha almacenado en caché todo lo que pudo almacenar en caché e hizo todo lo asíncrono que posiblemente pudo, pero simplemente está procesando demasiados datos. Aquí es cuando debe considerar el entorno virtualizado que puede escalar automáticamente (por ejemplo, una flota de servidores EC2). Sin embargo, esta es la más complicada de todas las tareas de escalado. No puede simplemente tomar el código escrito sin la virtualización en mente y volcarlo en algo como EC2.

Gran cantidad de servidores = muchas fallas. A mayor número de servidores, más frecuentes las fallas. Son solo estadísticas + el hecho de que si obtienes muchos servidores, probablemente sean productos básicos, no los más confiables. Su código debe estar escrito de una manera extremadamente tolerante a fallas para lograr esto e incluso los sistemas que usa deben seleccionarse con un ojo: ¿crecen horizontalmente y se escalan automáticamente? Cualquier punto único de falla se convierte en una gran vulnerabilidad aquí. Evite los sistemas que se adhieren a la topología maestro + esclavo sin la elección automatizada de un nuevo maestro si el actual falla.

Hola, noté que mencionaste Cloudflare en tu pregunta, así que quería darte un pequeño desglose de cómo se puede configurar Cloudflare para mitigar mejor los picos de tráfico.

Por defecto; Cloudflare solo almacenará en caché contenido estático como CSS, JavaScript e imágenes, no HTML. Sin embargo, es posible habilitar el almacenamiento en caché del contenido HTML para reducir grandes cantidades de carga de su servidor de origen.

HTML estático

Si su sitio contiene HTML estático (es decir, sin inicios de sesión, formularios de comentarios, etc.), la configuración de Caché todo en una opción de regla de página también incluirá el almacenamiento en caché de HTML. La opción Regla de página de caché de todo está disponible en todos los tipos de planes.

Con HTML almacenado en caché en Cloudflare’s Edge, no será necesario realizar ninguna solicitud adicional a sus servidores de origen mientras el HTML esté en nuestro caché. Incluso puede indicarle a Cloudflare que mantenga un archivo en nuestro caché perimetral por hasta un mes.

Sitios dinámicos (WordPress, Magento, etc.)

Con los sitios dinámicos, es importante que no guarde en caché la información de los usuarios (páginas de inicio de sesión, rellenos de formularios de comentarios, carritos de compras, etc.). En otras palabras, cuando un usuario inicia una sesión, ya no desea que se almacenen en caché, solo desea almacenar en caché las vistas de página anónimas .

Para hacer esto, Cloudflare puede simplemente pasar por alto el caché cuando se envía una cookie desde el navegador o su servidor web. En otros casos, Cloudflare almacenará en caché completamente su HTML en nuestro Edge. Tener que producir el mismo contenido de solicitud tras solicitud es lo que a menudo elimina los sitios web dinámicos cuando están bajo carga, el almacenamiento en caché de dicho contenido garantiza que su sitio pueda permanecer en línea.

En sitios dinámicos, esto tiene un gran aumento de rendimiento y confiabilidad y puede reducir enormemente el impacto de carga en los servidores de origen cuando su sitio se vuelve viral o llega a la primera página de Reddit.

Tenga en cuenta que la opción de regla de página “Omitir caché en cookie” solo está disponible para clientes del plan Business y Enterprise.

¿Cómo uso esto?

  • Almacenamiento en caché de vistas de página anónimas
  • ¿Cómo guardo en caché HTML estático?
  • Almacenamiento en caché de HTML estático con WordPress / WooCommerce
  • Almacenamiento en caché de HTML estático con Magento (versiones 1 y 2)

Si espera grandes picos en cualquier momento, entonces su mejor opción es optar por Cloud Hosting con asignación elástica de recursos. Con un proveedor de Cloud Hosting de calidad con asignación de recursos a pedido, sus sitios web tendrán todos los recursos del sistema necesarios para atender los grandes picos de tráfico que experimentan de vez en cuando. Hay una buena cantidad de proveedores de alojamiento en la nube que ofrecen excelentes servicios de alojamiento en la nube a precios costosos y asequibles. Los proveedores de alojamiento en la nube como Amazon, Google Compute Engine, RackSpace, etc. son excelentes para servicios de alojamiento en la nube de calidad, pero son bastante caros en comparación con otros proveedores confiables de alojamiento en la nube en lo que respecta a los precios. Otros proveedores confiables de alojamiento en la nube como DigitalOcean, Vultr, LiquidWeb, etc.son buenos ejemplos de servicios de alojamiento en la nube confiables y asequibles. Para obtener una lista de algunos de los proveedores de alojamiento en la nube más confiables, visite Mejores proveedores de alojamiento web en el servidor de nube y elija un proveedor confiable de alojamiento en la nube.

Y si está buscando otros tipos de servicios de alojamiento web como alojamiento compartido, alojamiento de revendedor, alojamiento VPS, alojamiento de servidor dedicado, etc., visite Comprar alojamiento y elija un proveedor de alojamiento web confiable para sus necesidades.

Me quedaría con CloudFlare para el CDN y otros beneficios de proxy, pero parece que necesita una máquina dedicada o dos, dependiendo de su tráfico. Soy un gran admirador de ServerBeach, y los uso para todas mis máquinas dedicadas.

Dicho esto, necesita más detalles para que podamos obtener una mejor respuesta: qué tipo de aplicación está alojando, con qué software, cuántas páginas / visitas / lo que sea por día / minuto / segundo / lo que sea …

Con estas métricas podemos juzgar mejor cuáles serán sus necesidades esta vez. ¡Feliz de ayudar!

Se puede hacer una sugerencia después de decirnos qué aplicación está ejecutando y cuál es el punto crítico. No complicar nada con un CDN, hasta que pueda tomar la mayor parte del golpe directamente con los servidores de aplicaciones.

Bueno, si puede permitirse una máquina adicional, probablemente podría configurar Apache Traffic Server como un proxy inverso. ATS escala realmente bien.