Dietro le quinte di
noblogsorg
noblogs.org:
Connecting radical people.
Non commercial, antifascist, antisexist, privacy-oriented blog platform.
Qualche dato
- 1.000.000 hits/d
- 6.500 utenti
- 5.800 blogs (~ 2k attivi)
- 120 GB di immagini e dati
- 10 GB di database
- 0 IP registrati, logs, utenti identificati
Anonimato e privacy:
dura, con una codebase caotica e raffazzonata come WordPress.
Esempio: WordPress multisite rivela # utenti e siti quando verifica gli updates.
(http://core.trac.wordpress.org/ticket/16778)
I plugin: croce (nostra) e delizia (degli utenti)
"Ogni volta che aggiungiamo un plugin a noblogs, un cucciolo di sistemista muore."
Un* autistic*, 2012
Perché tanto odio?
- Abbandonati e/o scritti malissimo
- Includono risorse esterne (rendendovi tracciabili)
- Sono ghiotti di RAM e CPU
- Richiedono costante auditing
...e i temi? anche peggio dei plugins!
- codice, non solo HTML!
- problemi standard: google api, integrazione con twitter/facebbok/disqus/etc
- sono incredibilmente ancora meno mantenuti dei plugins!
- non esiste davvero un repository unico (wordpress.org/extend/ usato sporadicamente)
WordPress + tante patch
- git spacca!
- branch upstream con il codice originale
- branch noblogs include le nostre patch
(mantenute "in cima" con rebase)
- versionamento delle release
(dopo che abbiamo ROTTO TUTTO varie volte!)
rebase di un branch con git
git checkout upstream
git commit -m 'nuove versioni upstream'
git checkout noblogs
git rebase -i upstream
viene riscritta la history:
git push --force origin
mandare in produzione:
git checkout -b noblogs-X.Y.Z
git push origin
Scalare noblogs
good, cheap and fast:
pick three
- I dati e i database non possono stare su un singolo server
- Inseriamo noblogs nel piano R: i dati sono su 4 server sparsi per il globo.
- Wordpress, ovviamente, non è pensato per questo tipo di uso
Il database si partiziona con HyperDB, ma non esiste un modo per partizionare i file degli utenti
- uno strato piccolo di database globale
- i restanti dati sono distribuiti su diversi backends
(post, commenti, etc.) secondo una funzione di indirizzamento
- C'è un limite preciso ai dati ospitabili
- Latenze: una tipica pagina di WordPress fa circa 70 query al db.
Se ogni connessione richiede 0.1 secondi di RTT...
Indirizzamento con flexihash
https://github.com/pda/flexihash
- il "consistent hashing"*
permette di distribuire il carico su N macchine
- minimizza il numero di spostamenti quando viene aggiunto/rimosso un server
R: FE/BE
- I frontend, usando flexihash, indirizza la richiesta HTTP al BE corretto
- WP su tutti i backend, files e database locali, risponde alla richiesta
- Il database globale è replicato su tutti i backend
- Il RTT e' per una richiesta HTTP, non per 70 query...
- Da 6-9s a 0.4s di rendering time!
I tool amministrativi
noblogs, il nostro coltellino svizzero
$ noblogs info pincopallo.noblogs.org
ID: 5
Name: pincopallo.noblogs.org
Host: qualcheserver.example.com
Status: active
Registered: 2010-08-10 12:47:25
Last Update: 2013-05-05 14:46:10
Esempi:
$ noblogs get-option ossdl_off_cdn_url 5
5: http://noblogs.ai-cdn.net
$ noblogs set-option ossdl_off_cdn_url \
'http://noblogs.ai-cdn.net' 5
$ noblogs run-cron pincopallo.noblogs.org
pingopallo.noblogs.org: ok
$ noblogs close-comments-if-inactive \
pincopallo.noblogs.org
I tool amministrativi
dei wrapper per le operazioni di massa
(che vanno comunque eseguiti in locale)
- on-local-blogs su una singola macchina
- on-all-blogs su tutte le macchine (via ssh)
- aggregate-info aggrega l'output del comando info (per statistiche)
code sharing
vogliamo rilasciare un "WordPress bundle" con le nostre patch
come contribuire
- scrivete codice per bene!
(se sviluppate temi e plugins)