SlideShare a Scribd company logo
1 of 196
Scaling to 30,000 Requests Per Second
and Beyond
with MongoDB
Mike Chesnut
Director of Operations Engineering
Crittercism
Scaling to 30,000 Requests Per Second
and Beyond
with MongoDB
Mike Chesnut
Director of Operations Engineering
Crittercism
How a Startup Gets Started
● Pick something and go with it
How a Startup Gets Started
● Pick something and go with it
● Make mistakes along the way
How a Startup Gets Started
● Pick something and go with it
● Make mistakes along the way
● Correct the mistakes you can
How a Startup Gets Started
● Pick something and go with it
● Make mistakes along the way
● Correct the mistakes you can
● Work around the ones you can’t
How a Startup Gets Started
What I’ll Talk About
What I’ll Talk About
● Crittercism - Background and Architecture
What I’ll Talk About
● Crittercism - Background and Architecture
● Router (mongos) Architecture
What I’ll Talk About
● Crittercism - Background and Architecture
● Router (mongos) Architecture
● Sharding Considerations
What I’ll Talk About
● Crittercism - Background and Architecture
● Router (mongos) Architecture
● Sharding Considerations
● The Balancing Act
What I’ll Talk About
● Crittercism - Background and Architecture
● Router (mongos) Architecture
● Sharding Considerations
● The Balancing Act
● Q&A
Critter-What?
Critter-What?
A Brief History...
Critter-What?
Our Founders
(Rob, Andrew, Jeeyun)
Critter-What?
Our Founders
(Rob, Andrew, Jeeyun)
Let’s make a mobile app!
It’ll be awesome!
Critter-What?
(Unnamed Dating App)
Critter-What?
Critter-What?
Critter-What?
Our Founders
(Rob, Andrew, Jeeyun)
Our app isn’t so awesome
after all...
Critter-What?
Critter-What?
Critter-What?
Critter-What?
Critter-What?
Critter-What?
Critter-What?
Critter-What?
Architecture
Architecture
Architecture
API
Architecture
APIFeedback
Architecture
APIFeedback
Crashes
Architecture
APIFeedback
App Loads
Crashes
Architecture
APIFeedback
App Loads
Crashes
Handled
Exceptions
Architecture
APIFeedback
App Loads
Crashes
Handled
Exceptions
Architecture
API
App Loads
Crashes
Handled
Exceptions
Architecture
API
App Loads
Crashes
Handled
Exceptions
Architecture
API
Crashes
Handled
Exceptions
App Loads
batch
Architecture
API
Crashes
Handled
Exceptions
Metadata
App Loads
batch
Architecture
DynamoDB
API
Crashes
Handled
Exceptions
Metadata
App Loads
batch
Architecture
DynamoDB
API
Crashes
Handled
Exceptions
Metadata
App Loads
batch
Architecture
DynamoDB
API
API
Crashes
Handled
Exceptions
Metadata
Performance
Data
Geo Data
App Loads
batch
Architecture
DynamoDB
API
API
Crashes
Handled
Exceptions
Metadata
Performance
Data
Geo Data
40,000 req/s
App Loads
batch
Growth
Router Architecture
Router Architecture
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
MongoDB Cluster
Router Architecture
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
client
process
application server
client
process
application server
Client Application(s) MongoDB Cluster
Router Architecture
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongos
client
process
application server
mongos
client
process
application server
Client Application(s) MongoDB Cluster
Router Architecture
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongos
client
process
application server
mongos
client
process
application server
Client Application(s) MongoDB Cluster
Router Architecture
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongos
client
process
application server
mongos
client
process
application server
Client Application(s) MongoDB Cluster
mongod
server
mongod
server
config
server
config servers
Router Architecture
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongos
client
process
application server
mongos
client
process
application server
Client Application(s) MongoDB Cluster
mongod
server
mongod
server
config
server
config servers
Router Architecture
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongos
client
process
application server
mongos
client
process
application server
Client Application(s) MongoDB Cluster
mongod
server
mongod
server
config
server
config servers
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
.
.
.
Single mongos per client problems we encountered:
Router Architecture
Router Architecture
Single mongos per client problems we encountered:
● thousands of connections to config servers
Router Architecture
Single mongos per client problems we encountered:
● thousands of connections to config servers
● config server CPU load
Router Architecture
Single mongos per client problems we encountered:
● thousands of connections to config servers
● config server CPU load
● configdb propagation delays
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
.
.
.
We went from this...
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app ms
app
.
.
.
.
.
.
To this.
Router Architecture
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongos
client
process
application server
mongos
client
process
application server
Client Application(s) MongoDB Cluster
Router Architecture
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongos
client
process
application server
mongos
client
process
application server
Client Application(s) MongoDB ClusterRouter Tier
Router Architecture
Separate mongos tier advantages:
Router Architecture
Separate mongos tier advantages:
● greatly reduced number of connections to each mongod
Router Architecture
Separate mongos tier advantages:
● greatly reduced number of connections to each mongod
● far fewer hosts talking to the config servers
Router Architecture
Separate mongos tier advantages:
● greatly reduced number of connections to each mongod
● far fewer hosts talking to the config servers
● much faster configdb propagation
Router Architecture
Separate mongos tier advantages:
● greatly reduced number of connections to each mongod
● far fewer hosts talking to the config servers
● much faster configdb propagation
Disadvantages:
Router Architecture
Separate mongos tier advantages:
● greatly reduced number of connections to each mongod
● far fewer hosts talking to the config servers
● much faster configdb propagation
Disadvantages:
● additional network hop
Router Architecture
Separate mongos tier advantages:
● greatly reduced number of connections to each mongod
● far fewer hosts talking to the config servers
● much faster configdb propagation
Disadvantages:
● additional network hop
● host failure has a larger effect
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
.
.
.
mongos-per-host failure:
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
.
.
.
mongos-per-host failure:
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
.
.
.
mongos-per-host failure:
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app ms
app
.
.
.
.
.
.
Separate mongos tier failure:
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app ms
app
.
.
.
.
.
.
Separate mongos tier failure:
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app ms
app
.
.
.
.
.
.
Separate mongos tier failure:
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app ms
app
.
.
.
.
.
.
So increase the number of
mongos routers:
Router Architecture
RS
RS
RS
conf
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
appms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
ms
app
.
.
.
.
.
.
ms
ms
So increase the number of
mongos routers:
Router Architecture - Evolve!
Router Architecture - Evolve!
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongos
client
process
application server
mongos
client
process
application server
Client Application(s) MongoDB ClusterMaybe at first,
doing the
mongos-per-host
architecture
is fine.
Maybe at first,
doing the
mongos-per-host
architecture
is fine.
And it will probably
remain fine
for quite a while.
Router Architecture - Evolve!
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongos
client
process
application server
mongos
client
process
application server
Client Application(s) MongoDB Cluster
Router Architecture - Evolve!
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongod
server
mongod
server
mongod
server
replica set
mongos
client
process
application server
mongos
client
process
application server
Client Application(s) MongoDB ClusterRouter TierThis is an area
where you can
and should be
willing to adapt
as you go
(and as needed).
Sharding Considerations
Pick something you want to live with.
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
What could we have done differently?
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
Sharding Considerations
The Balancing Act
The Balancing Act
Why wouldn’t you run the balancer in the first place?
The Balancing Act
Why wouldn’t you run the balancer in the first place?
● great question
The Balancing Act
Why wouldn’t you run the balancer in the first place?
● great question
● for us, it’s because we deleted some old data at one point, and left
a bunch of holes
The Balancing Act
Why wouldn’t you run the balancer in the first place?
● great question
● for us, it’s because we deleted some old data at one point, and left
a bunch of holes
○ we turned it off while deleting this data
The Balancing Act
Why wouldn’t you run the balancer in the first place?
● great question
● for us, it’s because we deleted some old data at one point, and left
a bunch of holes
○ we turned it off while deleting this data
○ and then were unable to turn it back on
The Balancing Act
Why wouldn’t you run the balancer in the first place?
● great question
● for us, it’s because we deleted some old data at one point, and left
a bunch of holes
○ we turned it off while deleting this data
○ and then were unable to turn it back on
● but maybe you start without it
The Balancing Act
Why wouldn’t you run the balancer in the first place?
● great question
● for us, it’s because we deleted some old data at one point, and left
a bunch of holes
○ we turned it off while deleting this data
○ and then were unable to turn it back on
● but maybe you start without it
● or maybe you need to turn it off for maintenance and forget to turn
it back on
The Balancing Act
Why wouldn’t you run the balancer in the first place?
● great question
● for us, it’s because we deleted some old data at one point, and left
a bunch of holes
○ we turned it off while deleting this data
○ and then were unable to turn it back on
● but maybe you start without it
● or maybe you need to turn it off for maintenance and forget to turn
it back on
Obviously, don’t do this. But if you do, here’s what happens...
The Balancing Act
Fresh, new, empty cluster… But no balancer running.
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
Now we’re pretty full, so let’s add another shard...
The Balancing Act
The Balancing Act
And keep inserting...
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
The Balancing Act
Suddenly we find ourselves with a very unbalanced cluster.
The Balancing Act
But if we enable the balancer, it will DoS the 5th shard!
The Balancing Act
The approximate effect looks something like this:
The Balancing Act
The approximate effect looks something like this:
The Balancing Act
The approximate effect looks something like this:
The Balancing Act
The approximate effect looks something like this:
The Balancing Act
The approximate effect looks something like this:
The Balancing Act
The approximate effect looks something like this:
The Balancing Act
The approximate effect looks something like this:
So what can we do?
The Balancing Act
So what can we do?
1. add IOPS
The Balancing Act
So what can we do?
1. add IOPS
2. make sure your config servers have plenty of CPU (and IOPS)
The Balancing Act
So what can we do?
1. add IOPS
2. make sure your config servers have plenty of CPU (and IOPS)
3. slowly move chunks manually
The Balancing Act
So what can we do?
1. add IOPS
2. make sure your config servers have plenty of CPU (and IOPS)
3. slowly move chunks manually
4. approach a balanced state
The Balancing Act
So what can we do?
1. add IOPS
2. make sure your config servers have plenty of CPU (and IOPS)
3. slowly move chunks manually
4. approach a balanced state
5. hold your breath
The Balancing Act
So what can we do?
1. add IOPS
2. make sure your config servers have plenty of CPU (and IOPS)
3. slowly move chunks manually
4. approach a balanced state
5. hold your breath
6. try re-enabling the balancer
The Balancing Act
How to manually balance:
1. determine a chunk on a hot shard
2. monitor effects on both the source and target shards
3. move the chunk
4. allow the system to settle
5. repeat
The Balancing Act
Conclusion here:
Run the balancer!
The Balancing Act
● Design ahead of time
o “NoSQL” lets you play it by ear
o but some of these decisions will bite you later
● Be willing to correct past mistakes
o dedicate time and resources to adapting
o learn how to live with the mistakes you can’t correct
Summary
References
● MongoDB Blog post (details on shard
migration):http://blog.mongodb.org/post/77278906988/crittercism-scaling-to-billions-of-
requests-per-day-on
● MongoDB Webinar (details on manual chunk
migrations):http://www.mongodb.com/presentations/webinar-back-basics-3-scaling-30000-requests-
second-mongodb
● Documentation on mongos routers:http://docs.mongodb.org/master/core/sharded-
cluster-query-routing/
● Documentation on the balancer:http://docs.mongodb.org/manual/tutorial/manage-
sharded-cluster-balancer/
● Documentation on shard keys:http://docs.mongodb.org/manual/core/sharding-shard-
key/
Crittercism: http://www.crittercism.com/ to learn more,
and http://www.crittercism.com/careers/ if you want to help us!
Q&A
Thank You!

