Projecte

General

Perfil

Accions

Tasca #6117

tancat
FJ FJ

Minimitzar els accessos a disc de l'Apache via caché de miniatures

Tasca #6117: Minimitzar els accessos a disc de l'Apache via caché de miniatures

Afegit per Ferran Jorba fa més de 5 anys. Actualitzat fa aproximadament 5 anys.

Estat:
Tancada
Prioritat:
Alta
Assignat a:
Categoria:
Tecnologia
Inici:
03-12-2020
Data de venciment:
Paraula clau:

Descripció

Per solucionar la sobrecàrrega del DDD probablement caldrà aplicar diferents estratègies. Una d'elles seria minimitzar els accessos a disc del servidor Apache. Ara mateix cada petició de fitxers passa per aquestes capes:

  Navegador web
    |     ^
    v     |
  Apache Mompou
    |     ^
    v     |
  Client NFS Mompou
    |     ^
    v     |
  Servidor NFS VNX (Clariion)
    |     ^
    v     |
  Disc del VNX (Clariiion)

Tot plegat és molta feina per a Mompou. Si ens estalviéssim part de la capa final, Mompou ho tindria més senzill. Per exemple, si podem passar tots els fitxers de miniatures des de Mompou, amb alguna mena de caché sense haver de recórrer al Clariion, podriem fer:

  Navegador web
    |     ^
    v     |
  Apache Mompou
    |     ^
    v     |
  Disc del Mompou

Per exemple, el mes de novembre d'enguany, de les 21.547.264 peticions web, si les ordenem per tipus de fitxer i n'agafem les primeres, queden ordenades així:

  • 3.637.129 ico
  • 2.549.579 pdf
  • 1.432.247 gif
  • 1.078.229 png
  • 1.065.047 css
  • 825.317 js
  • 455.982
  • 409.366 jpg
  • 147.092 cur
  • 76.640 txt
  • 66.684 &sc=1&ln=ca
  • 60.208 info
  • 35.443 html
  • 31.372 htm
  • 30.151 &sc=1&ln=es
  • 29.515 /

Per tant, una estratègia seria minimitzar les més de tres milions i mig de peticions .ico, o les cinc milions si hi afegim els .gif (això seria una quarta part de les peticions mensuals!), que han de travessar totes les capes, i es puguin resoldre en el propi Mompou, amb o sense caché específic d'Apache.


Tasques relacionades 3 (0 obertes3 tancades)

relacionat amb DDD - Incidència #5771: Gateway errors al DDD: augmentar número de processos?TancadaFerran Jorba20-05-2020Accions
relacionat amb DDD - Tasca #5963: Treure el servidor MariaDB de MompouTancadaFerran Jorba02-11-2020Accions
relacionat amb DDD - Tasca #8600: Impedir que els robots facin cerques al DDDTancadaFerran Jorba30-07-202430-07-2024Accions

FJ Actualitzat per Ferran Jorba fa més de 5 anys Accions #1

  • S'ha afegit relacionat amb Incidència #5771: Gateway errors al DDD: augmentar número de processos?

FJ Actualitzat per Ferran Jorba fa més de 5 anys Accions #2

  • S'ha afegit relacionat amb Tasca #5963: Treure el servidor MariaDB de Mompou

FJ Actualitzat per Ferran Jorba fa més de 5 anys Accions #3

Aquesta estratègia es pot aplicar de vàries maneres. Una d'elles seria afegint-hi un software especialitzat que se situaria entre el navegador web i el nostre Apache. El més conegut és Varnish, però també hi ha altres solucions

En la situació actual, de final d'etapa amb l'Invenio 1.1.6, jo preferiria no afegir complexitat amb software desconegut que, a més, ens pot afectar la coherència de les estadístiques. Per tant, miraria de solucionar-ho només amb tècniques pròpies d'Apache. Alguns documents rellevants:

La nostra sort és que les miniatures són estàtiques, n'hi ha moltes, totes tenen la mateixa extensió .ico, i hi queben en el disc local de Mompou. Com a segon tipus de fitxer, jo hi posaria els .gif, que també en tenim molts i són el tercer tipus de fitxer.

La gràcia serà que hi siguin totes i que estiguin al dia.

De fet, una miqueta això ja ho fem amb les miniatures dels fitxers d'accés restringit. Com s'accedeix a aquestes miniatures, si no hi ha accés des de fora de la UAB? Per exemple, com podem veure la miniatura .ico del pdf https://ddd.uab.cat/record/224557, que des de fora de la UAB no es pot veure?

Doncs perquè n'hi ha una còpia al directori de miniatures que sí que es pot veure:

Per a totes les peticions de /uab/, la miniatura es serveix des de /min/. El problema és que la còpia al /min/ es fa una vegada cada dia. Com que són relativament pocs, no és un problema gaire visible, però això no ho podem fer per a tots els fitxers d'accés públic.

Ara mateix, l'operació de copiar a /min només els fitxers .ico del /uab triga un minut. Hauré de mirar què triga fer el mateix per a tots els fitxers i valorar posar-ho més sovint, cada hora o menys.

FJ Actualitzat per Ferran Jorba fa més de 5 anys Accions #4

FJ Actualitzat per Ferran Jorba fa més de 5 anys Accions #5

FJ Actualitzat per Ferran Jorba fa més de 5 anys Accions #6

De moment comencem amb el mod_expires, que no coneixia, i que proposa una solució interessant: que el caché el posi el client, no el servidor. Es tracta de dir-li al client (navegador web) que si ha rebut un determinat fitxer del servidor, no el torni a demanar durant un temps, per exemple un mes:

