3. Couchbase
Server
Grow
cluster
without
Easy
applicaEon
changes,
without
Scalability
downEme
with
a
single
click
Consistent
sub-‐millisecond
Consistent,
High
read
and
write
response
Emes
Performance
with
consistent
high
throughput
Always
On
No
downEme
for
soJware
24x7x365
upgrades,
hardware
maintenance,
etc.
3
4. Couchbase
Server
Features
Built-‐in
clustering
–
All
nodes
equal
Data
replica+on
with
auto-‐failover
Zero-‐-‐down+me
maintenance
Clone
to
grow
and
scale
horizontally
4
5. Couchbase
Server
Features
Built-‐in
managed
cached
Monitoring
and
administra+on
APIs
and
GUI
SDK
for
a
variety
of
languages
5
7. Flexible
Data
Model
{
“ID”:
1,
“FIRST”:
“DipE”,
“LAST”:
“Borkar”,
“ZIP”:
“94040”,
“CITY”:
“MV”,
“STATE”:
“CA”
}
JSON
JSON
JSON
JSON
Schemaless
data
model
allows
painless
data
model
changes
for
rapid
applica+on
development
7
8. New
in
Two
JSON
support
Indexing
and
Querying
Incremental
Map
Reduce
Cross
data
center
replicaEon
8
9. Couchbase
Server
2.0
Architecture
8092
11211
11210
Query
API
Memcapable
1.0
Memcapable
2.0
Moxi
Query
Engine
REST
management
API/Web
UI
vBucket
state
and
replica+on
manager
Memcached
Global
singleton
supervisor
Rebalance
orchestrator
Configura+on
manager
Node
health
monitor
Process
monitor
Heartbeat
Couchbase
EP
Engine
Data
Manager
Cluster
Manager
storage
interface
New
Persistence
Layer
hap
on
each
node
one
per
cluster
Erlang/OTP
HTTP
Erlang
port
mapper
Distributed
Erlang
8091
4369
21100
-‐
21199
9
10. Couchbase
Server
2.0
Architecture
8092
11211
11210
Query
API
Memcapable
1.0
Memcapable
2.0
Moxi
Query
Engine
REST
management
API/Web
UI
vBucket
state
and
replica+on
manager
Memcached
Global
singleton
supervisor
Rebalance
orchestrator
Configura+on
manager
Node
health
monitor
Process
monitor
Heartbeat
Couchbase
EP
Engine
storage
interface
New
Persistence
Layer
hap
on
each
node
one
per
cluster
Erlang/OTP
HTTP
Erlang
port
mapper
Distributed
Erlang
8091
4369
21100
-‐
21199
10
12. Single
node
-‐
Couchbase
Write
Opera+on
2
Doc
1
App
Server
3
2
3
Managed
Cache
To
other
node
Replica+on
Queue
Doc
1
Disk
Queue
Disk
Couchbase
Server
Node
12
13. Single
node
-‐
Couchbase
Update
Opera+on
2
Doc
1’
App
Server
3
2
3
Managed
Cache
To
other
node
Replica+on
Doc
1
Doc
1’
Queue
Disk
Queue
Disk
Doc
1
Couchbase
Server
Node
13
14. Single
node
-‐
Couchbase
Read
Opera+on
2
Doc
1
GET
App
Server
3
2
3
Managed
Cache
To
other
node
Replica+on
Queue
Doc
1
Disk
Queue
Disk
Doc
1
Couchbase
Server
Node
14
15. Basic
Opera+on
APP
SERVER
1
APP
SERVER
2
COUCHBASE
Client
Library
COUCHBASE
Client
Library
CLUSTER
MAP
CLUSTER
MAP
READ/WRITE/UPDATE
SERVER
1
SERVER
2
SERVER
3
• Docs
distributed
evenly
across
ACTIVE
ACTIVE
ACTIVE
servers
Doc
5
Doc
Doc
4
Doc
Doc
1
Doc
• Each
server
stores
both
acEve
and
replica
docs
Doc
2
Doc
Doc
7
Doc
Doc
2
Doc
Only
one
server
ac+ve
at
a
+me
• Client
library
provides
app
with
Doc
9
Doc
Doc
8
Doc
Doc
6
Doc
simple
interface
to
database
REPLICA
REPLICA
REPLICA
• Cluster
map
provides
map
to
which
server
doc
is
on
Doc
4
Doc
Doc
6
Doc
Doc
7
Doc
App
never
needs
to
know
Doc
1
Doc
Doc
3
Doc
Doc
9
Doc
• App
reads,
writes,
updates
docs
Doc
8
Doc
Doc
2
Doc
Doc
5
Doc
• MulEple
app
servers
can
access
same
document
at
same
Eme
COUCHBASE
SERVER
CLUSTER
User
Configured
Replica
Count
=
1
15
16. Add
Nodes
to
Cluster
APP
SERVER
1
APP
SERVER
2
COUCHBASE
Client
Library
COUCHBASE
Client
Library
CLUSTER
MAP
CLUSTER
MAP
READ/WRITE/UPDATE
READ/WRITE/UPDATE
SERVER
1
SERVER
2
SERVER
3
SERVER
4
SERVER
5
• Two
servers
added
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
One-‐click
operaEon
Doc
5
Doc
Doc
4
Doc
Doc
1
Doc
• Docs
automaEcally
rebalanced
across
Doc
2
Doc
Doc
7
Doc
Doc
2
Doc
cluster
Even
distribu+on
of
docs
Minimum
doc
movement
Doc
9
Doc
Doc
8
Doc
Doc
6
Doc
• Cluster
map
updated
REPLICA
REPLICA
REPLICA
REPLICA
REPLICA
• App
database
Doc
4
Doc
Doc
6
Doc
Doc
7
Doc
calls
now
distributed
over
larger
number
of
Doc
1
Doc
Doc
3
Doc
Doc
9
Doc
servers
Doc
8
Doc
Doc
2
Doc
Doc
5
Doc
COUCHBASE
SERVER
CLUSTER
User
Configured
Replica
Count
=
1
16
17. Fail
Over
Node
APP
SERVER
1
APP
SERVER
2
COUCHBASE
Client
Library
COUCHBASE
Client
Library
CLUSTER
MAP
CLUSTER
MAP
SERVER
1
SERVER
2
SERVER
3
SERVER
4
SERVER
5
• App
servers
accessing
docs
ACTIVE
ACTIVE
ACTIVE
ACTIVE
ACTIVE
• Requests
to
Server
3
fail
Doc
5
Doc
Doc
4
Doc
Doc
1
Doc
Doc
9
Doc
Doc
6
Doc
• Cluster
detects
server
failed
Promotes
replicas
of
docs
to
Doc
2
Doc
Doc
7
Doc
Doc
2
Doc
Doc
8
Doc
Doc
ac+ve
Updates
cluster
map
Doc
1
Doc
3
• Requests
for
docs
now
go
to
REPLICA
REPLICA
REPLICA
REPLICA
REPLICA
appropriate
server
Doc
4
Doc
Doc
6
Doc
Doc
7
Doc
Doc
5
Doc
Doc
8
Doc
• Typically
rebalance
would
follow
Doc
1
Doc
Doc
3
Doc
Doc
9
Doc
Doc
2
Doc
COUCHBASE
SERVER
CLUSTER
User
Configured
Replica
Count
=
1
17
19. Indexing
and
Querying
APP
SERVER
1
APP
SERVER
2
COUCHBASE
Client
Library
COUCHBASE
Client
Library
CLUSTER
MAP
CLUSTER
MAP
Query
SERVER
1
SERVER
2
SERVER
3
• Indexing
work
is
distributed
ACTIVE
ACTIVE
ACTIVE
amongst
nodes
Doc
5
Doc
Doc
5
Doc
Doc
5
Doc
• Large
data
set
possible
Doc
2
Doc
Doc
2
Doc
Doc
2
Doc
• Parallelize
the
effort
Doc
9
Doc
• Each
node
has
index
for
data
stored
Doc
9
Doc
Doc
9
Doc
on
it
REPLICA
REPLICA
REPLICA
• Queries
combine
the
results
from
Doc
4
Doc
required
nodes
Doc
4
Doc
Doc
4
Doc
Doc
1
Doc
Doc
1
Doc
Doc
1
Doc
Doc
8
Doc
Doc
8
Doc
Doc
8
Doc
COUCHBASE
SERVER
CLUSTER
User
Configured
Replica
Count
=
1
19
20. Cross
Data
Center
Replica+on
(XDCR)
SERVER
1
SERVER
2
SERVER
3
ACTIVE
ACTIVE
ACTIVE
COUCHBASE
SERVER
CLUSTER
Doc
Doc
Doc
NY
DATA
CENTER
Doc
2
Doc
Doc
Doc
9
Doc
Doc
RAM
RAM
RAM
Doc
Doc
Doc
Doc
Doc
Doc
Doc
Doc
Doc
DISK
DISK
DISK
SERVER
1
SERVER
2
SERVER
3
ACTIVE
ACTIVE
ACTIVE
Doc
Doc
Doc
Doc
2
Doc
Doc
Doc
9
Doc
Doc
RAM
RAM
RAM
COUCHBASE
SERVER
CLUSTER
Doc
Doc
Doc
Doc
Doc
Doc
Doc
Doc
Doc
SF
DATA
CENTER
DISK
DISK
DISK
20
21. Couchbase
SDKs
Java
SDK
User
Code
.Net
SDK
CouchbaseClient
cb
=
new
CouchbaseClient(listURIs,
Java
client
API
"aBucket",
"letmein");
cb.set("hello",
0,
"world");
cb.get("hello");
Couchbase
Java
Library
PHP
SDK
(spymemcached)
Ruby
SDK
Couchbase
Server
…and
many
more
hgp://www.couchbase.com/develop
21
23. Demo:
The
next
big
social
game
3
Objects
(documents)
within
game:
• Players
• Monsters
• Items
Gameplay:
• Players
fight
monsters
• Monsters
drop
items
• Players
own
items
23
24. Player
Document
{
"jsonType":
"player",
"uuid":
"35767d02-‐a958-‐4b83-‐8179-‐616816692de1",
"name":
"Keith4540",
"hitpoints":
75,
Player
ID
"experience":
663,
"level":
4,
"loggedIn":
false
}
24
25. Item
Document
{
Item
ID
"jsonType":
"item",
"name":
"Katana_e5890c94-‐11c6-‐65746ce6c560",
"uuid":
"e5890c94-‐11c6-‐4856-‐a7a6-‐65746ce6c560",
"ownerId":
"Dale9887"
}
Player
ID
25