More Related Content

Similar to Scaling Crittercism to 30,000 Requests Per Second and Beyond with MongoDB

Microservices Cloud-Native Roadshow Los Angeles
Microservices Cloud-Native Roadshow Los AngelesMicroservices Cloud-Native Roadshow Los Angeles
Microservices Cloud-Native Roadshow Los AngelesVMware Tanzu
 
Cloud-Native Roadshow - Microservices - Charlotte
Cloud-Native Roadshow - Microservices - CharlotteCloud-Native Roadshow - Microservices - Charlotte
Cloud-Native Roadshow - Microservices - CharlotteVMware Tanzu
 
Cloud-Native Roadshow - Microservices - San Francisco
Cloud-Native Roadshow - Microservices - San FranciscoCloud-Native Roadshow - Microservices - San Francisco
Cloud-Native Roadshow - Microservices - San FranciscoVMware Tanzu
 
Cloud-Native Roadshow - Microservices - Seattle
Cloud-Native Roadshow - Microservices - Seattle Cloud-Native Roadshow - Microservices - Seattle
Cloud-Native Roadshow - Microservices - Seattle VMware Tanzu
 
Cloud-Native Roadshow - Microservices - Toronto
Cloud-Native Roadshow - Microservices - TorontoCloud-Native Roadshow - Microservices - Toronto
Cloud-Native Roadshow - Microservices - TorontoVMware Tanzu
 