De moment ho activo a l'IFMuC per als fitxers ico, gif, css i js. Miraré el comportament abans de passar-ho a Traces i al DDD:

diff --git a/etc/apache/invenio-apache-vhost-ssl.conf b/etc/apache/invenio-apache-vhost-ssl.conf
index 4bbc567..f3f7a9d 100644
--- a/etc/apache/invenio-apache-vhost-ssl.conf
+++ b/etc/apache/invenio-apache-vhost-ssl.conf
@@ -108,8 +108,16 @@ WSGIRestrictStdout Off
        Alias /tmp/  /home/ifmuc/invenio/var/www/tmp/
        Alias /tmp   /home/ifmuc/invenio/var/www/tmp/

        AddType text/plain .dirinfo .dupdirs .dupfiles .errors .info .md5 .sha1 .stats .tab .urls
        AddCharset utf-8   .dirinfo .dupdirs .dupfiles .errors .info .md5 .sha1 .stats .tab .urls
+
+       <IfModule mod_expires.c>
+           ExpiresActive On
+           ExpiresByType image/vnd.microsoft.icon "access plus 1 month" 
+           ExpiresByType image/gif "access plus 1 month" 
+           ExpiresByType text/css "access plus 1 month" 
+           ExpiresByType application/javascript "access plus 1 month" 
+       </IfModule>

        <Directory /home/ifmuc/invenio/var/www/uab>
           Require ip 158.109.

FJ Actualitzat per Ferran Jorba fa més de 5 anys Accions #7

  • Estat ha canviat de Creada a En curs

Ferran Jorba va escriure:

De moment comencem amb el mod_expires, que no coneixia, i que proposa una solució interessant: que el caché el posi el client, no el servidor. Es tracta de dir-li al client (navegador web) que si ha rebut un determinat fitxer del servidor, que no el torni a demanar durant un temps, per exemple un mes:

Les proves amb l'IFMuC han anat perfectament bé, i per tant ho he aplicat a Traces i al DDD. Així és com ara arriben els tipus de fitxers afectats al client web:

$ HEAD https://ddd.uab.cat/pub/infpro/2020/221997/CSO2017-82277-R_LOCALCOM_SVT_SWE.ico
200 OK
Cache-Control: max-age=2592000
Connection: close
Date: Fri, 04 Dec 2020 05:45:37 GMT <----- Data de petició
Accept-Ranges: bytes
ETag: "a53e-5a442ee3809c0" 
Server: Apache
Content-Length: 42302
Content-Type: image/vnd.microsoft.icon
Expires: Sun, 03 Jan 2021 05:45:37 GMT <----- Expira en un mes!
Last-Modified: Mon, 27 Apr 2020 10:10:55 GMT
Client-Date: Fri, 04 Dec 2020 05:45:37 GMT
Client-Peer: 158.109.2.47:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=NL/ST=Noord-Holland/L=Amsterdam/O=TERENA/CN=TERENA SSL CA 3
Client-SSL-Cert-Subject: /C=ES/L=Cerdanyola del Valles/O=UAB-Universitat Autonoma de Barcelona/CN=*.uab.cat
Client-SSL-Cipher: TLS_AES_256_GCM_SHA384
Client-SSL-Socket-Class: IO::Socket::SSL

$ HEAD https://ddd.uab.cat/img/uab/ddd.css
200 OK
Cache-Control: max-age=2592000
Connection: close
Date: Fri, 04 Dec 2020 05:41:48 GMT <----- Data de petició
Accept-Ranges: bytes
ETag: "1d14-53d6b6858d340" 
Server: Apache
Vary: Accept-Encoding
Content-Length: 7444
Content-Type: text/css
Expires: Sun, 03 Jan 2021 05:41:48 GMT <----- Expira en un mes!
Last-Modified: Mon, 26 Sep 2016 16:13:25 GMT
Client-Date: Fri, 04 Dec 2020 05:41:48 GMT
Client-Peer: 158.109.2.47:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=NL/ST=Noord-Holland/L=Amsterdam/O=TERENA/CN=TERENA SSL CA 3
Client-SSL-Cert-Subject: /C=ES/L=Cerdanyola del Valles/O=UAB-Universitat Autonoma de Barcelona/CN=*.uab.cat
Client-SSL-Cipher: TLS_AES_256_GCM_SHA384
Client-SSL-Socket-Class: IO::Socket::SSL

Com a usuari, amb un navegador, la veritat és que les pàgines ja visitades ara es carreguen de manera molt més ràpida, sembla màgic. Quan hagin passat uns dies faré estadístiques de les peticions web segons el log d'Apache.

FJ Actualitzat per Ferran Jorba fa més de 5 anys Accions #8

  • Estat ha canviat de En curs a Tancada

De moment dono per bona aquesta solució, perquè ja fa uns dies que Apache no s'ha hagut de reiniciar per sobrecàrrega, llevat del dia 4, el de l'atac coreà del desembre:

Com que estic convençut que totes són complementàries, si n'afegim d'altres, benvingudes siguin, però aquesta va bé.

FJ Actualitzat per Ferran Jorba fa aproximadament 5 anys Accions #9

Hem sobreviscut sense despentinar-nos a l'atac xinès que hem tingut des del 18 de febrer fins el 10 de març. Que bé!

FJ Actualitzat per Ferran Jorba fa més d'un any Accions #10

  • S'ha afegit relacionat amb Tasca #8600: Impedir que els robots facin cerques al DDD
Accions

També disponible a: PDF Atom