esempio di architettura distribuita basata su php, couchdb e mobile
DESCRIPTION
Caso di studio di un'architettura distribuita basata su PHP, CouchDB e Mobile, presentato al PHP Goes Mobile di Milano il 13/04/2012TRANSCRIPT
![Page 1: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/1.jpg)
Esempio di Architettura Distribuita basata su PHP, CouchDB e Mobile
PHP Goes Mobile, Milano 13-04-2012
Stefano Maraspin @maraspin
![Page 2: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/2.jpg)
Managing Partner di MV Associati
Membro Fondatore del PUG FriuliPHP 5 ZCE
@maraspin
Stefano Maraspin
2
![Page 3: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/3.jpg)
IL CONTESTO
![Page 4: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/4.jpg)
![Page 5: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/5.jpg)
DOVE VOGLIAMO ARRIVARE?
![Page 6: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/6.jpg)
RAPIDITA’
![Page 7: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/7.jpg)
RISPARMIO
![Page 8: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/8.jpg)
FEEDBACK
![Page 9: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/9.jpg)
FASCINO
![Page 10: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/10.jpg)
I CLIENTI ORDINANO…
![Page 11: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/11.jpg)
LA CUCINA RICEVE
![Page 12: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/12.jpg)
FEEDBACK / REAZIONE IMMEDIATI
![Page 13: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/13.jpg)
![Page 14: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/14.jpg)
Partiamo da...
14
![Page 15: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/15.jpg)
…E SE?
![Page 16: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/16.jpg)
Allora...
16
![Page 17: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/17.jpg)
Cosa scegliere?
17
![Page 18: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/18.jpg)
Incontriamo Mr. Brewer
18
http://www.julianbrowne.com/article/viewer/brewers-cap-theoremhttp://ksat.me/a-plain-english-introduction-to-cap-theorem/
![Page 19: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/19.jpg)
Scelta Fatta!
19
![Page 20: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/20.jpg)
Cos’è CouchDB?• Datastore Documentale (schemaless)• Database / Documenti• JSON• REST
20
![Page 21: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/21.jpg)
Incontriamo Futon
21
![Page 22: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/22.jpg)
Replicazione Semplice
22
Supporto per modalità PULL e PUSH
![Page 23: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/23.jpg)
Ma Semplice Davvero!
23
Aggiornati non solo i dati ma anche le viste (design docs)
![Page 24: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/24.jpg)
Versioni• ID / _rev• Aggiornamento ottimista, senza lock• MVCC• Aggiornamenti atomici sui documenti• Coerenza Eventuale
24
![Page 25: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/25.jpg)
Scenario di conflitto
25
CouchDB – The definitive guide – O’Reilly
![Page 26: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/26.jpg)
Risoluzione del Conflitto
26
CouchDB – The definitive guide – O’Reilly
![Page 27: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/27.jpg)
CouchApps
27
![Page 28: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/28.jpg)
Implicazione
28
![Page 29: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/29.jpg)
SAREMO PRESTO DISOCCUPATI!
![Page 30: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/30.jpg)
…o forse no
30
![Page 31: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/31.jpg)
Classico Backend
31
![Page 32: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/32.jpg)
Business Logic
32
![Page 33: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/33.jpg)
Poi tutto impacchettato
33
![Page 34: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/34.jpg)
Mandato a CouchDB
34
Localmente, poi si arrangia lui…
![Page 35: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/35.jpg)
E QUINDI PRESENTATO AI CLIENT
![Page 36: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/36.jpg)
L’ELEFANTE LA SPUNTA SEMPRE!
![Page 37: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/37.jpg)
Parecchia scelta• Chill• Doctrine CouchDB• PHP CouchDB Extension• PHPillow• Sag• Settee• Plain CURL (don’t forget it’s HTTP)
37
![Page 38: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/38.jpg)
UNA PALLOTTOLA D’ARGENTO?
![Page 39: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/39.jpg)
Alto consumo di disco
39
0
2000
4000
6000
8000
10000
12000
14000
16000
DB Size (MB)
NB Quanto sopra su update!
![Page 40: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/40.jpg)
Che Succede?
40
Questione di affidabilità, performance
![Page 41: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/41.jpg)
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
![Page 42: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/42.jpg)
COMPATTIAMO QUANDO POSSIBILE…
![Page 43: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/43.jpg)
Raw Performance• 3000 evt/sec in batch mode• 400 evt/sec inserimento• 100 evt/sec update• 10 evt/sec update durante
compattazione
43
![Page 44: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/44.jpg)
Possiamo sempre scalare…
44
![Page 45: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/45.jpg)
O forse no?
45
![Page 46: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/46.jpg)
Una soluzione al problema
46
![Page 47: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/47.jpg)
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
![Page 48: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/48.jpg)
DOMANDE?
![Page 49: Esempio di architettura distribuita basata su PHP, CouchDB e Mobile](https://reader036.vdocuments.site/reader036/viewer/2022062511/54c79d4c4a79599e2b8b4586/html5/thumbnails/49.jpg)
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