Speeding up chuza!
Olas, aquí berto de novo! Desta volta é para anunciar melloras no rendemento de chuza.
Mes a mes a audiencia de chuza sube, e con iso tamén aumentan os recursos que consume no servidor, tanto de carga como de transferencia. Este aumento no consumo de recursos afecta a todos os usuarios facendo que o tempo que tarda en acceder e mostrar cada páxina sexa maior, e como cada usuario accede a un bo número de páxinas en cada sesión un aumento de rendemento fará que a navegación por chuza sexa máis fluida, perdendo menos tempo en esperar e máis en facer o que faga cada un en chuza.
A carga do servidor
A carga é a cantidade de memoria e procesador que consume o servidor web e o servidor de bases de datos. Para que un servidor soporte mellor a carga so hai dúas opcións: mellorar o código da aplicación para que “cargue” menos ou mellorar a máquina para que soporte mellor a carga. Dende o último aumento de memoria fai uns meses a carga está bastante estabilizada e nunca chega a límites que afecten notablemente á navegación aínda que si que teño planeada para finais de ano unha revisión tanto do código como de viabilidade do servidor no que leva chuza dende que comezou.
Optimizando a transferencia
A transferencia é a cantidade de datos que se transmiten entre o servidor e a audiencia. Canto menor sexa a cantidade de datos que se transfiren en cada acceso a unha páxina por parte dun usuario máis rápido se mostrarán as páxinas. Chuza viña tendo uns consumos de ancho de banda diarios bastante elevados ultimamente, habia semanas que non baixaba dos 5Gb de transferencia diarios que:
- Facían máis lenta a páxina.
- A final de mes me chegaban unhas facturas de execeso de transferencia horrendas.
Para solucionar estes problemas puxenme a analizar o consumo e posibles solucións e finalmente cheguei a afrontar o problema por dúas frontes: por un lado o tráfico de páxinas e por outro o tráfico de imaxes (avatares, principalmente). As medidas que tomei foron estas, pode que non sexan as máis óptimas pero confío en que funcionen suficientemente ben:
- O consumo de ancho de banda en páxinas, aínda que máis reducido que o de imaxes puiden solucionalo facendo que o servidor enviara as páxinas comprimidas aos navegadores, para iso usei un módulo do apache2 que xa tiña que ter usado fai tempo: o mod_deflate, usando este sinxelo tutorial de Howtoforge (nunca me cansarei de recomendar esa web) en menos de 10 minutos xa estaba aforrando máis do 70% de transferencia en no acceso a cada páxina.
- Agora viña o gordo: o consumo de ancho de banda en imaxes. Se vos fixades cada páxina de chuza ten tropecentos avatares (quen comentou, quen votou, os listados) que, aínda que cada un pesa pouco, xuntos forman unha lexión que multiplica os accesos en cada carga de páxina e vai sumando Kilobytes de transferencia mentres se frotan as mans os tipos do servidor. Para solucionar esto decidin que tiña que sacar as imaxes do server a outro. Este server tiña que cobrar menos pola transferencia, ser rápido, fiable e ter un sistema sinxelo para que os dous servidores se puideran comunicar para transferirse entre eles as imaxes dos usuarios. Despois de moito mirar optei por Amazon S3, o servizo de almacenamento que ofrece a coñecida Amazon, que: é relativamente barato (non ten consumo mínimo, podedes comprobar o gasto nesta calculadora), extremadamente rápido e fiable, e pon a disposición dos usuarios unha API para poder comunicarse facilmente con el. So tiven que buscar un pouco atopei esta clase de php que me permitiu integrar facilmente a subida de imaxes de usuario aos servidores de Amazon. Rápido, limpo e sinxelo.
Pois nada máis, espero que notedes a mellora, como dato: o mes pasado chuza consumiu 115Gb de ancho de banda, dos cales máis ou menos 75Gb foron de imaxes e 40Gb de páxinas. Tan so coa compresión de páxinas aforraría 28Gb (o 70% do tráfico) que veñen sendo 30.000 millóns de bits. Supoñendo que a velocidade de acceso media a chuza é de 512Kbits/sec no mes pasado os usuarios de chuza teríamos aforrado 16 horas de espera mentres acaban de cargar as páxinas (iso si, repartidas entre todos)
Ata a próxima amigos!