Elecciones y Web Hosting
El Domingo pasado Joel me llamó para pedirme que le averiguase dónde debÃa votar, ya que no le funcionaba la conexión a Internet de la casa. Al igual que como hubiera hecho la mayorÃa de ustedes, entré en Google Argentina y busqué “dónde votar“.
Los primeros tres resultados eran:
- http://www.elecciones2007.buenosaires.gov.ar/
- http://www.tusbuscadores.com/elecciones/
- http://www.sitiosargentina.com.ar/notas/octubre-2005/donde-votar.htm
Obviamente, reconocà al primer resultado como el “oficial”, y al resto como simples “repetidoras” con links a los sitios oficiales. Asà que sin dudarlo, entré al primero: http://www.elecciones2007.buenosaires.gov.ar/.
Para mi sorpresa, me encontré con el siguiente mensaje:
Wooah! Lo primero que pensé es que no me gustarÃa estar en los zapatos del hostmaster a cargo del sitio. Realmente, sufrà por él… Luego me puse a hacer algunas cuentas rápidas, y resultó obvio, un sólo servidor no resiste a cientos de miles de personas intentando averiguar dónde deben votar, todas en una franja de tiempo bastante reducida (sábado por la tarde / domingo por la mañana).
Me pregunto cómo será el “efecto elecciones” comparado con Digg o Slashdot… Creo que la mayor diferencia estarÃa en que el origen de las visitas en época de elecciones es mayormente local, generando conexiones de menor duración gracias a la latencia reducida. Igualmente, debe haber sido un infierno.
A los pocos minutos el servidor volvió a estar en lÃnea, y felizmente pude hacer mi consulta. Pero no dudo que les haya pasado lo mismo varias veces a lo largo de todo el dÃa.
El sitio parecÃa estar armado pensando en el tráfico que recibirÃan, todo hecho en CSS, muy liviano. Para hacer las consultas usaban PHP, seguramente un servidor MySQL, y un captcha para validar la consulta:

Pero cuando hay un sólo servidor para tantas consultas simultáneas, pueden pasar dos cosas dependiendo de cómo esté configurado el servidor. En general, suceden las dos, y en este desgraciado orden:
- El servidor tiene un lÃmite de conexiones simultáneas básico, predefinido por la configuración. Digamos, 256.
- Llegan mil visitas en un lapso de 10 segundos. El servidor no puede recibirlas a todas, asà que las que pasen la número 256 reciben un mensaje de error 503.
- ¡Caramba! El administrador recibe decenas de llamadas a su celular. Entra en la consola del servidor, temblando de miedo, rezándole a todos los dioses que lo dejen sobrevivir a esta crisis.
- Al poco tiempo descubre el desperfecto: ¡EUREKA! El servidor tiene un lÃmite muy bajo de conexiones simultáneas. Asà que lo sube a 512 y le dice “Já! Tomá!”. Reinicia al servidor y pone en su browser www…. Funciona. Carga muy rápido. SonrÃe. Suspira relajado.
- Pero pasan algunos minutos, y vuelven a recibir otra tanda de mil visitas en menos de 10 segundos. El administrador repite los pasos que lo salvaron por primera vez, sin ver que lo que está haciendo va a generar una gran reacción en cadena que no va a poder frenar.
El servidor puede procesar hasta X peticiones simultáneas con un buen rendimiento. Pasado ese lÃmite, lo único que se consigue aumentando la cantidad de pedidos simultáneos es que todo funcione lento, y que el servidor quede con miles de conexiones “abiertas”. Como sabiamente dijo Joel ayer, “es como remar en dulce de leche”.
Y las consecuencias, obviamente, son peores. Pasado ese lÃmite, se genera una bola de nieve que no se puede parar, hasta que el servidor queda estancado (colgado), y hay que tomar otras medidas para hacerlo volver en sà (léase, pegarle un botonazo).
¿Cómo evitarlo?
Todo depende de dos factores:
- Hardware: tener un esquema de servidores ideado para recibir picos de tráfico, como un grid o un cluster. Al distribuir la carga entre una docena de servidores, se multiplica la capacidad por la cantidad de servidores en la red. Nuestros nodos suelen tener entre 4 y 8 servidores de procesamiento, con 2 gateways que distribuyen inteligentemente la carga.
- Software: optimizar al máximo el código. Hacer contenido estático. Enviar el tráfico estático a servidores más livianos (como lighttpd). Optimizar las consultas SQL. En ciertos casos en que las consultas son siempre las mismas, habilitar un servidor memcache.
Steve Souders del “Exceptional Performance Team” de Yahoo! dió una brillante presentación con consejos útiles para sitios de alto tráfico. Para los que quieran profundizar en este tema, les recomiendo verla, está muy buena.
Moraleja: cuando sepan que su sitio va a recibir miles de visitas en un lapso corto de tiempo, estén preparados
Buenos Aires (011) 5254.0544
Madrid: (+34) 911895144
DF: (+52) 5540001022
Caracas: (+58) 2123357630
Lima: (+51) 17201710
Miami: (+1) 3055078868