Breaking down monolithic applications into microservices - DEM06-S - Chicago ...
Breaking down monolithic applications into microservices - DEM06-S - Chicago ...Breaking down monolithic applications into microservices - DEM06-S - Chicago ...
Breaking down monolithic applications into microservices - DEM06-S - Chicago ...Amazon Web Services
 
How We Fixed Our MongoDB Problems
How We Fixed Our MongoDB Problems How We Fixed Our MongoDB Problems
How We Fixed Our MongoDB Problems MongoDB
 
Cloud-Native Roadshow - Microservices - St. Louis
Cloud-Native Roadshow - Microservices - St. LouisCloud-Native Roadshow - Microservices - St. Louis
Cloud-Native Roadshow - Microservices - St. LouisVMware Tanzu
 
Cloud-Native Roadshow - Microservices - Paris
Cloud-Native Roadshow - Microservices - ParisCloud-Native Roadshow - Microservices - Paris
Cloud-Native Roadshow - Microservices - ParisVMware Tanzu
 
Angular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - LinagoraAngular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - LinagoraLINAGORA
 
Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Fwdays
 
Stuttgart Cloud-Native Roadshow Microservices
Stuttgart Cloud-Native Roadshow MicroservicesStuttgart Cloud-Native Roadshow Microservices
Stuttgart Cloud-Native Roadshow MicroservicesVMware Tanzu
 
