php apache bandwidth slashdot

php - ¿Cómo puedo detectar y sobrevivir siendo "Slashdotted"?



apache bandwidth (30)

¿Cuál es una buena manera de sobrevivir picos de tráfico anormalmente altos?

Mi pensamiento es que, en algún momento, mi sitio web debe cambiar temporalmente a un modo de "ancho de banda bajo": cambiar a páginas HTML básicas, gráficos mínimos, deshabilitar widgets que puedan cargar innecesariamente la base de datos, y así sucesivamente.

Mis pensamientos son:

  • Monitorea el uso
  • Monitorear ancho de banda
  • Solicitudes de monitor / minuto

Editar: estoy familiarizado con opciones como el almacenamiento en caché, el cambio a contenido estático o una red de entrega de contenido, y así sucesivamente como medio para sobrevivir, por lo que tal vez la pregunta se centre más en cómo uno detecta cuando el sitio web está a punto de sobrecargarse. (Aunque las respuestas sobre otros métodos de supervivencia son, por supuesto, más que bienvenidas). Digamos que el sitio web ejecuta Apache en Linux y PHP. Esta es probablemente la configuración más común y debe permitir que la cantidad máxima de personas obtenga asistencia de las respuestas. Supongamos también que las opciones costosas como comprar otro servidor y el equilibrio de carga no están disponibles. Para la mayoría de nosotros, al menos, una mención en Slashdot va a ser una ocurrencia única en la vida, y no es algo en lo que podamos gastar dinero preparándonos para .


  1. No le des a nadie la URL
  2. Construye algo tan inútil que si la regla 1 se rompe nadie vendrá de todos modos.

  1. instale munin para controlar el consumo de carga / memoria, etc. y notifique sobre sobrecargas.
  2. instale monit para reiniciar apache2 si falla
  3. instalar nginx como interfaz apache2, reducirá masivamente los requisitos de memoria bajo carga pesada

¡Ponlo en la nube!

Esto probablemente no sea relevante para blogs personales, etc. pero para sitios más grandes, el alojamiento en la nube resolverá esto. Amazon EC2 por ejemplo, una cosa sobre esta estrategia es que le costará una tonelada de dinero.

En una escala más pequeña, usar una CDN para todas sus imágenes / contenido estático podría ayudar un poco también, una vez más evaluar el precio es importante. Amazon S3 es el CDN del que escucho más.


¡Usa el almacenamiento en caché!

Si está usando WordPress (por ejemplo), puede usar algo como WP-Super-Cache . Si usa PHP de forma regular, todavía hay varias opciones que puede usar, incluido memcache . O simplemente puede usar el caché de estilo de proxy de calamar regular.

Cualquier almacenamiento en caché que uses ayudará a proteger tu sitio (o slashdot / digg-proof) :-)


.htaccess:

RewriteEngine on RewriteCond %{HTTP_REFERER} slashdot/.org [NC] RewriteRule .* - [F]


Asegúrese de que sus páginas sean compatibles con los encabezados Last-Modified & If-Modified-Since y / o ETag & If-None-Match. Con estos, puede evitar muchos cómputos y transferencias totalmente.

Busque HTTP condicional GET para obtener más información.


Asegúrese de que todas las páginas que cree sean estáticas, sin base de datos, y no use imágenes.

En realidad, este lugar no está haciendo ESO mal.


Aumente el nivel de almacenamiento en caché de la base de datos para que el contenido pueda ser un poco más desactualizado pero a un acceso más rápido. Naturalmente, esto solo se aplica si el contenido no tiene que ser 100% consistente.


Auto-redirigir a Coral CDN, a menos que la solicitud sea de coral cdn.


Caché ... difícil. Registre los hits, y si ocurre un pico, escriba una copia completamente estática de la página que está siendo golpeada, luego publíquela. Cortar las consultas DB de 100 a 2 con un buen sistema de almacenamiento en caché puede sobrevivir a una barra oblicua débil, pero tener cualquier consulta de DB resultará en un sitio muerto bajo una carga seria para la que no está preparado.


Creo que la premisa es incorrecta: realmente quieres que te marquen como una bala, de lo contrario no tendrías un sitio web en primer lugar. Una pregunta mucho mejor es ¿cómo manejas el tráfico extra? E incluso eso son realmente dos preguntas:

  1. ¿Cómo gestionas técnicamente la carga adicional del servidor?
  2. ¿Cómo saluda a los nuevos usuarios, de modo que con suerte puede conseguir que algunos de ellos se queden?

Datos de caché.

Los viajes innecesarios a la base de datos para mostrar algo que se muestra igual cada carga es lo que mata a un servidor. Escribe su salida en un archivo y úsala en su lugar. La mayoría de los CMS y marcos tienen incorporado el almacenamiento en caché (pero tienes que activarlo), pero la implementación de la caché no es la tarea más desafiante.


Hay varias maneras en que esto se puede hacer, o al menos ayudar. Busque en Google "a prueba de barras" y encontrará varios de ellos:

  • Slashdot a prueba tu servidor con FreeCache - Boing Boing
  • Simple Thoughts Blog ahora es prueba de Slashdot

