Como mantener arriba un sitio web PHP/MySQL con miles de visitas

Manuel Lemos, de la archiconocida PHPClasses, ha redactado un artículo con muy buenos consejos para mantener un sitio web con miles de visitas y que esté basado en PHP/MySQL.

Me he permitido resumir aquí el artículo por lo útil que es, añadiendo algunos consejos:

  1. Evita conectar a las bases de datos cuando no sea necesario:
    Muchos websites presentan ciertas partes de una web de forma estática o donde se podría evitar el uso de la base de datos, en estos casos lo mejor es evitar hacer uso de ella cuando no sea necesario.
  2. Cachea las páginas:
    Cuando un archivo recibe miles de visitas en una hora para servir el mismo contenido generado a partir de una base de datos, lo mejor es tenerlo cacheado con sistemas como Filecache.
  3. Evita personalizaciones inútiles:
    Una de las ventajas de servir sitios web dinámicos es que el usuario puede cambiar completamente el orden de las diferentes informaciones en una página web. En este caso lo mejor es ofrecer ciertos valores (unos 5) de personalización, como plantillas. De esta manera se podrá cachear dependiendo de cierto grupo de usuarios.
  4. Cuidado con las listas de correo:
    Imáginate: necesitas enviar semanalmente un newsletter a unos 500.000 usuarios. No incluyas en cada email información como “Estimado (xxx), para darte de baja envia un email a unsuscribe-xxx@newsletter.web.com”. Lo único que haces es sobrecargar la base de datos y ralentizar el proceso. También procura seleccionar los campos mínimos de la DB.
  5. El operador “like” es mortal:
    Esto va por experiencia propia: Usar like para buscar en una base de datos es simplemente mortal, en cuanto recorres mas de 5.000 registros ve comprando un MySQL load-balanced con 10 servidores o usa FULLTEXT.
  6. Tantas consultas a la base de datos no es bueno:
    Un website con unas 10.000 descargas, 50.000 usuarios online, 120 descargas cada minuto. Lógicamente, hay un contador de descargas, que loggea cada usuario. En MySQL, existe un índice que ha de ser actualizado a cada actualización de la DB. Por lo tanto, con ese número de descargas y suponiendo que se vacia cada mes, teniendo a los 15 días unos 50.000.000 registros (wow!), vas a aburrir a tus usuarios: minuto y medio esperando a que se actualize el índice es simplemente… aburrido. ¿Solución? guarda todos estos datos en un fichero o tabla temporal y actualiza la “otra” tabla cada hora con un cron-job: programa las tareas pesadas.
  7. Evita el spam:
    Akismet, Dave’s spam karma y otros más ofrecen sistemas anti-spam. Ponlos a prueba, te quitarán dolores de cabeza, pero no te olvides de aplicar el punto anterior. Haz un checkeo programado o a cada envio, dependiendo de tu DB.
  8. No uses PHP como CGI!
    Si quieres usar 10 servidores balanceados para tener sólo el PHP con 50.000 visitas, cargalo como CGI. Si no, cargalo como modulo de apache o como FastCGI en el caso de que no se pueda hacer como modulo de apache. ¿La razón? que PHP como CGI crea varios modulos, es como si abrieses y cerrases una aplicación a cada visita, y cuando son varias, el tema se complica.
  9. Mueve los elementos estáticos a otro servidor multi-hilo:
    Si necesitas mostrar cierta cantidad de elementos estáticos, como javascripts’, imágenes, html, css, muevelos a un servidor con un buen caudal y buenos discos, y sobre todo que sea multi-hilo. Y para esto, no hace falta tanta capacidad de procesamiento. (Nota mental: horror, no metas PHP en un servidor multi-hilo).
  10. Pero… ¿qué es un servidor multi-hilo?
    Un servidor multi-hilo permite atender alrededor de 15 consultas por segundo sin ningún tipo de problema. Por desgracia, software como PHP no es estable en este tipo de servidores. Aunque con FastCGI sobre multi-hilo puede ser bastante eficaz.
  11. Comprime las páginas que envies:
    Mod_Gzip y ob_gzhandler son tus amigos. Utilizalos.
  12. Usa maquinas separadas, o particiones separadas:
    Si no estamos hablando de algo gigantesco, si no de algo medio, lo mejor es distribuir MySQL, Apache y el correo en diferentes discos duros, o particiones, que tengan una rápida velocidad de acceso. Y si no, usa diferentes máquinas, aunque eso sería, como bien dicen, la hostia en verso.
  13. Haz load-balancing:
    Algo drastico es esto, pero algo a considerar. Cuando has aplicado todo lo anterior y ves que llegas al límite, informate y pon en marcha varios servidores que cumplan todo lo mencionado antes.

Fuente: PHPClasses

Un comentario en “Como mantener arriba un sitio web PHP/MySQL con miles de visitas

Los comentarios están cerrados.