Data Center
Awareness
@spf13

                  AKA
Steve Francia
15+ years building
the internet

  Father, husband,
  skateboarder


Chief Solutions Architect @
responsible for drivers,
integrations, web & docs
Introduction
The most important
feature ever...



When you need it
Multiple
Data Centers

Let’s describe our scenario
We will
 Build
A    Social
    Network
A Global Social
      Network




For simplicity.. let’s focus on 3 locations
Challenges

Data Consistency
Maintain good user
experience
Scaling
Single Database location
     DB
Single Database location
     DB




 Fast       Slo
Single Write location
  Write DB             Read DB




             Read DB
Single Write location
  Write DB             Read DB




             Read DB
Single Write location
  Write DB             Read DB




             Read DB
Single Write location
  Write DB             Read DB




             Read DB
We Need More
Data is localized (for the
most part)


Users interact local to
region (mostly)
Goals
Route data locally
Minimize global failures
Remote data low latency
Minimize remote data
access
MongoDB
Local Write
Write DB               Read DB




           ReplicaDB
            Read Set
Local Write
   Write DB

    Read DB

    Read DB
   Replica Set
3 locations
         3 Replica Sets
Write DB      Write DB      Write DB

 Read DB       Read DB       Read DB

 Read DB       Read DB       Read DB
Replica Set   Replica Set   Replica Set
3 locations
         3 Replica Sets
Write DB      Write DB      Write DB

 Read DB       Read DB       Read DB

 Read DB       Read DB       Read DB
Replica Set   Replica Set   Replica Set
3 locations
                3 Replica Sets
                                                  Read DB     Write DB   Read DB
Write DB   Read DB   Read DB




   Replica Set                 Replica Set                  Replica Set
                           Read DB   Read DB   Write DB
3 locations
                3 Replica Sets
                                                  Read DB     Write DB   Read DB
Write DB   Read DB   Read DB




   Replica Set                 Replica Set                  Replica Set
                           Read DB   Read DB   Write DB
3 locations
                3 Replica Sets
                                                  Read DB     Write DB   Read DB
Write DB   Read DB   Read DB




   Replica Set                 Replica Set                  Replica Set
                           Read DB   Read DB   Write DB
3 locations
                3 Replica Sets
                                                  Read DB     Write DB   Read DB
Write DB   Read DB   Read DB




   Replica Set                 Replica Set                  Replica Set
                           Read DB   Read DB   Write DB
Local Writes
Local REads (w/delays)
    Write DB                       Write DB
                                        Read DB
 Read DB
                                        Read DB
 Read DB




                  Write DB
               Read DB   Read DB
Local Writes
Local REads (w/delays)
    Write DB                       Write DB
                                        Read DB
 Read DB
                                        Read DB
 Read DB




                  Write DB
               Read DB   Read DB
Local Writes
Local REads (w/delays)
    Write DB                       Write DB
                                        Read DB
 Read DB
                                        Read DB
 Read DB




                  Write DB
               Read DB   Read DB
Local Writes
Local REads (w/delays)
    Write DB                       Write DB
                                        Read DB
 Read DB
                                        Read DB
 Read DB




                  Write DB
               Read DB   Read DB
Write Concern
Write Concern


                        &
If a write requires a
return trip

What the return trip should
depend on
Write Concern
w:
the number of servers to replicate to.
wtimeout:
timeout in ms waiting for replication.
j:
wait for journal sync
tags:
ensure replication to certain tagged nodes
Write Concern

Mongo mongo = new Mongo(
  new MongoURI("mongodb://
127.0.0.1:27017,127.0.0.1:27018"));

mongo.setWriteConcern(
  new WriteConcern(2, 1000));
Write Concern

Mongo mongo = new Mongo(
  new MongoURI("mongodb://
127.0.0.1:27017,127.0.0.1:27018"));

DBCollection users =
mongo.getDB(“myapp”).getCollection(“users”);

users.insert( new DBObject("name", "Kyle"),
              new WriteConcern(2, 1000))
Goals
Route data locally
Minimize global failures
Remote data low latency
Minimize remote data
access
Goals
Route data locally
Minimize global failures
Remote data low latency
Minimize remote data
access
Goals
Route data locally
Minimize global failures
Remote data low latency
Minimize remote data
access
Goals
Route data locally
Minimize global failures
Remote data low latency
Minimize remote data
access
Goals
Route data locally
Minimize global failures
Remote data low latency
Minimize remote data
access
Issues
Doesn’t work with
Sharding
Can’t control which node
to read from
App needs to be aware
(at some level)
MongoDB
Upcoming Features


GeoAware Sharding
Read Preferences
Geo-Aware
     sharding
Adding second dimension
to shard key
Second range can be
used for locality aware
sharding
Read Preferences
 Read from:
   Primary
   Secondary
   Primary Only
   Secondary Only
   Nearest
secondary querying
routed to specific tags
Scenarios
Scenarios

1.   Social Network
2.   Analysis
3.   Establishing Auth Key
4.   Administration
Social Network
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
Social Network
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
Social Network
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
Social Network
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
Analysis
   Write DB                        Write DB
                                        Read DB
Read DB
                                        Read DB
Read DB




                  Write DB
               Read DB   Read DB
Analysis
   Write DB                        Write DB
                                        Read DB
Read DB
                                        Read DB
Read DB




                  Write DB
               Read DB   Read DB
Analysis
   Write DB                        Write DB
                                        Read DB
Read DB
                                        Read DB
Read DB




                  Write DB          ReadPref :
               Read DB   Read DB   PrimaryOnly
Analysis
   Write DB                        Write DB
                                        Read DB
Read DB
                                        Read DB
Read DB




                  Write DB          ReadPref :
               Read DB   Read DB   PrimaryOnly
Auth Keys
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
Auth Keys
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
Auth Keys
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
Auth Keys
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
                                  WriteConcern
                                      w : all
Auth Keys
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
                                  WriteConcern
                                      w : all
Administration
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
Administration
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB
              Read DB   Read DB
Administration
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB          ReadPref :
              Read DB   Read DB   PrimaryOnly
Administration
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB          ReadPref :
              Read DB   Read DB   PrimaryOnly
                                  WriteConcern
                                      w : all
Administration
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB          ReadPref :
              Read DB   Read DB   PrimaryOnly
                                  WriteConcern
                                      w : all
Administration
   Write DB                       Write DB
                                       Read DB
Read DB
                                       Read DB
Read DB




                 Write DB          ReadPref :
              Read DB   Read DB   PrimaryOnly
                                  WriteConcern
                                      w : all
Conclusion
MongoDB

Open source enterprise
features for when you
need them
http://spf13.com
                            http://github.com/s
                            @spf13




Questions?
     download at mongodb.org
 We’re hiring!! Contact us at jobs@10gen.com
Multi Data Center Strategies

Multi Data Center Strategies