2. come nasce?
L’idea di 2Spaghi nasce dall’ispirazione di
popolari servizi Web2.0 USA
un posto dove salvare totalmente
guidato dai contenuti
i propri ristoranti democratico ed user-
generati dagli utenti
preferiti centrico
Obiettivo?
scoprire nuovi posti dove mangiare
3. la vision
2Spaghi nasce con l'obiettivo di creare un luogo che
diventi leader per:
• Trovare il ristorante giusto per la cena che si sta
organizzando (mappe, reviews, domande alla
community).
• Permettere ai ristoratori di entrare in contatto e
discutere con i propri clienti e potenziali.
4. il lancio: luglio 2006
Le prime funzionalita:
Google Maps Mashup,
ristoranti ordinati per più
salvato, SpagoLista,
commenti degli utenti
• Passaparola come
modello di Marketing
• Partecipazione ad eventi
organizzati dalla
blogosfera italiana
(barcamp)
• Feedback subito positivi
5. i primi due anni: business model
Durante 2007 prime sperimentazioni sul modello di business:
Advertising:
Google Adsense e da Settembre ’07 concessionaria pubblicitaria
specializzata in food (Vinoclic)
Newsletter: sponsorizzate: vendute dalla concessionaria
Progetti speciali:
lancio del film Nero
Bifamiliare con i ristoranti
preferiti dei protagonisti
7. un caso di successo: Booking online
A Dicembre del 2009 abbiamo lanciato il primo
servizio di prenotazione online su tutti i
ristoranti (oltre 50.000) in Italia come servizio
dedicato agli utenti e completamente free.
Gli utenti lo hanno giudicato:
1. Comodo
2. Veloce
3. Gratuito
+32.000 prenotazioni entrate +143.000 coperti prenotati
8. la SpagoGuida 2011
13 Novembre 2010 è uscita in libreria la
SpagoGuida, la prima guida ai ristoranti
interamente creata grazie alle recensioni
degli utenti
20. Piattaforma
2Spaghi ha scelto LAMP come piattaforma di
erogazione dei suoi servizi web.
La scelta è stata strategica perchè offre ampia
versatilità, grande scalabilità e performance elevate.
23. Piattaforma
Linux e ubuntu server
La scelta di Ubuntu Server è stata la migliore scelta per noi.
Pur non essendo la migliore distribuzione(redhat, fedora, centOS, etc), accorpa
caratteristiche che, per chi come noi non ha grandi competenze di tipo
sistemistico, sono una manna dal cielo, ad esempio l’aggiornamento e
l’installazione tramite apt-get dei pacchetti precompilati.
C’è poi un fattore più opportunistico, il costo pari a 0 (ZERO) per cui non è
necessario dotarsi di costose licenze software o di assistenza sistemistica
dedicata. Inoltre il tutto può girare su Harware obsoleto avendo una consumo di
risorse eseguo.
Apache MySQL PHP
25. Platform
Apache
WebServer robusto e veloce è l’ambiente ideale per erogare pagine web e siti
con molte visite sviluppate in PHP.
È possibile configurare ogni singolo parametro di erogazione per trovare la
migliore configurazione possibile (tuning). Questa possibilità naturalmente
aumenta il rischio di errori.
Tra le infinite possibilità e moduli configurabili il più interessante è il
mod_rewrite, sistema ottimale per creare URL parlanti (SEO oriented).
Che di questi tempi non si sa mai ;-)
MySQL PHP Linux
27. Piattaforma
MySQL
Rappresenta lo standard nel mondo dei DataBase relazionali OpenSource.
Avaro di risorse (CPU) va configurato con attenzione (tuning) per evitare crolli
improvvisi e lock-table indesiderati.
Le nuove versioni, a differenza delle precedenti, consentono una maggiore
scalabilità (cluster, master/slave).
È sempre meglio avere un DB server dedicato!
PHP Linux Apache
29. Piattaforma
PHP
Il linguaggi client-server più usato sul web e dal mondo Open Source nelle sue
versioni più recenti (>=5.0) ha raggiunto una maturità ed affidabilità notevoli.
L’introduzione di OO e parser XML evoluto, ma anche migliaia di function già
pronte che velocizzano il lavoro dello sviluppatore accorciando i tempi di
produzione rappresentano i suoi punti di forza.
Stabilità e sicurezza lo rendono poi l’alleato ideale anche per architetture più
complesse.
Linux Apache MySQL
34. Architettura
Server Virtuale presso TOPIX Torino
(front-end + DB Server)
4GB di RAM 1GB di HHD
Hosting condiviso+MySQL7MB su Aruba
banda internet illimitata
da 35€ l’anno
2006 2007 2008 2009 2010 2011
35. Architettura
Primo Server proprietario
(front-end + DB Server)
Server Virtuale presso TOPIX Torino Athlon II X4 635 (4 x 2.9Mhz)
(front-end + DB Server) 8GB di RAM 3GB di HHD
4GB di RAM 1GB di HHD Banda internet illimitata
Hosting condiviso+MySQL7MB su Aruba
banda internet illimitata
da 35€ l’anno
2006 2007 2008 2009 2010 2011
36. Architettura
Secondo Server proprietario
(DB server)
Primo Server proprietario 8GB di RAM 3GB di HHD
(front-end + DB Server) Phenom II X4 945 (4 x 3,0 Ghz)
Server Virtuale presso TOPIX Torino Athlon II X4 635 (4 x 2.9Mhz) Banda internet illimitata
(front-end + DB Server) 8GB di RAM 3GB di HHD
4GB di RAM 1GB di HHD Banda internet illimitata
Hosting condiviso+MySQL7MB su Aruba
banda internet illimitata
da 35€ l’anno
2006 2007 2008 2009 2010 2011
37. Architettura
Secondo Server proprietario
(DB server)
Primo Server proprietario 8GB di RAM 3GB di HHD
(front-end + DB Server) Phenom II X4 945 (4 x 3,0 Ghz)
Server Virtuale presso TOPIX Torino Athlon II X4 635 (4 x 2.9Mhz) Banda internet illimitata
(front-end + DB Server) 8GB di RAM 3GB di HHD
4GB di RAM 1GB di HHD Banda internet illimitata
Hosting condiviso+MySQL7MB su Aruba
banda internet illimitata
da 35€ l’anno
2006 2007 2008 2009 2010 2011
89.671 Visite
38. Architettura
Secondo Server proprietario
(DB server)
Primo Server proprietario 8GB di RAM 3GB di HHD
(front-end + DB Server) Phenom II X4 945 (4 x 3,0 Ghz)
Server Virtuale presso TOPIX Torino Athlon II X4 635 (4 x 2.9Mhz) Banda internet illimitata
(front-end + DB Server) 8GB di RAM 3GB di HHD
4GB di RAM 1GB di HHD Banda internet illimitata
Hosting condiviso+MySQL7MB su Aruba
banda internet illimitata
da 35€ l’anno
2006 2007 2008 2009 2010 2011
89.671 Visite 1.000.627 Visite
39. Architettura
Secondo Server proprietario
(DB server)
Primo Server proprietario 8GB di RAM 3GB di HHD
(front-end + DB Server) Phenom II X4 945 (4 x 3,0 Ghz)
Server Virtuale presso TOPIX Torino Athlon II X4 635 (4 x 2.9Mhz) Banda internet illimitata
(front-end + DB Server) 8GB di RAM 3GB di HHD
4GB di RAM 1GB di HHD Banda internet illimitata
Hosting condiviso+MySQL7MB su Aruba
banda internet illimitata
da 35€ l’anno
2006 2007 2008 2009 2010 2011
89.671 Visite 1.000.627 Visite 4.323.000 Visite
40. Architettura
Secondo Server proprietario
(DB server)
Primo Server proprietario 8GB di RAM 3GB di HHD
(front-end + DB Server) Phenom II X4 945 (4 x 3,0 Ghz)
Server Virtuale presso TOPIX Torino Athlon II X4 635 (4 x 2.9Mhz) Banda internet illimitata
(front-end + DB Server) 8GB di RAM 3GB di HHD
4GB di RAM 1GB di HHD Banda internet illimitata
Hosting condiviso+MySQL7MB su Aruba
banda internet illimitata
da 35€ l’anno
2006 2007 2008 2009 2010 2011
89.671 Visite 1.000.627 Visite 4.323.000 Visite 7.145.000 Visite
41. Architettura
Secondo Server proprietario
(DB server)
Primo Server proprietario 8GB di RAM 3GB di HHD
(front-end + DB Server) Phenom II X4 945 (4 x 3,0 Ghz)
Server Virtuale presso TOPIX Torino Athlon II X4 635 (4 x 2.9Mhz) Banda internet illimitata
(front-end + DB Server) 8GB di RAM 3GB di HHD
4GB di RAM 1GB di HHD Banda internet illimitata
Hosting condiviso+MySQL7MB su Aruba
banda internet illimitata
da 35€ l’anno
2006 2007 2008 2009 2010 2011
89.671 Visite 1.000.627 Visite 4.323.000 Visite 7.145.000 Visite 9.655.308 Visite
42. Architettura
Secondo Server proprietario
(DB server)
Primo Server proprietario 8GB di RAM 3GB di HHD
(front-end + DB Server) Phenom II X4 945 (4 x 3,0 Ghz)
Server Virtuale presso TOPIX Torino Athlon II X4 635 (4 x 2.9Mhz) Banda internet illimitata
(front-end + DB Server) 8GB di RAM 3GB di HHD
4GB di RAM 1GB di HHD Banda internet illimitata
Hosting condiviso+MySQL7MB su Aruba
banda internet illimitata
da 35€ l’anno
2006 2007 2008 2009 2010 2011
89.671 Visite 1.000.627 Visite 4.323.000 Visite 7.145.000 Visite 9.655.308 Visite 14..500.000 Visite
45. Architettura
2012
A giugno 2011 per garantire ancora più affidabilità e velocità di calcolo
abbiamo scelto di cambiare ancora server e provider.
Il nuovo provider ci ha permesso di creare una nostra rete privata, connessa a
internet, tramite l’utilizzo di uno switch dedicato al quale sono connessi solo i
nostri server che sono rimasti 2 ma che sono cresciuti in potenza.
Adesso infatti disponiamo di 2 server dotati di 24GB di Ram e di processori
Intel Xeon Quad-Core (x12) e dischi SAS da 300GB.
Questo ci ha consentito di superare i 100.000 utenti giornalieri di San
Valentino. Da sempre il nostro tallone di achille sia per numero di visite che
numero di accessi contemporanei.
56. L’evoluzione dell’architettura
primo scenario (classico 2 livelli)
front-end front-end front-end front-end
1 2 3 ...
API
RDBMS
*
57. L’evoluzione dell’architettura
primo scenario (classico 2 livelli)
front-end front-end front-end front-end
1 2 3 ...
memcache (in memory) + Redis (html)
API
RDBMS
*
58. L’evoluzione dell’architettura
primo scenario (classico 2 livelli) secondo scenario (key-value 3 livelli)
front-end front-end front-end front-end
1 2 3 ...
memcache (in memory) + Redis (html)
API
RDBMS
*
59. L’evoluzione dell’architettura
primo scenario (classico 2 livelli) secondo scenario (key-value 3 livelli)
front-end front-end front-end front-end
1 2 3 ...
memcache (in memory) + Redis (html)
API
RDBMS
RDBMS
*
60. L’evoluzione dell’architettura
primo scenario (classico 2 livelli) secondo scenario (key-value 3 livelli)
front-end front-end front-end front-end front-end front-end front-end front-end
1 2 3 ... 1 2 3 ...
memcache (in memory) + Redis (html)
API
RDBMS
RDBMS
*
61. L’evoluzione dell’architettura
primo scenario (classico 2 livelli) secondo scenario (key-value 3 livelli)
front-end front-end front-end front-end front-end front-end front-end front-end
1 2 3 ... 1 2 3 ...
memcache (in memory) + Redis (html)
API API
RDBMS
RDBMS
*
62. L’evoluzione dell’architettura
primo scenario (classico 2 livelli) secondo scenario (key-value 3 livelli)
front-end front-end front-end front-end front-end front-end front-end front-end
1 2 3 ... 1 2 3 ...
memcache (in memory) + Redis (html) memcache (in memory) + Redis (html)
API API
RDBMS
RDBMS
*
63. L’evoluzione dell’architettura
primo scenario (classico 2 livelli) secondo scenario (key-value 3 livelli)
front-end front-end front-end front-end front-end front-end front-end front-end
1 2 3 ... 1 2 3 ...
memcache (in memory) + Redis (html) memcache (in memory) + Redis (html)
API API
RDBMS
key-valye- key-valye- key-valye-
RDBMS DB DB DB
in memory
*
64. L’evoluzione dell’architettura
primo scenario (classico 2 livelli) secondo scenario (key-value 3 livelli)
front-end front-end front-end front-end front-end front-end front-end front-end
1 2 3 ... 1 2 3 ...
memcache (in memory) + Redis (html) memcache (in memory) + Redis (html)
API API
Business Logic*
RDBMS
key-valye- key-valye- key-valye-
RDBMS DB DB DB
in memory
* Business Logic è lo strato che implementa la logica applicativa
66. L’evoluzione dell’architettura
Nginx
È un HTTP server con funzionalità
di revers proxy. I test che stiamo
portando avanti ci hanno dato
ottimi risultati in termini di
performance e stabilità nonchè in
scalabilità.
67. L’evoluzione dell’architettura
Nginx PHP fast-cgi
È un HTTP server con funzionalità Usare PHP in questa modalità
di revers proxy. I test che stiamo non lo rende più veloce ma ci
portando avanti ci hanno dato offre la possibilità di isolare
ottimi risultati in termini di ilprocesso che non è più
performance e stabilità nonchè in dipendente da Apache.
scalabilità. Abbinato a Ngnix ci consente di
creare e staticizzare parti di
contenuto dinamico.
68. L’evoluzione dell’architettura
Nginx PHP fast-cgi Redis
È un HTTP server con funzionalità Usare PHP in questa modalità Usiamo redis per memorizzare
di revers proxy. I test che stiamo non lo rende più veloce ma ci l’HTML creato dinamicamente da
portando avanti ci hanno dato offre la possibilità di isolare PHP in modo da velocizzare
ottimi risultati in termini di ilprocesso che non è più ulteriormente il front-end e non
performance e stabilità nonchè in dipendente da Apache. dover richiedere ogni volta il
scalabilità. Abbinato a Ngnix ci consente di contenuto dinamico a PHP
creare e staticizzare parti di
contenuto dinamico.
69. L’evoluzione dell’architettura
Nginx PHP fast-cgi Redis
È un HTTP server con funzionalità Usare PHP in questa modalità Usiamo redis per memorizzare
di revers proxy. I test che stiamo non lo rende più veloce ma ci l’HTML creato dinamicamente da
portando avanti ci hanno dato offre la possibilità di isolare PHP in modo da velocizzare
ottimi risultati in termini di ilprocesso che non è più ulteriormente il front-end e non
performance e stabilità nonchè in dipendente da Apache. dover richiedere ogni volta il
scalabilità. Abbinato a Ngnix ci consente di contenuto dinamico a PHP
creare e staticizzare parti di
contenuto dinamico.
ma come funziona?
70. L’evoluzione dell’architettura
Nginx PHP fast-cgi Redis
È un HTTP server con funzionalità Usare PHP in questa modalità Usiamo redis per memorizzare
di revers proxy. I test che stiamo non lo rende più veloce ma ci l’HTML creato dinamicamente da
portando avanti ci hanno dato offre la possibilità di isolare PHP in modo da velocizzare
ottimi risultati in termini di ilprocesso che non è più ulteriormente il front-end e non
performance e stabilità nonchè in dipendente da Apache. dover richiedere ogni volta il
scalabilità. Abbinato a Ngnix ci consente di contenuto dinamico a PHP
creare e staticizzare parti di
contenuto dinamico.
ma come funziona?
Nginx
71. L’evoluzione dell’architettura
Nginx PHP fast-cgi Redis
È un HTTP server con funzionalità Usare PHP in questa modalità Usiamo redis per memorizzare
di revers proxy. I test che stiamo non lo rende più veloce ma ci l’HTML creato dinamicamente da
portando avanti ci hanno dato offre la possibilità di isolare PHP in modo da velocizzare
ottimi risultati in termini di ilprocesso che non è più ulteriormente il front-end e non
performance e stabilità nonchè in dipendente da Apache. dover richiedere ogni volta il
scalabilità. Abbinato a Ngnix ci consente di contenuto dinamico a PHP
creare e staticizzare parti di
contenuto dinamico.
ma come funziona?
risponde a tutte le richieste HTTP al pari di Apache. Grazie alle
sue caratteristiche di revers proxy è possibile scrivere HTML
Nginx statico e usare degli includes dinamici verso script PHP
72. L’evoluzione dell’architettura
Nginx PHP fast-cgi Redis
È un HTTP server con funzionalità Usare PHP in questa modalità Usiamo redis per memorizzare
di revers proxy. I test che stiamo non lo rende più veloce ma ci l’HTML creato dinamicamente da
portando avanti ci hanno dato offre la possibilità di isolare PHP in modo da velocizzare
ottimi risultati in termini di ilprocesso che non è più ulteriormente il front-end e non
performance e stabilità nonchè in dipendente da Apache. dover richiedere ogni volta il
scalabilità. Abbinato a Ngnix ci consente di contenuto dinamico a PHP
creare e staticizzare parti di
contenuto dinamico.
ma come funziona?
risponde a tutte le richieste HTTP al pari di Apache. Grazie alle
sue caratteristiche di revers proxy è possibile scrivere HTML
Nginx statico e usare degli includes dinamici verso script PHP
<!--#include virtual="/includes/title.php?$QUERY_STRING" -->
73. L’evoluzione dell’architettura
Nginx PHP fast-cgi Redis
È un HTTP server con funzionalità Usare PHP in questa modalità Usiamo redis per memorizzare
di revers proxy. I test che stiamo non lo rende più veloce ma ci l’HTML creato dinamicamente da
portando avanti ci hanno dato offre la possibilità di isolare PHP in modo da velocizzare
ottimi risultati in termini di ilprocesso che non è più ulteriormente il front-end e non
performance e stabilità nonchè in dipendente da Apache. dover richiedere ogni volta il
scalabilità. Abbinato a Ngnix ci consente di contenuto dinamico a PHP
creare e staticizzare parti di
contenuto dinamico.
ma come funziona?
risponde a tutte le richieste HTTP al pari di Apache. Grazie alle
sue caratteristiche di revers proxy è possibile scrivere HTML
Nginx statico e usare degli includes dinamici verso script PHP
Diciamo a Ngnix di andare a
recuperare il contenuto dalla
pagina title.php passando anche i <!--#include virtual="/includes/title.php?$QUERY_STRING" -->
parametri che ci servono con ?
$QUERY_STRING
A questo punto PHP in modalità
fast-cgi esegue lo script e
contestualmente crea la sezione
HTML momorizzandola su Redis
74. L’evoluzione dell’architettura
Nginx PHP fast-cgi Redis
È un HTTP server con funzionalità Usare PHP in questa modalità Usiamo redis per memorizzare
di revers proxy. I test che stiamo non lo rende più veloce ma ci l’HTML creato dinamicamente da
portando avanti ci hanno dato offre la possibilità di isolare PHP in modo da velocizzare
ottimi risultati in termini di ilprocesso che non è più ulteriormente il front-end e non
performance e stabilità nonchè in dipendente da Apache. dover richiedere ogni volta il
scalabilità. Abbinato a Ngnix ci consente di contenuto dinamico a PHP
creare e staticizzare parti di
contenuto dinamico.
ma come funziona?
risponde a tutte le richieste HTTP al pari di Apache. Grazie alle
sue caratteristiche di revers proxy è possibile scrivere HTML
Nginx statico e usare degli includes dinamici verso script PHP
Diciamo a Ngnix di andare a
recuperare il contenuto dalla
pagina title.php passando anche i <!--#include virtual="/includes/title.php?$QUERY_STRING" -->
parametri che ci servono con ?
$QUERY_STRING La seconda volta che il contenuto viene
richiesto Nginx non lo chiede a PHP ma
A questo punto PHP in modalità direttamente a Redis che lo eroga fino alla sua
fast-cgi esegue lo script e scadenza. Terminata la cache il giro ricomincia.
contestualmente crea la sezione
HTML momorizzandola su Redis