etc.



La verdadera pregunta es "¿Cuál es la forma más efectiva de ser Slashdotted?"

Si se trata de un problema real, redirija el tráfico a mi sitio.


Los basicos:

  1. No intente alojar sitios de alto volumen en Windows a menos que sea un verdadero gurú de Windows. Se puede hacer, pero es un problema de tiempo versus costo.
  2. Use contenido estático (es decir, sin consultas a la base de datos) donde sea que pueda.
  3. Obtenga información sobre los encabezados de control de caché y úselos correctamente para imágenes y otros activos estáticos.
  4. Por lo menos, use Apache, pero si puede, use lighttpd u otro servidor web de alto rendimiento.

Las respuestas reales:

  1. Conoce realmente tu SQL y pasa tiempo analizando consultas lentas. La mayoría de las cargas de página no deberían requerir más de un segundo de consultas directas.
  2. Determine dónde está realmente su carga. Si se trata de un sitio multimedia pesado, considere alojar contenido en otro lugar (como Akamai u otro servicio). Si se trata de un sitio con muchas bases de datos, considere la replicación.
  3. Sepa qué tipo de replicación funcionará para usted. Si tiene un sitio de lectura pesada, la replicación maestro / esclavo estándar de MySQL debería estar bien. Si tienes muchas escrituras en marcha, necesitarás algún tipo de configuración de varios maestros, como MySQL Cluster (o investigar la replicación en cascada o en cascada).
  4. Si puede, evite llamar a PHP, es decir, tener una copia estática (HTML) en caché de la página (que es lo que hacen la mayoría de los complementos de caché de Wordpress). Apache es mucho más rápido al servir archivos estáticos que incluso el script PHP de hello world más simple.

Nadie ha mencionado el equilibrio de carga ... haproxy, etc. La optimización, el almacenamiento en caché y el balance de carga deberían sobrevivir a casi cualquier cosa. Dicho esto, no estoy seguro de si está detrás de un equilibrador de carga;)


No escriba contenido ni proporcione un servicio que pueda atraer a geeks;)


Nunca se vuelva popular.

Si bien eso funcionará, no es realmente útil. Lo que necesita es infraestructura que puede escalar muy poco. Algo como Google Gears o los servicios web de Amazon parece ideal para esto, ya que incluso Slashdot no va a abrumar a Google o Amazon. Si quieres tu propio servidor, asegúrate de que tu proveedor de red no te corte en ningún límite preestablecido de ancho de banda. Compre suficiente hardware para que no se esfuerce solo para llevar su tráfico normal sin holgura para manejar los picos repentinos.


Para los sitios que experimentan un alto tráfico, Akamai es una buena solución para hacer que el sitio sea rápido, extraordinariamente escalable y confiable a pesar de su propia infraestructura. Akamai es un servicio (no gratuito) que almacenará en caché su sitio en diferentes lugares del mundo. En mi último trabajo, nuestro catálogo de comercio electrónico fue almacenado en caché a través de ellos y nuestros servidores podrían fallar y nadie lo sabría a menos que intentaran agregar a su carrito. Además, hicimos que nuestros servidores de imágenes cayeran una vez y el almacenamiento en caché de Akamai nos salvó de nuevo.


Reescribo todas las URL referidas por varios sitios populares para ser redirigidas a través de coralCDN.

Un ejemplo para Apache:

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTP_USER_AGENT} !^Googlebot RewriteCond %{HTTP_USER_AGENT} !^CoralWebPrx RewriteCond %{QUERY_STRING} !(^|&)coral-no-serve$ RewriteCond %{HTTP_REFERER} ^http://([^/]+/.)?digg/.com [OR] RewriteCond %{HTTP_REFERER} ^http://([^/]+/.)?slashdot/.org [OR] RewriteCond %{HTTP_REFERER} ^http://([^/]+/.)?slashdot/.com [OR] RewriteCond %{HTTP_REFERER} ^http://([^/]+/.)?fark/.com [OR] RewriteCond %{HTTP_REFERER} ^http://([^/]+/.)?somethingawful/.com [OR] RewriteCond %{HTTP_REFERER} ^http://([^/]+/.)?kuro5hin/.org [OR] RewriteCond %{HTTP_REFERER} ^http://([^/]+/.)?engadget/.com [OR] RewriteCond %{HTTP_REFERER} ^http://([^/]+/.)?boingboing/.net [OR] RewriteCond %{HTTP_REFERER} ^http://([^/]+/.)?del/.icio/.us [OR] RewriteCond %{HTTP_REFERER} ^http://([^/]+/.)?delicious/.com RewriteRule ^(.*)?$ http://example.com.nyud.net/$1 [R,L] </IfModule>


Sé que con Digg puedes contactarlos y solicitarles que incluyan una lista negra en tu sitio. Probablemente puedas hacer lo mismo con Slashdot.