Breaking down monoliths - DEM04 - Santa Clara AWS Summit.pdf
Breaking down monoliths - DEM04 - Santa Clara AWS Summit.pdfBreaking down monoliths - DEM04 - Santa Clara AWS Summit.pdf
Breaking down monoliths - DEM04 - Santa Clara AWS Summit.pdfAmazon Web Services
 
Joomla Extreme Performance
Joomla Extreme PerformanceJoomla Extreme Performance
Joomla Extreme PerformanceMitch Pirtle
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Bram Adams
 
DevOps: Find Solutions, Not More Defects
DevOps: Find Solutions, Not More DefectsDevOps: Find Solutions, Not More Defects
DevOps: Find Solutions, Not More DefectsTechWell
 
Mongodb and Totsy - E-commerce Case Study
Mongodb and Totsy - E-commerce Case StudyMongodb and Totsy - E-commerce Case Study
Mongodb and Totsy - E-commerce Case StudyMitch Pirtle
 
Better and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and EnjoymentBetter and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and EnjoymentChris Holland
 
Cloud-Native Roadshow - Microservices - Denver
Cloud-Native Roadshow - Microservices - DenverCloud-Native Roadshow - Microservices - Denver
Cloud-Native Roadshow - Microservices - DenverVMware Tanzu
 

Similar to Scaling Crittercism to 30,000 Requests Per Second and Beyond with MongoDB (20)

