Consenti ai tuoi utenti di svolgere il tuo lavoro di back-end

In Wikia stiamo attualmente eseguendo la migrazione della nostra vecchia configurazione di Apache / PHP in contenitori Docker che possono essere eseguiti su Kubernetes. Mentre attraversiamo una miriade di estensioni e vecchie funzionalità, continuiamo a imbatterci in cose interessanti.

Come abbiamo usato per rendere le formule matematiche

Una delle caratteristiche che supportiamo è il tag “matematico” utilizzato per il rendering di varie formule matematiche espresse in LaTeX. Possono variare da 2 + 2 a integrali complessi e operazioni a matrice.

Stavamo usando il binario texvc in esecuzione sul server per eseguire il rendering della formula fornita dall’utente in un file PNG trasparente. È stato quindi recuperato dal browser, consumando larghezza di banda e spazio su disco nel nostro cluster di archiviazione dei file interno.

Al fine di impedire ripetutamente il rendering della stessa formula, l’estensione MediaWiki si basava su una tabella “matematica” per wiki mantenendo un riferimento a un PNG di rendering basato su un hash della sorgente della formula LaTeX. Non esisteva alcun meccanismo di raccolta dei rifiuti: le formule rese cinque anni fa (e molto probabilmente non più utilizzate) sono ancora lì. Le tabelle “matematiche” su tutti i wiki pesano oltre 50 GiB .

texvc nel contenitore Docker?

I nodi Apache utilizzati per gestire le richieste Web hanno installato il pacchetto Ubuntu texvc. È abbastanza piccolo e semplice. Tuttavia, le sue dipendenze (compresi imagemagick e ghostscript) non lo sono. In realtà, quando abbiamo aggiunto “apt-get install texvc” a un file Docker sono stati recuperati oltre 900 MB di pacchetti e le dimensioni dell’immagine Docker sono passate da 455 MB a oltre 2,3 GB !

Costruire e distribuire un’immagine Docker così grande non è la migliore idea. Tuttavia, abbiamo dovuto mantenere questa funzionalità attiva e funzionante. Ma mantieni anche l’immagine Docker delle dimensioni ragionevoli.

Rendering lato client LaTeX

Quindi abbiamo scoperto che l’estensione Math di MediaWiki ha il supporto per la libreria JavaScript MathJax che fa lo stesso di texvc, ma in un modo completamente diverso: rende le formule LaTeX nel browser. Tutto ciò che serve è una sintassi LaTeX all’interno del nodo HTML.

Poiché MathJax utilizza HTML (o SVG) per il rendering di formule, sembrano waaaay meglio dei file PNG trasparenti (che sembravano brutti sui wiki con sfondo scuro e non si adattano bene).

conclusioni

Spostando il rendering delle formule LaTeX dal browser back-end agli utenti finali abbiamo rimosso le dipendenze piuttosto pesanti che erano installate sui nodi Apache e avrebbero dovuto far parte di un’immagine Docker.

  • abbiamo rimosso le tabelle del database mantenendo i riferimenti alle formule visualizzate sul lato server – 52,8 GiB e 230k query al giorno salvate
  • oltre 150.000 immagini con formule renderizzate da rimuovere (stimiamo che consumino ~ 400 MiB di spazio di archiviazione )
  • LaTeX in testo normale pesa un po ‘meno di un file PNG 🙂
  • e sembra molto meglio se reso come grafica vettoriale