Lo más común en las pequeñas aplicaciones que recién se lanzan es el uso de una solución LAMP, que comporta un servidor Linux, Apache, MySQL y PHP.

En cuanto crecen hay que re-escalarlas o volver a programarlas usando una infraestructura diferente. Por eso quería dar un repaso a las soluciones para hacer crecer una gran aplicación.

Primeramente hay que escalar lo que es el servidor de ficheros web, puesto que es prácticamente impensable ir modificando un fichero por cada servidor. Como primer recurso se suele poner en marcha un filer que aloja todos los ficheros y realiza las correspondientes copias de seguridad (incluidos ficheros de MySQL, PHP y contenido estático).

Más tarde se puede implementar una solución independiente de sincronización automática entre un servidor master que aloje los ficheros y un resto de slaves que sincronize con el principal.

Luego hay que escalar el sistema de base de datos, esto suele más “doloroso”. Aunque en la mayoría de aplicaciones existen ciertos puntos a favor…

En primer lugar, la mayoría de conexiones a la base de datos suelen ser consultas (y no actualizaciones ni inserciones). Las inserciones son una mínima parte de las instrucciones enviadas a la base de datos.

Aquí podemos emplear el esquema básico de MySQL de un servidor master y de luegos unos “slaves” o servidores esclavos que tendrán una replica exacta del contenido del master, con la pega de que no podremos hacer inserciones ahí.

Si se trata de mostrar una portada, listar unos datos o ver el perfil de un usuario, en la gran mayoría de los casos no es necesario realizar inserciones con lo que se puede mantener un sólo o una serie pequeña de masters donde se insertarán los datos y luego todo un “equipo” de servidores “slave” donde se realizarán el resto de consultas, es decir, las de selección.

Para los filers se puede usar NFS, y en el caso de preferir un almacenamiento local sincronizado se puede usar entonces un proceso de Rsync programado (Cron, claro).

Volviendo a MySQL, basta con darse una vuelta por la documentación donde lo dejan bastante claro, yo lo llevo implementando para pequeños downtimes del servidor de bases de datos, que por ahora tiende a ser 0.

Ya contaré más, que seguro que algo me he dejado…