Microservices Cloud-Native Roadshow Los Angeles
Microservices Cloud-Native Roadshow Los AngelesMicroservices Cloud-Native Roadshow Los Angeles
Microservices Cloud-Native Roadshow Los Angeles
 
Cloud-Native Roadshow - Microservices - Charlotte
Cloud-Native Roadshow - Microservices - CharlotteCloud-Native Roadshow - Microservices - Charlotte
Cloud-Native Roadshow - Microservices - Charlotte
 
Cloud-Native Roadshow - Microservices - San Francisco
Cloud-Native Roadshow - Microservices - San FranciscoCloud-Native Roadshow - Microservices - San Francisco
Cloud-Native Roadshow - Microservices - San Francisco
 
Cloud-Native Roadshow - Microservices - Seattle
Cloud-Native Roadshow - Microservices - Seattle Cloud-Native Roadshow - Microservices - Seattle
Cloud-Native Roadshow - Microservices - Seattle
 
Cloud-Native Roadshow - Microservices - Toronto
Cloud-Native Roadshow - Microservices - TorontoCloud-Native Roadshow - Microservices - Toronto
Cloud-Native Roadshow - Microservices - Toronto
 
Breaking down monolithic applications into microservices - DEM06-S - Chicago ...
Breaking down monolithic applications into microservices - DEM06-S - Chicago ...Breaking down monolithic applications into microservices - DEM06-S - Chicago ...
Breaking down monolithic applications into microservices - DEM06-S - Chicago ...
 
How We Fixed Our MongoDB Problems
How We Fixed Our MongoDB Problems How We Fixed Our MongoDB Problems
How We Fixed Our MongoDB Problems
 
Web Design
Web DesignWeb Design
Web Design
 
Cloud-Native Roadshow - Microservices - St. Louis
Cloud-Native Roadshow - Microservices - St. LouisCloud-Native Roadshow - Microservices - St. Louis
Cloud-Native Roadshow - Microservices - St. Louis
 
Cloud-Native Roadshow - Microservices - Paris
Cloud-Native Roadshow - Microservices - ParisCloud-Native Roadshow - Microservices - Paris
Cloud-Native Roadshow - Microservices - Paris
 
Angular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - LinagoraAngular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - Linagora
 
Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)
 
Stuttgart Cloud-Native Roadshow Microservices
Stuttgart Cloud-Native Roadshow MicroservicesStuttgart Cloud-Native Roadshow Microservices
Stuttgart Cloud-Native Roadshow Microservices
 
Breaking down monoliths - DEM04 - Santa Clara AWS Summit.pdf
Breaking down monoliths - DEM04 - Santa Clara AWS Summit.pdfBreaking down monoliths - DEM04 - Santa Clara AWS Summit.pdf
Breaking down monoliths - DEM04 - Santa Clara AWS Summit.pdf
 
Joomla Extreme Performance
Joomla Extreme PerformanceJoomla Extreme Performance
Joomla Extreme Performance
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!
 
DevOps: Find Solutions, Not More Defects
DevOps: Find Solutions, Not More DefectsDevOps: Find Solutions, Not More Defects
DevOps: Find Solutions, Not More Defects
 
Mongodb and Totsy - E-commerce Case Study
Mongodb and Totsy - E-commerce Case StudyMongodb and Totsy - E-commerce Case Study
Mongodb and Totsy - E-commerce Case Study
 
Better and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and EnjoymentBetter and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and Enjoyment
 
Cloud-Native Roadshow - Microservices - Denver
Cloud-Native Roadshow - Microservices - DenverCloud-Native Roadshow - Microservices - Denver
Cloud-Native Roadshow - Microservices - Denver
 

More from MongoDB

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump StartMongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB
 

More from MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Recently uploaded

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 