Simplemente no hay forma de saber si su sitio web sobrevivirá o no a cargas pesadas a menos que lo someta a pruebas de estrés. Use algo como siege y vea dónde se encuentran sus problemas de rendimiento. ¿Crecen en la memoria demasiado rápido? ¿Se empieza a ralentizar con un montón de conexiones simultáneas? ¿Comienza a tomar una eternidad para acceder a la base de datos?

Una vez que sepa dónde están los problemas de rendimiento, entonces se trata de deshacerse de ellos. Desafortunadamente, es difícil entrar en más detalles que eso sin saber más acerca de su situación particular, pero tenga en cuenta que usted está hablando de optimizaciones aquí. Por lo tanto, solo debe actuar cuando SABE que hay problemas de rendimiento.

Y yo diría que no necesariamente te estás preparando para un evento único en la vida. Todavía existen ataques de DOS, por lo que es bueno tener preparaciones en su lugar, incluso si su sitio no se corta.

Lo único que se me ocurre en la cabeza es que te ayudará en casi todas las situaciones si copias tu contenido. Eso ahorrará mucho ancho de banda y todos los navegadores modernos lo admitirán sin demasiado problema de rendimiento.


Sobre la supervivencia tienes razón: cambiar o redirigir el enlace slashdotted a una página html estática sin gráficos. Es posible que incluso desee poner esta página en otro servidor web, por lo que su servidor original no tomará demasiada carga.

Usaría una redirección temporal para esto y eliminaría la redirección cuando el tráfico desapareciera.

Pero cómo detectar esto, ¡esto también me gustaría saber! ¿Solo contar los golpes en los últimos segundos podría no ser suficiente?


También puede usar Nagios para monitorear el estado del servidor. En función de sus requisitos, en determinadas condiciones, puede activar un archivo SQL existente para cambiar los modos de su sitio web.

Por ejemplo, agregue "UPDATE settings_table SET bandwidth = ''low'';" en ese archivo SQL y ejecútelo en mysql y haga lo contrario cuando las condiciones vuelvan a la normalidad.


Una palabra: Knipex


Vale la pena mencionar que el almacenamiento en caché inteligente y los modos de bajo ancho de banda serán inútiles si simplemente no tienes suficiente ancho de banda en tu conexión, así que asegúrate de que la conexión a tu servidor sea lo suficientemente grande. No lo aloje en su conexión DSL doméstica, por ejemplo.

Hablo por experiencia de haber sido desviado. No es divertido cuando no puedes acceder a Internet en absoluto porque miles de personas están tratando simultáneamente de descargar fotos de una computadora que tu compañero montó dentro de una parrilla George Foreman. Ninguna cantidad de firewall te salvará.


almostfreespeech.net es una semicubeta, por así decirlo, y ayuda mucho en situaciones como esta. Como otros mencionaron anteriormente, el almacenamiento en caché en capas ayuda mucho. Extraiga trozos de información de memcached en lugar de la base de datos, tenga un proxy inverso (o un proxy inverso distribuido también conocido como CDN, Panther Networks es barato) frente a usted.


Here''s un artículo bastante extenso pero altamente informativo sobre la supervivencia de "flash multitudes".

Aquí está su escenario para la situación que abordan sus soluciones propuestas:

En este documento, consideramos la cuestión de escalar a través de los ojos de un personaje que llamamos el innovador de garaje. El innovador de garaje es creativo, técnicamente inteligente y ambicioso. Tiene una gran idea para Next Big Thing en la web y la implementa utilizando algunos servidores adicionales que se sientan en el garaje. El servicio está en funcionamiento, atrae nuevos visitantes de vez en cuando y obtiene algunos ingresos escasos de publicidad y suscripciones. Algún día, tal vez, su sitio llegará al pozo. Tal vez llegue a la portada de Slashdot o Digg; tal vez Valleywag o el New York Times lo mencionarán.

Nuestro innovador puede obtener solo una oportunidad de publicidad generalizada. Si eso sucede, decenas de miles de personas visitarán su sitio. Dado que su idea es tan novedosa, muchos se convertirán en clientes generadores de ingresos y se referirán a sus amigos. Pero una multitud flash es notoriamente voluble; el resultado no será tan idílico si el sitio falla bajo su carga. Muchas personas no se molestarán en regresar si el sitio no funciona la primera vez. Aún así, es difícil justificar el pago de decenas de miles de dólares por los recursos, en caso de que el sitio experimente un pico repentino de carga. Las multitudes repentinas son tanto la ruina del innovador del garaje como su objetivo.

Una forma de salir de este enigma ha sido habilitada por la informática de utilidad contemporánea.

El artículo luego propuso una serie de pasos que el innovador de garaje puede tomar, como el uso de redes de entrega de almacenamiento y la implementación de bases de datos altamente escalables.


netstat -plant | awk ''$4 ~ /:80/>/ {print}'' | wc -l

Esto le mostrará todas las conexiones al servidor Apache. Puede crear un script cgi que calculará el número total de conexiones al servicio Apache y emitirá una advertencia una vez que alcance un determinado umbral. Qué hacer en ese punto es otra pregunta.

Espero que tu servidor esté preparado.