Esempio di Architettura Distribuita basata su PHP, CouchDB e Mobile
PHP Goes Mobile, Milano 13-04-2012
Stefano Maraspin @maraspin
Managing Partner di MV Associati
Membro Fondatore del PUG FriuliPHP 5 ZCE
@maraspin
Stefano Maraspin
2
IL CONTESTO
DOVE VOGLIAMO ARRIVARE?
RAPIDITA’
RISPARMIO
FEEDBACK
FASCINO
I CLIENTI ORDINANO…
LA CUCINA RICEVE
FEEDBACK / REAZIONE IMMEDIATI
Partiamo da...
14
…E SE?
Allora...
16
Cosa scegliere?
17
Incontriamo Mr. Brewer
18
http://www.julianbrowne.com/article/viewer/brewers-cap-theoremhttp://ksat.me/a-plain-english-introduction-to-cap-theorem/
Scelta Fatta!
19
Cos’è CouchDB?• Datastore Documentale (schemaless)• Database / Documenti• JSON• REST
20
Incontriamo Futon
21
Replicazione Semplice
22
Supporto per modalità PULL e PUSH
Ma Semplice Davvero!
23
Aggiornati non solo i dati ma anche le viste (design docs)
Versioni• ID / _rev• Aggiornamento ottimista, senza lock• MVCC• Aggiornamenti atomici sui documenti• Coerenza Eventuale
24
Scenario di conflitto
25
CouchDB – The definitive guide – O’Reilly
Risoluzione del Conflitto
26
CouchDB – The definitive guide – O’Reilly
CouchApps
27
Implicazione
28
SAREMO PRESTO DISOCCUPATI!
…o forse no
30
Classico Backend
31
Business Logic
32
Poi tutto impacchettato
33
Mandato a CouchDB
34
Localmente, poi si arrangia lui…
E QUINDI PRESENTATO AI CLIENT
L’ELEFANTE LA SPUNTA SEMPRE!
Parecchia scelta• Chill• Doctrine CouchDB• PHP CouchDB Extension• PHPillow• Sag• Settee• Plain CURL (don’t forget it’s HTTP)
37
UNA PALLOTTOLA D’ARGENTO?
Alto consumo di disco
39
0
2000
4000
6000
8000
10000
12000
14000
16000
DB Size (MB)
NB Quanto sopra su update!
Che Succede?
40
Questione di affidabilità, performance
C’è dell’altro• Mantenuta traccia dei documenti
eliminati (replicazione)• Spazio su disco viene dedicato anche
alle viste (che vengono precalcolate e quindi mantenute incrementalmente)
• Quando si esegue la compattazione, fa prima una copia di tutti i dati
41
COMPATTIAMO QUANDO POSSIBILE…
Raw Performance• 3000 evt/sec in batch mode• 400 evt/sec inserimento• 100 evt/sec update• 10 evt/sec update durante
compattazione
43
Possiamo sempre scalare…
44
O forse no?
45
Una soluzione al problema
46
La Morale• CouchDB è un’ottima soluzione per
contesti distribuiti• Non è adatto per le situazioni in cui ci
siano frequenti aggiornamenti sui dati e carichi (ingenti) costanti
• L’API REST ci aiuta a scalare le letture
• Bigcouch viene in aiuto sulle scritture• L’utilizzo combinato di PHP e
couchapp sembra una strada promettente47
DOMANDE?
Photo Credits• http://www.flickr.com/photos/saechang/4402720421/• http://www.flickr.com/photos/koocbor/4738285092/• http://www.flickr.com/photos/whykkk/6311281715/• http://www.flickr.com/photos/whykkk/6311776616/• http://www.flickr.com/photos/neeta_lind/2517034517/• http://www.flickr.com/photos/sebastian_bergmann/2087764869/• http://www.flickr.com/photos/mr_g_travels/863720665/sizes/l/in/photostream/• http://www.flickr.com/photos/dobs/4128798936/sizes/l/in/photostream/• other pictures come from fotolia archives
49
Grazie per l’attenzione
Stefano [email protected]@mvassociati.it