11 Comentarios
Les voy a prestar mi servidor Pentium 122 mhz con openbsd para que puedan consultar un par de visitas mas.
Me parece que el hostmaster de Fotolog deberÃa leer este post!
Tomado hace unos minutos je..
Interesante. Igual, sin pretender desmerecer a los empleados de IT en entidades públicas, generalmente todo lo que hacen, lo hacen mal “desde el vamos”.
Primariamente por estar habituados a viejas tecnologÃas y carecer, en muchos casos, de los conocimientos adecuados (léase: entraron al cargo no por concurso, sino por palanca), y en segundo, pero no menos importante, por las propias limitaciones que pueden tener a la hora de implementar la tecnologÃa en si, donde los presupuestos contradicen ampliamente el concepto práctico “de lo que deberÃa de ser”.
Personalmente, tengo pésimas experiencias con nuestro e-government y una estadÃstica personal claramente probatoria: de 5 organismos públicos contactos en estos últimos meses, sólo uno respondió. Más curioso aún si me pongo a pensar que ese único organismo fue el Instituto Antártico Argentino y, para mi sorpresa, fue en menos de 24hs de efectuado mi envio. Policia Federal, Policia Bonaerense, Regimiento de Granaderos a Caballo y Ejército Argentino, por ejemplo, jamás dieron una respuesta o siquiera un autoresponder.
Estamos en el siglo 21 y tenemos internet. Sólo que todavÃa no sabemos, como paÃs, y muchas veces como capitalistas, ni el completo potencial de ésta o su apropiada aplicación.
Cuestión de seguir educándonos con los que más saben mientras.
¡Un abrazo!
La presentacion de yahoo es excelente, justo la habia leido hace un par de dias.
No dejen de descargarla porquer no tiene desperdicio.
Hola Amigos, les cuento algo, el otro dia hablando con la gente del NIC me comentaron que por ejemplo tiemen Pentium I en la terminales windows y que son solo 8 personas para manejar 500 llamados telefonicos y fax por dia, o sea que como decia Nicolas y German, no solo es problema de servidores sino tambien de personal y de recursos para cada uno de ellos.
La idiosincracia Argentina es eso, resistirse de manera proverbialmente terca, a toda mejora, progreso o actualización, ya que eso significa esfuerzo …
Está bueno mostrar un problema real y ver la solución que darÃan ustedes en un caso similar…
No sé, me gustó…
¿Qué harÃamos nosotros? ¿Además de transpirar, llorar y empezar a correr por los pasillos del datacenter? jeje…
Desde el 98 que estamos en esto. Creo que si no hubieramos armado el grid, a esta altura ya estarÃamos muertos de stress
El famoso “grid”, que soluciona este (y otros) problemas, está formado por nodos de entre 5 y 10 servidores: 2 proxys transparentes, 4 a 7 web servers y 1 file server. Entonces, cuando llega un pico de visitas, se te pueden saturar o colgar los servidores web, pero:
1) Nadie se entera, porque los proxys dejan de derivarles tráfico.
2) Podés ampliar on-demand, conectando otro y reconfigurando.
3) Tenés más “aire”. No es lo mismo 1 que 4.
El único caso en que te pase lo mismo con el grid es que varios clientes en un mismo nodo se pongan de acuerdo y tengan un pico ENORME de tráfico. Puede pasar, pero…
Saludos!
disculpen, pero con su famoso “grid” no da el error de servidor no encontrado, pero si da un error de proxy, y muchas veces para mi gusto. Aunque soporte no lo quiere reconocer cuando le mandas un email con la captura de pantalla… esto es solo una critica constructiva, no se enojen
saludos
Lucas, el “Proxy Error” en general es resultado de algo más básico detrás (un script que da timeout, alguna regla de htaccess que genera problemas, etC), querés enviarme los datos de tu consulta y lo vemos directamente con un programador ?
Saludos!
Seria algo parecido a un ataque DDos??
Que Grosos!! son mis idolos!!! no sabia que tenian este Blog!!.. Mi sueño es en un futuro poder ser un oponente digno de ustedes.. je.. aunque me falta mucha experiencia todavia.. recien estoy reuniendo de a migajas todo lo que necesito para montar mi propia empresa de Hosting.. je.. Les dejo un Abrazo!