Recently uploaded (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 

Scaling Crittercism to 30,000 Requests Per Second and Beyond with MongoDB

Editor's Notes

  1. I’m Mike, I run Ops at Crittercism. I’m going to tell you the story of how we’ve scaled to handle over 30k req/s using a storage strategy based on MongoDB
  2. Between proposing this talk and now, we’ve actually grown some more, and now top 40-45k r/s on a daily basis This is about 3.5B requests per day
  3. This is really the story of learning as you go
  4. I’ll tell you how Crittercism got started, some of the lessons we’ve learned along the way, and some advice we can share based on those experiences
  5. I’ll tell you how Crittercism got started, some of the lessons we’ve learned along the way, and some advice we can share based on those experiences
  6. I’ll tell you how Crittercism got started, some of the lessons we’ve learned along the way, and some advice we can share based on those experiences
  7. I’ll tell you how Crittercism got started, some of the lessons we’ve learned along the way, and some advice we can share based on those experiences
  8. some advice from our experience about things to do and things not to do
  9. I’ll give you a brief overview of what we’re doing
  10. some advice based on what we’ve learned related to router architecture
  11. I’ll talk about some sharding considerations and the issues that can arise
  12. I’ll tell you a story about the Mongo Balancer
  13. I’ll be sure to leave time for Q&A
  14. First let me tell you a bit about who we are and the problem we’re trying to solve
  15. so they made a dating app, which shall remain unnamed
  16. and it went over about as well as the dating scene in The Social Network
  17. poor star rating, and they didn’t know why
  18. So they made a “feedback widget”, and pivoted September 2010 (from Wayback Machine) Enable mobile app developers to allow their users to provide “criticism” of their apps (outside of the app store) Not just a star rating
  19. October 2011 added crash reports to help improve ratings now we’re the ones helping you self-criticize
  20. added live stats to see app performance in real-time
  21. now they’re happy the dating app didn’t pan out, but in the process of making it better, we’ve come to provide something that helps everybody improve their apps
  22. today (2014) - what it’s evolved into collecting tons of detailed analytics data - crash reports, groupings Geo data launched in 2013 (just kidding, this is stored in postgres) API & iPad app launched in 2014 - more aggregations of performance data (more ways to view it)
  23. this guy feels overwhelmed at times so how do we deal with all of this?
  24. so what do we do with all of this data?
  25. we started by setting up a db (mongo, of course) we’ve used mongo from the start why mongo? has RDBMS characteristics, has both OLTP and warehose-like properties, lots of flexibility, and it scales
  26. put an ingest API in front of it
  27. collect user feedback from our feedback widget SDK
  28. then we start storing crash data in mongodb, too
  29. but what makes crash data more useful is when you have app load data as well -> crash rate (which is a differentiating feature for us)
  30. you start catching more errors, but you still want to know about them so let’s add handled exceptions as well
  31. we realized crash reporting was really the product, so we discontinued the feedback
  32. and our volume kept going up, especially app loads
  33. app loads are the highest-volume component here, so let’s count them in a memory-based data store (redis), and batch up the writes before persisting the data to mongo
  34. add user metadata as well, to help support desks
  35. but that’s a different kind of data and a different volume and access pattern, so let’s add dynamodb into the mix
  36. our volume keeps going up, so let’s cache this app data to make our responses faster
  37. added APM, which introduced a lot of different data types and structures so we added another ingest API and postgres into the mix (but obviously that’s not going to be part of this talk…)
  38. so we’ve scaled to 40k/s by being willing to adapt incrementally, and willing to use whatever works / whatever it takes
  39. 2-year period went from 700/s (60M/day) to 40-45k/s (3.8B/day)
  40. one of the biggest things we did to help ourselves scale was to consolidate the mongos routers
  41. start with a sharded mongodb cluster
  42. add your application servers
  43. each application server has a local mongos process each client process connects to a local mongos router
  44. mongos routers talk to mongods to read and write data mongos routes queries and returns results
  45. the mongos knows where data resides thanks to the config servers, which keep track of the shard topology (location of data throughout the cluster)
  46. mongos routers talk to config servers as well, to maintain an updated version of the configdb
  47. and the config servers also talk to the mongods now let’s zoom out a bit...
  48. and you’re going to grow, so you’re going to add more and more application servers
  49. and they’re all maintaining these connections between their local mongos, the config servers, and the shard servers
  50. (not showing all the lines here, but you get the idea)
  51. could mean your application is reading stale data, or can’t find the data it needs when it needs it (and maybe it has to retry, which means it’s now slower)
  52. so we went from this...
  53. to this
  54. closer view
  55. move the mongos routers to their own tier be smart about how you route to them (we use chef to keep it within the same AZ)
  56. due to connection re-use from mongos to mongod
  57. due to far fewer mongos processes
  58. far fewer nodes for it to propagate to
  59. be aware that this does introduce some disadvantages, too
  60. we reduce this by keeping it in the same availability zone / data center
  61. let’s look at what that implies
  62. in the mongos-per-app-server setup, if one fails...
  63. only that one application server is affected
  64. but with a separate mongos tier, if one mongos router fails...
  65. all app servers connected to it will be affected so be aware of this, and take it into account
  66. so maybe increase the number of mongos routers (but still far fewer than you had before)
  67. account for which % of your app servers going down you can tolerate (also depends on what your driver allows you to do and how it behaves)
  68. So it’s great to have aspects of your architecture that you can change over time. But some things you can’t...
  69. This is a fundamental design decision that will have huge implications for a long time, so think about it carefully.
  70. Say you have 4 shards. Let’s say each of the World Cup teams has an app, and we shard by app_id.
  71. Let’s distribute them evenly, as is likely to be the case.
  72. Now, tomorrow the US and Germany are going to play each other
  73. So those 2 apps are going to get heavy use, but they happen to be on the same shard, so uh-oh...
  74. So those 2 apps are going to get heavy use, but they happen to be on the same shard, so uh-oh...
  75. Now this shard isn’t happy Higher load, more lock contention, slower response time for queries to this shard (which are your most common queries due to these apps’ popularity at this time)
  76. So let’s add another shard (scale horizontally)...
  77. That might help if we had more teams’ apps to add
  78. Those new apps had somewhere to go, which is nice. But this hasn’t helped our uneven access pattern at all. So what else can we do? We can try scaling that shard vertically - by performing a migration procedure (see my blog post for details).
  79. And hopefully it now cools off
  80. But the next day there will be a different game... will those two teams’ apps be on different shards? even if so, maybe now we have 2 pretty-hot shards instead of 1 super-hot one so maybe you decide to just live with heterogenous shard servers to manage (probably much lesser evil than trying to re-shard)
  81. We could shard on something other than app_id (for us, maybe that’d be crash_id, which is a randomly-generated hash) and spread the data for each app across all shards
  82. So now when the US vs Germany game happens tomorrow...
  83. Now we’re reading a bit from many shards, rather than a lot from few shards but now our queries will be a bit slower (due to having to read from many more shards) so understand the trade-off All of this is assuming that your cluster is balanced...
  84. The balancer is a super-important part of a sharded mongo cluster… You should love it.
  85. Start with an empty cluster, and start filling it with data (we’ll denote “fullness” by going from green to red) This is an example of what can happen when the balancer is not running
  86. Okay, so now we have a very unbalanced cluster. 3 of our replica sets are very full, one is pretty full, and the newest one is hardly in use.
  87. The balancer will see the full shards and one near-empty one, and will want to move a ton of chunks all at once, causing severe I/O strain on the system.
  88. (another version)
  89. you’re going to be adding a lot of I/O to the system when you move chunks, and it still has to be able to perform its normal functions, so over-provision
  90. updating the configdb (when you move chunks) puts load on your config servers, so make sure they’re ready to handle it
  91. this is tedious and will take a LONG time (more detail in a minute)
  92. gradually you’ll get to a happier place
  93. take a deep breath before you...
  94. be ready to turn it off and return to step 3 if needed, then try again
  95. See MongoDB webinar I gave (in references) for details on this procedure
  96. seems obvious, but not always the case
  97. best-case scenario is to make all of the right choices up front… but you’re probably not going to do that. (though hopefully you can learn a bit from our experience and minimize the wrong choices you make). the good news is MongoDB is still working for us, despite the headaches we’ve had to deal with.