franco caporale couchbase milano
DESCRIPTION
Franco Caporale, technology evangelist di Couchbase, parla di database NoSQL, scalabilità di applicazioni web e mobile games. In particolare viene trattato il caso Draw Something, il gioco di Zynga che l'anno scorso ha raggiunto 50 milioni di utenti e oltre 2 miliardi di disegni in sole 6 settimane.TRANSCRIPT
Supportare Milioni di Utenti con NoSQL
Franco Caporale
Draw Something
Draw Something – OMGPop
Draw Something diventa virale in 3 settimane
19 17 15 13 11 9 7 5 3 3/1 28 26 24 22 20 18 16 14 12 10 8 2/6
Daily Active Users (millions)
21
2
4
6
8
10
12
14
16
I dati crescono in modo non lineare…
19 17 15 13 11 9 7 5 3 3/1 28 26 24 22 20 18 16 14 12 10 8 2/6
Daily Active Users (millions)
21
2
4
6
8
10
12
14
16
In un mese 30,000,000 di downloads della app, oltre 5,000 disegni al secondo,
oltre 2,200,000,000 disegni immagazzinati, oltre 105,000 operazioni al secondo, e oltre 3.3 terabytes di dati in totale.
Invece con RDBMS……
19 17 15 13 11 9 7 5 3 3/1 28 26 24 22 20 18 16 14 12 10 8 2/6
The Simpson’s: Tapped Out Daily Active Users (millions)
21
2
4
6
8
10
12
14
16
#2 Free app on iPad #3 Free app on iPhone
MySQL o NoSQL?
La maggioranza delle applicazioni utilizzano gli RDBMS
E a volte puo’ diventare un po’ grande…..
http://www.seoclerks.com/imagedb/2005/BIG-CAT-FOUND-Spoh
……o forse enorme!
http://www.2pep.com/extreme-funny-stuff/
E complicato!
I principali motivi per l’adozione del NoSQL
Schema rigido e non flessibile
Difficolta’ a scalare
Problemi di performance
Costi Tutti I precedenti
Altri
49%
35%
29%
16% 12% 11%
Source: Couchbase Survey, December 2011, n = 1351.
Architettura moderna di un’applicazione web
Application Scales Out Just add more commodity web servers
Database Scales Up Get a bigger, more complex server
Nota – I database relazionali sono una tecnologia eccellente ma non per questo uso.
I database NoSQL utilizzano la stessa logica dell’applicazione
Application Scales Out Just add more commodity web servers
Database Scales Out Just add more commodity data servers
Scalando orizzontalmente si riducono I costi e aumentano
le performance
NoSQL Database Servers
Una Struttura dei Dati Diversa
Modello Relazionale vs. A Documento
Modello “Relazionale” Modello “A documento”
Collezione di documenti complessi con formati arbitrari e schema variabile
Tabelle con schema rigido e struttura dei dati predefinita
JSON JSON
JSON
C1 C2 C3 C4
{ }
Database a Documento
• Ogni record e’ un documento a se’ stante
• Ogni documento ha una struttura indipendente
• I documenti possono essere complessi • Richiedono una chiave unica • I dati sono immagazzinati in formato
JSON, XML o simili • Il contenuto puo’ essere indicizzato e
interrogato • Offrono sharding automatico e
repliche
{ “UUID”: “21f7f8de-8051-5b89-86“Time”: “2011-04-01T13:01:02.42“Server”: “A2223E”,
“Calling Server”: “A2213W”,“Type”: “E100”,“Initiating User”: “[email protected]”,“Details”:
{
“IP”: “10.1.1.22”,“API”: “InsertDVDQueueItem”,“Trace”: “cleansed”,“Tags”:
[
“SERVER”, “US-West”, “API”]
}
}
Esempio Social Game Profilo Giocatore
{
"jsonType": "player",
"uuid": "35767d02-a958-4b83-8179-616816692de1",
"name": "Keith4540",
"hitpoints": 75,
"experience": 663,
"level": 4,
"loggedIn": false
}
ID Utente
Esempio Social Game Oggetto
{
"jsonType": "item",
"name": "Katana_e5890c94-11c6-65746ce6c560",
"uuid": "e5890c94-11c6-4856-a7a6-65746ce6c560",
"ownerId": "Dale9887"
}
ID Oggetto
ID Utente
Esempio Social Game Mostro
{
"jsonType": "monster",
"name": "Bauchan9932",
"uuid": "d10dfc1b-0412-4140-b4ec-affdbf2aa5ec",
"hitpoints": 370,
"experienceWhenKilled": 52,
"itemProbability": 0.5050581341872865
}
ID Mostro
Esempio Blog Diviso su piu’ Documenti
{ “UUID”: “21f7f8de-8051-5b89-86“Time”: “2011-04-01T13:01:02.42“Server”: “A2223E”,
“Calling Server”: “A2213W”,“Type”: “E100”,“Initiating User”: “[email protected]”,“Details”:
{
“IP”: “10.1.1.22”,“API”: “InsertDVDQueueItem”,“Trace”: “cleansed”,“Tags”:
[
“SERVER”, “US-West”, “API”]
}
}
{
“_id”: “Coucbase_Hello_World”,
“author”: “dborkar”,
“type”: “post”
“title”: “Hello World”,
“format”: “markdown”,
“body”: “Hello from
[Couchbase](http://couchbase.com).”,
“html”: “<p>Hello from <a href=\“http: …
“comments”:[
“comment1_Couchbase_Hello_world”
]
} { “UUID”: “21f7f8de-8051-5b89-86“Time”: “2011-04-01T13:01:02.42“Server”: “A2223E”,
“Calling Server”: “A2213W”,“Type”: “E100”,“Initiating User”: “[email protected]”,“Details”:
{
“IP”: “10.1.1.22”,“API”: “InsertDVDQueueItem”,“Trace”: “cleansed”,“Tags”:
[
“SERVER”, “US-West”, “API”]
}
}
{
“_id”: “comment1_Couchbase_Hello_World”,
“format”: “markdown”,
“body”:”Awesome post!”
}
BLOG
COMMENTI
Esempio: Profilo Utente Database Relazionale
Indirizzo Utente
1 DEN 30303 CO
2 MV 94040 CA
3 CHI 60609 IL
Informazioni Utente
KEY First ZIP_id Last
4 NY 10010 NY
1 Dipti 2 Borkar
2 Joe 2 Smith
3 Ali 2 Dodson
4 John 3 Doe
ZIP_id CITY ZIP STATE
1 2
2 MV 94040 CA
Per ottenere informazioni su un utente specifico, devi effettuare un JOIN tra due tabelle
Tutti I dati di un utente in un singolo documento
{ “ID”: 1, “FIRST”: “Dipti”, “LAST”: “Borkar”, “ZIP”: “94040”, “CITY”: “MV”, “STATE”: “CA” }
JSON
= +
Esempio: Profilo Utente Database a Documento
User ID Nome Cognome CAP
1 Dipti Borkar 94040
2 Joe Smith 94040
3 Ali Dodson 94040
4 Sarah Gorin NW1
5 Bob Young 30303
6 Nancy Baker 10010
7 Ray Jones 31311
8 Lee Chen V5V3
M
• • •
50000 Doug Moore 04252
50001 Mary White SW195
50002 Lisa Clark 12425
ID Paese TEL3
001
ID Paese Nome Paese
001 USA
002 UK
003 Argentina
004 Australia
005 Aruba
006 Austria
007 Brazil
008 Canada
009 Chile
• • •
130 Portugal
131 Romania
132 Russia
133 Spain
134 Sweden
User ID Foto ID Commento
2 d043 NYC
2 b054 Bday
5 c036 Miami
7 d072 Sunset
5002 e086 Spain
Tabella Foto
001
007
001
133
133
User ID Status ID Text
1 a42 At conf
4 b26 excited
5 c32 hockey
12 d83 Go A’s
5000 e34 sailing
Tabella Status
134
007
008
001
005
Tabella Paese
User ID Affl ID Affl Name
2 a42 Cal
4 b96 USC
7 c14 UW
8 e22 Oxford
Tabella Affiliazioni ID Paese
001
001
001
002
ID Paese
ID Paese
001
001
002
001
001
001
008
001
002
001
Tabella Utente
.
.
.
Effettuare una Modifica su RDBMS
Modifiche su un database a documento
{ “ID”: 1, “FIRST”: “Don”, “LAST”: “Pinto”, “ZIP”: “94040”, “CITY”: “MV”, “STATE”: “CA”, “STATUS”: { “TEXT”: “At Conf”
}
}
“GEO_LOC”: “134” }, “COUNTRY”: ”USA”
Basta aggiungere le informazioni sul documento
JSON
, }
Il NoSQL e i Social Games
Catalogo dei NoSQL
Chiave-Valore
Memcached Redis
Struttura Dati Documento Colonna Grafico
MongoDB
Couchbase Cassandra
Cac
he
(mem
ory
on
ly)
Dat
abas
e
(mem
ory
/dis
k)
Neo4J
Come scegliere il database NoSQL piu’ adatto?
Crescita rapida
Reattivita’ del gioco
Gioco globalizzato e sempre attivo
Modifiche frequenti e veloci
Scalabilita’
Performance
Sempre live
Modello dei dati flessibile
Couchbase Open Source
• Il principale database NoSQL distribuito
• Supporta sia le applicazioni chiave-valore che a documento
• Tutti I componenti sono disponibili con licenza Apache 2.0 Public License
• Disponibile come pacchetto software sia nella versione Community che in quella Enterprise
Couchbase
Open Source Project
≠
Scalabilita’ Semplice
Performance Elevate e Costanti
Sempre Live 24x365
Ingrandisci il tuo cluster con un click mentre l’applicazione
rimane live
Tempi di risposta costanti sotto il millisecondo per operazioni di
scrittura e lettura
L’applicazione non e’ mai inattiva anche in caso di
aggiornamenti, manutenzione etc.
Modello Dati Flessibile
Supporto per documenti JSON senza uno schema rigido
Principi Chiave di Couchbase Server
Differenze Principali Rispetto ad Altri Database NoSQL
• Permette un altissimo numero di connessioni contemporanee (fondamentale per applicazioni web interattive)
• Nessun locks
• Cache nativa
• Hash partitioning (non range) non si formano “hotspots”
• Sharding automatico
Dietro le Quinte di Couchbase
3 3 2
Server Singolo- Operazione Scrittura con Couchbase
Managed Cache
Dis
k Q
ueu
e
Replication Queue
App Server
Doc 1’
Doc 1
Doc 1’ Doc 1
Doc 1’
Disk
To other node
Couchbase Server Node
GET
D
oc
1
3 3 2
Server Singolo- Operazione Lettura con Couchbase
Dis
k Q
ueu
e
Replication Queue
App Server
Doc 1
Doc 1 Doc 1
Managed Cache
Disk
To other node
Couchbase Server Node
COUCHBASE SERVER CLUSTER
Operazioni di Base sul Cluster
• Tutti I nodi sono uguali e I documenti sono ugualmente distribuiti
• Ogni server contiene sia I documenti attivi che quelli replica
• La mappa del cluster ha le coordinate su dove si trovano I documenti L’applicazione non ha bisogno di saperlo
User Configured Replica Count = 1
READ/WRITE/UPDATE
ACTIVE
Doc 5
Doc 2
Doc
Doc
Doc
SERVER 1 ACTIVE
Doc 4
Doc 7
Doc
Doc
Doc
SERVER 2
Doc 8
ACTIVE
Doc 1
Doc 3
Doc
Doc
Doc
REPLICA
Doc 4
Doc 1
Doc 8
Doc
Doc
Doc
REPLICA
Doc 6
Doc 3
Doc 2
Doc
Doc
Doc
REPLICA
Doc 7
Doc 9
Doc 5
Doc
Doc
Doc
SERVER 3
Doc 6
APP SERVER 1
COUCHBASE Client Library CLUSTER MAP
COUCHBASE Client Library CLUSTER MAP
APP SERVER 2
Doc 9
Aggiungere Nodi al Cluster
• Due servers aggiunti con un solo click
• I documenti vengono automaticamente ribilanciati attraverso il cluster Col minimo spostamento di documenti possibile
• La mappa del cluster viene aggiornata
• L’applicazione ora e’ supportata da un numero maggiore di servers.
REPLICA
ACTIVE
Doc 5
Doc 2
Doc
Doc
Doc 4
Doc 1
Doc
Doc
SERVER 1
REPLICA
ACTIVE
Doc 4
Doc 7
Doc
Doc
Doc 6
Doc 3
Doc
Doc
SERVER 2
REPLICA
ACTIVE
Doc 1
Doc 3
Doc
Doc
Doc 7
Doc 9
Doc
Doc
SERVER 3
SERVER 4
SERVER 5
REPLICA
ACTIVE
REPLICA
ACTIVE
Doc
Doc 8 Doc
Doc 9 Doc
Doc 2 Doc
Doc 8 Doc
Doc 5 Doc
Doc 6
READ/WRITE/UPDATE READ/WRITE/UPDATE
APP SERVER 1
COUCHBASE Client Library CLUSTER MAP
COUCHBASE Client Library CLUSTER MAP
APP SERVER 2
COUCHBASE SERVER CLUSTER
User Configured Replica Count = 1
Caduta di un Nodo
REPLICA
ACTIVE
Doc 5
Doc 2
Doc
Doc
Doc 4
Doc 1
Doc
Doc
SERVER 1
REPLICA
ACTIVE
Doc 4
Doc 7
Doc
Doc
Doc 6
Doc 3
Doc
Doc
SERVER 2
REPLICA
ACTIVE
Doc 1
Doc 10
Doc
Doc
Doc 7
Doc 9
Doc
Doc
SERVER 3
SERVER 4
SERVER 5
REPLICA
ACTIVE
REPLICA
ACTIVE
Doc 9
Doc 8
Doc Doc 6 Doc
Doc
Doc 5 Doc 10
Doc 2
Doc 8 Doc
Doc
• I server della app accedono ai dati
• Le richieste al Server 3 falliscono
• Il Cluster identifica che un nodo e’ offline Le repliche vengono promosse ad attive e la mappa del cluster viene aggiornata
• Le richieste della app ora si dirigono sul server appropriato
• Il tutto e’ seguito dal ribilanciamento dei dati
Doc
Doc 1 Doc 3
APP SERVER 1
COUCHBASE Client Library CLUSTER MAP
COUCHBASE Client Library CLUSTER MAP
APP SERVER 2
User Configured Replica Count = 1
COUCHBASE SERVER CLUSTER
Cross Data Center Replication (XDCR)
COUCHBASE SERVER CLUSTER NY DATA CENTER
ACTIVE
Doc
Doc 2
SERVER 1
Doc 9
SERVER 2
SERVER 3
RAM
Doc Doc Doc
ACTIVE
Doc
Doc
Doc RAM
ACTIVE
Doc
Doc
Doc RAM
DISK
Doc Doc Doc
DISK
Doc Doc Doc
DISK
COUCHBASE SERVER CLUSTER SF DATA CENTER
ACTIVE
Doc
Doc 2
SERVER 1
Doc 9
SERVER 2
SERVER 3
RAM
Doc Doc Doc
ACTIVE
Doc
Doc
Doc RAM
ACTIVE
Doc
Doc
Doc RAM
DISK
Doc Doc Doc
DISK
Doc Doc Doc
DISK
Altri Usi Comuni del NoSQL
Market Adoption – Customers
Internet Companies Enterprises
More than 300 customers -- 5,000 production deployments worldwide
Caratteristiche dei Dati
• Struttura definita dall’utente (Twitter feeds)
• Serve supporto per crescita esponenziale (Apps virali)
• Struttura dei dati non omogenea
• C’e’ necessita’ di cambiare struttura frequentemente
• Lunghezza dei documenti variabile
• Struttura dei dati gerarchica
Couchbase e’ la scelta ideale
Requisiti di Performance
• Latenze estremamente basse (es. 1millisecondo)
• Traffici elevati (es. 200000 ops/sec)
• Numero di utenti elevato
• Domanda non preventivabile con crescite improvvise
• C’e’ predominanza di accesso diretto ai documenti
• Alto traffico in lettura e scrittura
Couchbase e’ la scelta ideale
Applicazioni Comuni Social Gaming
• Couchbase
contiene I dati sugli utenti e I giochi
• Esempi clienti: Zynga, Tapjoy, Ubisoft, Tencent
Apps Mobili
• Couchbase contiene dati
su utenti e contenuti
• Esempi clienti: Kobo, Playtika
Pubblicita’ Online
• Couchbase contiene info sugli utenti per un accesso veloce
• Esempi clienti: AOL, Mediamind, Convertro
Informazioni di Sessione
• Couchbase come database chiave-valore
• Esempi clienti: Concur, Sabre
Profili Utenti
• Couchbase come database chiave-valore
• Esempi clienti: Tunewiki
Cache ad Alta Disponibilita’
• Couchbase utilizzato come livello di cache
• Esempi clienti: Orbitz
Metadata e Contenuti • Couchbase insieme ad
Elasticsearch
• Esempi clienti: McGraw Hill
Aggregazione Dati
• Couchbase aggrega I dati dai social media
• Esempi clienti: Sambacloud
Questions?
Non dimenticate di………
Scaricare e fare pratica con Couchbase Server
http://www.couchbase.com/download
Iscrivervi sul gruppo di Couchbase Italia su LinkedIn
http://www.linkedin.com/groups/Couchbase-Italia-4932288
Iscrivervi sul nostro Community Portal http://www.couchbase.com/communities/user/register
Grazie a Tutti!