SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
DAT204 - SmugMug: From MySQL to
Amazon DynamoDB
(and some of the tools we used to get there)
Brad Clawsie, SmugMug.com
November 14, 2013

© 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.
Welcome!
• I'm Brad Clawsie, an engineer at SmugMug.com
• SmugMug.com is a platform for hosting, sharing,
and selling photos
• Our target market is professional and enthusiast
photographers
This Talk…
• Isn't an exhaustive Amazon DynamoDB tutorial
• Is about some observations made while
migrating some features from MySQL to
Amazon DynamoDB
• Is an introduction to some of the tools that have
helped us migrate to Amazon DynamoDB
Background
• SmugMug.com started in 2003
• LAMP code base
• A few machines/colocation
→ a lot of machines/colocations
→ Amazon Web Services
• Hundreds of thousands of paying customers
• Millions of viewers, billions of photos, petabytes
of storage
Amazon DynamoDB in a Nutshell
•
•
•
•
•
•

Tables → [Keys → Items]
Items → [AttributeName → Attribute]
Attribute → {Type:Value}
Provisioned throughput
NoSQL-database-as-a-service
Create, Get, Put, Update, Delete, Query, Scan
MySQL at SmugMug
MySQL on Our Terms...
• “SQL”, but not relational
• We avoid joins, foreign keys, complex queries, views,
etc.

• Simplified our model so that caching was easier
to implement
• Used like a key (id) → values (row) system
MySQL on Our Terms...
• Aggressive denormalization is common in many
online applications
• Upside – easy to migrate some of these tables
and supporting code to “NoSQL” style database
• Downside(?) – database does less, code does
more
So Why Change?
We're hitting roadblocks that can't be addressed
by:
• More/better hardware
• More ops staff
• Best practices
Notable Issue #1: “OFFLINE OPS”
like ALTER TABLE
• We used to have a fair number of read-only/sitemaintenance downtime to ALTER tables
• As number of users grows, this always
inconveniences someone
• Introduces risk into the code
• Other RDBMs are better about this
Temporary Relief...
• Introduced the concept of treating a column as a
JSON-like BLOB type for embedding
varying/new data
• Bought us some time and flexibility, and reduced
the need for ALTER TABLE-related downtime
• But MySQL wasn't intended to be an ID →
BLOB system, and other issues remained
Notable Issue #2: Concurrency
• MySQL can manifest some non-graceful
degradation under heavy write load
• We're already isolating non-essential tables to
their own databases and denormalizing where
we can...the problem persists
Notable Issue #3: Replication
• A necessary headache, but in fairness MySQL is
pretty good at it
• Performance issues (single threaded etc.)
• Makes it harder to reason about consistency in
code
• Big ops headache
Notable Issue #4: Ops
Keeping all of this going requires an ops team...
• People
• Colocation
• “Space” concerns – storage, network
capacity, and all the hardware to meet
anticipated capacity needs
Intangibles
•
•
•
•

We have the resources to try out some new things
We were already AWS fan boys
Big users of Amazon S3
Recently moved out of colocations and into Amazon
EC2
• Our ops staff has become AWS experts
• So we would give an AWS database consideration
Immediate Observations
•
•
•
•
•
•

Limited key structure
Limited data types
ACID-like on Amazon DynamoDB's terms
Query/Scan operations not that interesting
But, freedom from most space constraints
Leaving the developer with primarily time
constraints
First Steps
• Start with a solved problem – stats/analytics
• SmugMug's stats stack is a relatively simple
data model:
{“u”:”1”,”i”:”123”,”a”:”321”...}
• We measure hits on the frontend and create
lines of JSON with user, image, album, time, etc.
First Steps
• Analytics needs reliable throughput – new data is
always being generated
• Space concerns (hardware, storage, replication)
It was obvious that Amazon DynamoDB would free
us from some space constraints. However, we
were naive about Amazon DynamoDB's special
time constraints.
Very Simple Tables
•
•
•
•

A site key (user, image, album id) as HashKey
A date as RangeKey
The rest of the data
Just a few tables
• We'll have to manage removing data from them over
time

• Obvious: fewer tables → lower bill
Need for Tools
• Even with our simple initial test bed, we saw the
need for more tooling
• We are huge users of memcache multi*
functions
• So we wanted to be able to have arbitrary-sized
“batch” input requests
• PHP doesn't do concurrency
So...a Proxy
• A long-running proxy to take requests and
manage concurrency for PHP
• A proxy to allow us to cheat a little with sizing
our requests*
• Needed a tool that was geared toward building
tools like proxies
• Go fit the bill
A Little Risk
• Writing tools for a young database in a young
programming language
• Resulted in two codebases we will share:
• GoDynamo: equivalent of the AWS SDKs
• BBPD: an HTTP proxy based on GoDynamo
Observation #1:
On Amazon DynamoDB's Terms
• Sensible key ↔ application mapping
• Denormalization
• No reliance on complex queries or other
relational features
• Many at-scale MySQL users are already using it
in this way anyway
Observation #1:
On Amazon DynamoDB's Terms
• Avoid esoteric features
• Don't force it
• Amazon DynamoDB is not the only AWS database

• Nice to have a “control” to use as a yardstick of
success
Observation #2:
Respect Throttling
• Coming from MySQL, graceful degradation is an
expected artifact of system analysis
• But Amazon DynamoDB is a shared service
using a simple WAN protocol
• You either get a 2xx (success), 4xx, or 5xx
(some kind of failure)
• A binary distinction
Observation #2:
Respect Throttling
• Throttling is the failure state of a properlyformatted request
• Throttling happens when the rate of growth of
requests changes quickly (my observation)
• Correlate your throttling to your provision
Observation #2:
Respect Throttling
• Typically, throttling happens well below the
provisioning level
• Don't reflexively increase your provisioning
• Amazon DynamoDB behaves best when you
optimize requests for space and time
Space Optimizations
•
•
•
•

Compress data (reduce requests)
Cache data (read locally when possible)
Avoid clustering requests to tables/keys
Use key/table structures if possible (often the
application dictates this)
Time Optimizations
• Reduce herding/spikes if possible
• Queue requests to be processed as a controlled
rate of flow elsewhere
• Experiment with concurrency to achieve
optimum reqs/sec
Don't Obsess Over Throttling
• Some throttling is unavoidable
• “Hot keys” are unavoidable
• The service will get better about adapting to
typical use
• Experiment: flow, distribution, mix of requests,
types of requests, etc.
• Throttling is a strong warning
Observation #3:
Develop with Real(ish) Data
• “Test” data and “test” volume will fail you when
you launch
• Again, no graceful degradation
• Your real data has its own flow and distribution
• You must optimize for that

• Once again, set up a control to validate
observations
Observation #4:
Live with the Limits
• Don't try to recreate relational features in
Amazon DynamoDB
• Query/Scan are limited, be realistic
• You can't really see behind the curtain
• Feedback from the console is limited
• Expect to iterate
Success?
Recall our original MySQL gripes:
(1) ALTER TABLE: kind of solved
Amazon DynamoDB doesn't have full table
schemas so to speak, so while we are able to
add Attributes to an Item at will, we can only
change a table's provisioning once created.
Success?
(2) Replication: solved
But opaque to using Amazon DynamoDB.
(3) Concurrency: kind of solved
Throttling introduces a new kind of
concurrency issue, but at least it is limited to a
single table.
Success?
(4) Ops: mostly solved
Ops doesn't have to babysit servers anymore,
but they need to learn the peculiarities of
Amazon DynamoDB and accept the limited
value of the console and available body of
knowledge.
Recap: What We Wrote
• GoDynamo: like the AWS SDK, but in Go
• BBPD: a proxy written on GoDynamo
• See github.com/smugmug
Recap: Why a Proxy?
• Allows us to integrate Amazon DynamoDB with
PHP so concurrency can be put to use
• Moves operations to an efficient runtime
• Provides for simple debugging via curl and can
check for well-formedness of requests locally
• Hides details like renewing IAM credentials
Trivial Examples
# Convenience endpoints available directly:
$ curl -X POST -d '{"TableName":"user","Key":{"UserID":{"N":"1"}, 
"Date":{"N":"20131017"}}}' http://localhost:12333/GetItem
# Or specify the endpoint in a header:
$ curl -H 'X-Amz-Target: DynamoDB_20120810.GetItem' 
-X POST -d '{"TableName":"user","Key":{"UserID":{"N":"1"}, 
"Date":{"N":"20131017"}}}' http://localhost:12333/
BBPD is Just a Layer
• GoDynamo is where the heavy lifting is done
• Libraries for all endpoints
• AWS Signature Version 4 support
• IAM support (transparent and thread-safe)*
• Other nonstandard goodies

• Pro-concurrency, high performance
• Enables some cool hacks
GoDynamo: Why Go?
• Strong types, concurrency, Unicode, separate
compilation, fast startup, low(ish) memory use,
static binary as output of compiler (deploy →
scp my_program)
• Types ↔ JSON is easy, flexible, and idiomatic
• Easy to learn and sell to your boss
Trivial Example
// control our concurrent access to IAM creds in the background
iam_ready_chan := make(chan bool)
go conf_iam.GoIAM(iam_ready_chan)
// try to get an Item from a table
var get1 get_item.Request
get1.TableName = “my-table”
get1.Key = make(endpoint.Item)
get1.Key[“myhashkey”] = endpoint.AttributeValue{s:”thishashkey”}
get1.Key[“myrangekey”] = endpoint.AttributeValue{n:”1”}
body,code,err := get1.EndpointReq()
if err != nil || code != http.StatusOK {
panic(“uh oh”)
} else {
fmt.Printf(“%vn”,body)
}
AWS Identity and Access
Management (IAM)
• Included as a dependency is another package
worth mentioning: goawsroles
• An interface that describes how to handle IAM
credentials
• An implementation for text files
• Suspends threads as credentials are being
updated
Just the Beginning
• Available at github.com/smugmug
• Standard disclaimer – works for us, but YMMV!
• Would love for you to use it and help create a
community of contributors
Thanks! :)
Please give us your feedback on this
presentation

DAT204
As a thank you, we will select prize
winners daily for completed surveys!

Weitere ähnliche Inhalte

Was ist angesagt?

Data Warehousing with Amazon Redshift
Data Warehousing with Amazon RedshiftData Warehousing with Amazon Redshift
Data Warehousing with Amazon RedshiftAmazon Web Services
 
Dynamodb Presentation
Dynamodb PresentationDynamodb Presentation
Dynamodb Presentationadvaitdeo
 
Getting Strated with Amazon Dynamo DB (Jim Scharf) - AWS DB Day
Getting Strated with Amazon Dynamo DB (Jim Scharf) - AWS DB DayGetting Strated with Amazon Dynamo DB (Jim Scharf) - AWS DB Day
Getting Strated with Amazon Dynamo DB (Jim Scharf) - AWS DB DayAmazon Web Services Korea
 
(DAT201) Introduction to Amazon Redshift
(DAT201) Introduction to Amazon Redshift(DAT201) Introduction to Amazon Redshift
(DAT201) Introduction to Amazon RedshiftAmazon Web Services
 
Amazon Redshift Deep Dive - February Online Tech Talks
Amazon Redshift Deep Dive - February Online Tech TalksAmazon Redshift Deep Dive - February Online Tech Talks
Amazon Redshift Deep Dive - February Online Tech TalksAmazon Web Services
 
Deep Dive Amazon Redshift for Big Data Analytics - September Webinar Series
Deep Dive Amazon Redshift for Big Data Analytics - September Webinar SeriesDeep Dive Amazon Redshift for Big Data Analytics - September Webinar Series
Deep Dive Amazon Redshift for Big Data Analytics - September Webinar SeriesAmazon Web Services
 
(DAT308) Yahoo! Analyzes Billions of Events a Day on Amazon Redshift
(DAT308) Yahoo! Analyzes Billions of Events a Day on Amazon Redshift(DAT308) Yahoo! Analyzes Billions of Events a Day on Amazon Redshift
(DAT308) Yahoo! Analyzes Billions of Events a Day on Amazon RedshiftAmazon Web Services
 
(BDT401) Amazon Redshift Deep Dive: Tuning and Best Practices
(BDT401) Amazon Redshift Deep Dive: Tuning and Best Practices(BDT401) Amazon Redshift Deep Dive: Tuning and Best Practices
(BDT401) Amazon Redshift Deep Dive: Tuning and Best PracticesAmazon Web Services
 
AWS (Amazon Redshift) presentation
AWS (Amazon Redshift) presentationAWS (Amazon Redshift) presentation
AWS (Amazon Redshift) presentationVolodymyr Rovetskiy
 
Compare DynamoDB vs. MongoDB
Compare DynamoDB vs. MongoDBCompare DynamoDB vs. MongoDB
Compare DynamoDB vs. MongoDBAmar Das
 
Best Practices for Data Warehousing with Amazon Redshift | AWS Public Sector ...
Best Practices for Data Warehousing with Amazon Redshift | AWS Public Sector ...Best Practices for Data Warehousing with Amazon Redshift | AWS Public Sector ...
Best Practices for Data Warehousing with Amazon Redshift | AWS Public Sector ...Amazon Web Services
 
Real-Time Data Exploration and Analytics with Amazon Elasticsearch Service
Real-Time Data Exploration and Analytics with Amazon Elasticsearch ServiceReal-Time Data Exploration and Analytics with Amazon Elasticsearch Service
Real-Time Data Exploration and Analytics with Amazon Elasticsearch ServiceAmazon Web Services
 
AWS July Webinar Series: Amazon Redshift Optimizing Performance
AWS July Webinar Series: Amazon Redshift Optimizing PerformanceAWS July Webinar Series: Amazon Redshift Optimizing Performance
AWS July Webinar Series: Amazon Redshift Optimizing PerformanceAmazon Web Services
 
A tour of Amazon Redshift
A tour of Amazon RedshiftA tour of Amazon Redshift
A tour of Amazon RedshiftKel Graham
 
Building your data warehouse with Redshift
Building your data warehouse with RedshiftBuilding your data warehouse with Redshift
Building your data warehouse with RedshiftAmazon Web Services
 

Was ist angesagt? (20)

Data Warehousing with Amazon Redshift
Data Warehousing with Amazon RedshiftData Warehousing with Amazon Redshift
Data Warehousing with Amazon Redshift
 
Dynamodb Presentation
Dynamodb PresentationDynamodb Presentation
Dynamodb Presentation
 
Getting Strated with Amazon Dynamo DB (Jim Scharf) - AWS DB Day
Getting Strated with Amazon Dynamo DB (Jim Scharf) - AWS DB DayGetting Strated with Amazon Dynamo DB (Jim Scharf) - AWS DB Day
Getting Strated with Amazon Dynamo DB (Jim Scharf) - AWS DB Day
 
(DAT201) Introduction to Amazon Redshift
(DAT201) Introduction to Amazon Redshift(DAT201) Introduction to Amazon Redshift
(DAT201) Introduction to Amazon Redshift
 
Amazon Redshift Deep Dive - February Online Tech Talks
Amazon Redshift Deep Dive - February Online Tech TalksAmazon Redshift Deep Dive - February Online Tech Talks
Amazon Redshift Deep Dive - February Online Tech Talks
 
Masterclass - Redshift
Masterclass - RedshiftMasterclass - Redshift
Masterclass - Redshift
 
Deep Dive Amazon Redshift for Big Data Analytics - September Webinar Series
Deep Dive Amazon Redshift for Big Data Analytics - September Webinar SeriesDeep Dive Amazon Redshift for Big Data Analytics - September Webinar Series
Deep Dive Amazon Redshift for Big Data Analytics - September Webinar Series
 
(DAT308) Yahoo! Analyzes Billions of Events a Day on Amazon Redshift
(DAT308) Yahoo! Analyzes Billions of Events a Day on Amazon Redshift(DAT308) Yahoo! Analyzes Billions of Events a Day on Amazon Redshift
(DAT308) Yahoo! Analyzes Billions of Events a Day on Amazon Redshift
 
DynamodbDB Deep Dive
DynamodbDB Deep DiveDynamodbDB Deep Dive
DynamodbDB Deep Dive
 
Introducing DynamoDB
Introducing DynamoDBIntroducing DynamoDB
Introducing DynamoDB
 
(BDT401) Amazon Redshift Deep Dive: Tuning and Best Practices
(BDT401) Amazon Redshift Deep Dive: Tuning and Best Practices(BDT401) Amazon Redshift Deep Dive: Tuning and Best Practices
(BDT401) Amazon Redshift Deep Dive: Tuning and Best Practices
 
AWS (Amazon Redshift) presentation
AWS (Amazon Redshift) presentationAWS (Amazon Redshift) presentation
AWS (Amazon Redshift) presentation
 
Compare DynamoDB vs. MongoDB
Compare DynamoDB vs. MongoDBCompare DynamoDB vs. MongoDB
Compare DynamoDB vs. MongoDB
 
Best Practices for Data Warehousing with Amazon Redshift | AWS Public Sector ...
Best Practices for Data Warehousing with Amazon Redshift | AWS Public Sector ...Best Practices for Data Warehousing with Amazon Redshift | AWS Public Sector ...
Best Practices for Data Warehousing with Amazon Redshift | AWS Public Sector ...
 
Deep Dive on Amazon DynamoDB
Deep Dive on Amazon DynamoDBDeep Dive on Amazon DynamoDB
Deep Dive on Amazon DynamoDB
 
Amazon Redshift Masterclass
Amazon Redshift MasterclassAmazon Redshift Masterclass
Amazon Redshift Masterclass
 
Real-Time Data Exploration and Analytics with Amazon Elasticsearch Service
Real-Time Data Exploration and Analytics with Amazon Elasticsearch ServiceReal-Time Data Exploration and Analytics with Amazon Elasticsearch Service
Real-Time Data Exploration and Analytics with Amazon Elasticsearch Service
 
AWS July Webinar Series: Amazon Redshift Optimizing Performance
AWS July Webinar Series: Amazon Redshift Optimizing PerformanceAWS July Webinar Series: Amazon Redshift Optimizing Performance
AWS July Webinar Series: Amazon Redshift Optimizing Performance
 
A tour of Amazon Redshift
A tour of Amazon RedshiftA tour of Amazon Redshift
A tour of Amazon Redshift
 
Building your data warehouse with Redshift
Building your data warehouse with RedshiftBuilding your data warehouse with Redshift
Building your data warehouse with Redshift
 

Andere mochten auch

プログラマに贈るクラウドとの上手な付き合い方
プログラマに贈るクラウドとの上手な付き合い方プログラマに贈るクラウドとの上手な付き合い方
プログラマに贈るクラウドとの上手な付き合い方Keisuke Nishitani
 
Dataflow shuffle service
Dataflow shuffle service Dataflow shuffle service
Dataflow shuffle service Yuta Hono
 
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)Ryusaburo Tanaka
 
こんなIntelli jはイヤだ
こんなIntelli jはイヤだこんなIntelli jはイヤだ
こんなIntelli jはイヤだ勝信 今井
 
[db tech showcase Tokyo 2015] A32:Amazon Redshift Deep Dive by アマゾン データ サービス ...
[db tech showcase Tokyo 2015] A32:Amazon Redshift Deep Dive by アマゾン データ サービス ...[db tech showcase Tokyo 2015] A32:Amazon Redshift Deep Dive by アマゾン データ サービス ...
[db tech showcase Tokyo 2015] A32:Amazon Redshift Deep Dive by アマゾン データ サービス ...Insight Technology, Inc.
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdfakiko_pusu
 
Application Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless WorldApplication Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless WorldKeisuke Nishitani
 
AWS SAMで始めるサーバーレスアプリケーション開発
AWS SAMで始めるサーバーレスアプリケーション開発AWS SAMで始めるサーバーレスアプリケーション開発
AWS SAMで始めるサーバーレスアプリケーション開発真吾 吉田
 

Andere mochten auch (10)

プログラマに贈るクラウドとの上手な付き合い方
プログラマに贈るクラウドとの上手な付き合い方プログラマに贈るクラウドとの上手な付き合い方
プログラマに贈るクラウドとの上手な付き合い方
 
Dataflow shuffle service
Dataflow shuffle service Dataflow shuffle service
Dataflow shuffle service
 
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
 
こんなIntelli jはイヤだ
こんなIntelli jはイヤだこんなIntelli jはイヤだ
こんなIntelli jはイヤだ
 
[db tech showcase Tokyo 2015] A32:Amazon Redshift Deep Dive by アマゾン データ サービス ...
[db tech showcase Tokyo 2015] A32:Amazon Redshift Deep Dive by アマゾン データ サービス ...[db tech showcase Tokyo 2015] A32:Amazon Redshift Deep Dive by アマゾン データ サービス ...
[db tech showcase Tokyo 2015] A32:Amazon Redshift Deep Dive by アマゾン データ サービス ...
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf
 
第六回Jenkins勉強会
第六回Jenkins勉強会第六回Jenkins勉強会
第六回Jenkins勉強会
 
Pokémon GOとGCP
Pokémon GOとGCPPokémon GOとGCP
Pokémon GOとGCP
 
Application Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless WorldApplication Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless World
 
AWS SAMで始めるサーバーレスアプリケーション開発
AWS SAMで始めるサーバーレスアプリケーション開発AWS SAMで始めるサーバーレスアプリケーション開発
AWS SAMで始めるサーバーレスアプリケーション開発
 

Ähnlich wie SmugMug: From MySQL to Amazon DynamoDB (DAT204) | AWS re:Invent 2013

Serverless Architecture Patterns
Serverless Architecture PatternsServerless Architecture Patterns
Serverless Architecture PatternsAmazon Web Services
 
serverless_architecture_patterns_london_loft.pdf
serverless_architecture_patterns_london_loft.pdfserverless_architecture_patterns_london_loft.pdf
serverless_architecture_patterns_london_loft.pdfAmazon Web Services
 
Scaling on AWS for the First 10 Million Users
Scaling on AWS for the First 10 Million UsersScaling on AWS for the First 10 Million Users
Scaling on AWS for the First 10 Million UsersAmazon Web Services
 
Framing the Argument: How to Scale Faster with NoSQL
Framing the Argument: How to Scale Faster with NoSQLFraming the Argument: How to Scale Faster with NoSQL
Framing the Argument: How to Scale Faster with NoSQLInside Analysis
 
Real world cloud formation feb 2014 final
Real world cloud formation feb 2014 finalReal world cloud formation feb 2014 final
Real world cloud formation feb 2014 finalHoward Glynn
 
ENT309 scaling up to your first 10 million users
ENT309 scaling up to your first 10 million usersENT309 scaling up to your first 10 million users
ENT309 scaling up to your first 10 million usersAmazon Web Services
 
Scaling the Platform for Your Startup
Scaling the Platform for Your StartupScaling the Platform for Your Startup
Scaling the Platform for Your StartupAmazon Web Services
 
ENT309 Scaling Up to Your First 10 Million Users
ENT309 Scaling Up to Your First 10 Million UsersENT309 Scaling Up to Your First 10 Million Users
ENT309 Scaling Up to Your First 10 Million UsersAmazon Web Services
 
ENT309 Scaling Up to Your First 10 Million Users
ENT309 Scaling Up to Your First 10 Million UsersENT309 Scaling Up to Your First 10 Million Users
ENT309 Scaling Up to Your First 10 Million UsersAmazon Web Services
 
AWS Serverless patterns & best-practices in AWS
AWS Serverless  patterns & best-practices in AWSAWS Serverless  patterns & best-practices in AWS
AWS Serverless patterns & best-practices in AWSDima Pasko
 
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...Amazon Web Services
 
AWS Summit London 2014 | Scaling on AWS for the First 10 Million Users (200)
AWS Summit London 2014 | Scaling on AWS for the First 10 Million Users (200)AWS Summit London 2014 | Scaling on AWS for the First 10 Million Users (200)
AWS Summit London 2014 | Scaling on AWS for the First 10 Million Users (200)Amazon Web Services
 
Production Ready Serverless Java Applications in 3 Weeks AWS UG Cologne Febru...
Production Ready Serverless Java Applications in 3 Weeks AWS UG Cologne Febru...Production Ready Serverless Java Applications in 3 Weeks AWS UG Cologne Febru...
Production Ready Serverless Java Applications in 3 Weeks AWS UG Cologne Febru...Vadym Kazulkin
 
AWS Well Architected-Info Session WeCloudData
AWS Well Architected-Info Session WeCloudDataAWS Well Architected-Info Session WeCloudData
AWS Well Architected-Info Session WeCloudDataWeCloudData
 
(ARC309) Getting to Microservices: Cloud Architecture Patterns
(ARC309) Getting to Microservices: Cloud Architecture Patterns(ARC309) Getting to Microservices: Cloud Architecture Patterns
(ARC309) Getting to Microservices: Cloud Architecture PatternsAmazon Web Services
 
How to Build a Big Data Application: Serverless Edition
How to Build a Big Data Application: Serverless EditionHow to Build a Big Data Application: Serverless Edition
How to Build a Big Data Application: Serverless Editionecobold
 
(ARC301) Scaling Up to Your First 10 Million Users
(ARC301) Scaling Up to Your First 10 Million Users(ARC301) Scaling Up to Your First 10 Million Users
(ARC301) Scaling Up to Your First 10 Million UsersAmazon Web Services
 
Amazon Web Services OverView
Amazon Web Services OverViewAmazon Web Services OverView
Amazon Web Services OverViewAriel K
 

Ähnlich wie SmugMug: From MySQL to Amazon DynamoDB (DAT204) | AWS re:Invent 2013 (20)

Serverless Architecture Patterns
Serverless Architecture PatternsServerless Architecture Patterns
Serverless Architecture Patterns
 
serverless_architecture_patterns_london_loft.pdf
serverless_architecture_patterns_london_loft.pdfserverless_architecture_patterns_london_loft.pdf
serverless_architecture_patterns_london_loft.pdf
 
Scaling on AWS for the First 10 Million Users
Scaling on AWS for the First 10 Million UsersScaling on AWS for the First 10 Million Users
Scaling on AWS for the First 10 Million Users
 
Framing the Argument: How to Scale Faster with NoSQL
Framing the Argument: How to Scale Faster with NoSQLFraming the Argument: How to Scale Faster with NoSQL
Framing the Argument: How to Scale Faster with NoSQL
 
Real world cloud formation feb 2014 final
Real world cloud formation feb 2014 finalReal world cloud formation feb 2014 final
Real world cloud formation feb 2014 final
 
ENT309 scaling up to your first 10 million users
ENT309 scaling up to your first 10 million usersENT309 scaling up to your first 10 million users
ENT309 scaling up to your first 10 million users
 
Scaling the Platform for Your Startup
Scaling the Platform for Your StartupScaling the Platform for Your Startup
Scaling the Platform for Your Startup
 
ENT309 Scaling Up to Your First 10 Million Users
ENT309 Scaling Up to Your First 10 Million UsersENT309 Scaling Up to Your First 10 Million Users
ENT309 Scaling Up to Your First 10 Million Users
 
ENT309 Scaling Up to Your First 10 Million Users
ENT309 Scaling Up to Your First 10 Million UsersENT309 Scaling Up to Your First 10 Million Users
ENT309 Scaling Up to Your First 10 Million Users
 
Voldemort Nosql
Voldemort NosqlVoldemort Nosql
Voldemort Nosql
 
How and when to use NoSQL
How and when to use NoSQLHow and when to use NoSQL
How and when to use NoSQL
 
AWS Serverless patterns & best-practices in AWS
AWS Serverless  patterns & best-practices in AWSAWS Serverless  patterns & best-practices in AWS
AWS Serverless patterns & best-practices in AWS
 
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
 
AWS Summit London 2014 | Scaling on AWS for the First 10 Million Users (200)
AWS Summit London 2014 | Scaling on AWS for the First 10 Million Users (200)AWS Summit London 2014 | Scaling on AWS for the First 10 Million Users (200)
AWS Summit London 2014 | Scaling on AWS for the First 10 Million Users (200)
 
Production Ready Serverless Java Applications in 3 Weeks AWS UG Cologne Febru...
Production Ready Serverless Java Applications in 3 Weeks AWS UG Cologne Febru...Production Ready Serverless Java Applications in 3 Weeks AWS UG Cologne Febru...
Production Ready Serverless Java Applications in 3 Weeks AWS UG Cologne Febru...
 
AWS Well Architected-Info Session WeCloudData
AWS Well Architected-Info Session WeCloudDataAWS Well Architected-Info Session WeCloudData
AWS Well Architected-Info Session WeCloudData
 
(ARC309) Getting to Microservices: Cloud Architecture Patterns
(ARC309) Getting to Microservices: Cloud Architecture Patterns(ARC309) Getting to Microservices: Cloud Architecture Patterns
(ARC309) Getting to Microservices: Cloud Architecture Patterns
 
How to Build a Big Data Application: Serverless Edition
How to Build a Big Data Application: Serverless EditionHow to Build a Big Data Application: Serverless Edition
How to Build a Big Data Application: Serverless Edition
 
(ARC301) Scaling Up to Your First 10 Million Users
(ARC301) Scaling Up to Your First 10 Million Users(ARC301) Scaling Up to Your First 10 Million Users
(ARC301) Scaling Up to Your First 10 Million Users
 
Amazon Web Services OverView
Amazon Web Services OverViewAmazon Web Services OverView
Amazon Web Services OverView
 

Mehr von Amazon Web Services

Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Amazon Web Services
 
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Amazon Web Services
 
Esegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateEsegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateAmazon Web Services
 
Costruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSCostruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSAmazon Web Services
 
Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Amazon Web Services
 
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Amazon Web Services
 
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...Amazon Web Services
 
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsMicrosoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsAmazon Web Services
 
Database Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareDatabase Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareAmazon Web Services
 
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSCrea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSAmazon Web Services
 
API moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAPI moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAmazon Web Services
 
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareDatabase Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareAmazon Web Services
 
Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWSAmazon Web Services
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckAmazon Web Services
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without serversAmazon Web Services
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...Amazon Web Services
 
Introduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceIntroduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceAmazon Web Services
 

Mehr von Amazon Web Services (20)

Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
 
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
 
Esegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateEsegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS Fargate
 
Costruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSCostruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWS
 
Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot
 
Open banking as a service
Open banking as a serviceOpen banking as a service
Open banking as a service
 
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
 
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
 
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsMicrosoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
 
Computer Vision con AWS
Computer Vision con AWSComputer Vision con AWS
Computer Vision con AWS
 
Database Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareDatabase Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatare
 
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSCrea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
 
API moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAPI moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e web
 
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareDatabase Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
 
Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWS
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch Deck
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without servers
 
Fundraising Essentials
Fundraising EssentialsFundraising Essentials
Fundraising Essentials
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
 
Introduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceIntroduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container Service
 

Kürzlich hochgeladen

"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 

Kürzlich hochgeladen (20)

"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 

SmugMug: From MySQL to Amazon DynamoDB (DAT204) | AWS re:Invent 2013

  • 1. DAT204 - SmugMug: From MySQL to Amazon DynamoDB (and some of the tools we used to get there) Brad Clawsie, SmugMug.com November 14, 2013 © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.
  • 2. Welcome! • I'm Brad Clawsie, an engineer at SmugMug.com • SmugMug.com is a platform for hosting, sharing, and selling photos • Our target market is professional and enthusiast photographers
  • 3. This Talk… • Isn't an exhaustive Amazon DynamoDB tutorial • Is about some observations made while migrating some features from MySQL to Amazon DynamoDB • Is an introduction to some of the tools that have helped us migrate to Amazon DynamoDB
  • 4. Background • SmugMug.com started in 2003 • LAMP code base • A few machines/colocation → a lot of machines/colocations → Amazon Web Services • Hundreds of thousands of paying customers • Millions of viewers, billions of photos, petabytes of storage
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. Amazon DynamoDB in a Nutshell • • • • • • Tables → [Keys → Items] Items → [AttributeName → Attribute] Attribute → {Type:Value} Provisioned throughput NoSQL-database-as-a-service Create, Get, Put, Update, Delete, Query, Scan
  • 11. MySQL on Our Terms... • “SQL”, but not relational • We avoid joins, foreign keys, complex queries, views, etc. • Simplified our model so that caching was easier to implement • Used like a key (id) → values (row) system
  • 12. MySQL on Our Terms... • Aggressive denormalization is common in many online applications • Upside – easy to migrate some of these tables and supporting code to “NoSQL” style database • Downside(?) – database does less, code does more
  • 13. So Why Change? We're hitting roadblocks that can't be addressed by: • More/better hardware • More ops staff • Best practices
  • 14. Notable Issue #1: “OFFLINE OPS” like ALTER TABLE • We used to have a fair number of read-only/sitemaintenance downtime to ALTER tables • As number of users grows, this always inconveniences someone • Introduces risk into the code • Other RDBMs are better about this
  • 15. Temporary Relief... • Introduced the concept of treating a column as a JSON-like BLOB type for embedding varying/new data • Bought us some time and flexibility, and reduced the need for ALTER TABLE-related downtime • But MySQL wasn't intended to be an ID → BLOB system, and other issues remained
  • 16. Notable Issue #2: Concurrency • MySQL can manifest some non-graceful degradation under heavy write load • We're already isolating non-essential tables to their own databases and denormalizing where we can...the problem persists
  • 17. Notable Issue #3: Replication • A necessary headache, but in fairness MySQL is pretty good at it • Performance issues (single threaded etc.) • Makes it harder to reason about consistency in code • Big ops headache
  • 18. Notable Issue #4: Ops Keeping all of this going requires an ops team... • People • Colocation • “Space” concerns – storage, network capacity, and all the hardware to meet anticipated capacity needs
  • 19. Intangibles • • • • We have the resources to try out some new things We were already AWS fan boys Big users of Amazon S3 Recently moved out of colocations and into Amazon EC2 • Our ops staff has become AWS experts • So we would give an AWS database consideration
  • 20. Immediate Observations • • • • • • Limited key structure Limited data types ACID-like on Amazon DynamoDB's terms Query/Scan operations not that interesting But, freedom from most space constraints Leaving the developer with primarily time constraints
  • 21. First Steps • Start with a solved problem – stats/analytics • SmugMug's stats stack is a relatively simple data model: {“u”:”1”,”i”:”123”,”a”:”321”...} • We measure hits on the frontend and create lines of JSON with user, image, album, time, etc.
  • 22. First Steps • Analytics needs reliable throughput – new data is always being generated • Space concerns (hardware, storage, replication) It was obvious that Amazon DynamoDB would free us from some space constraints. However, we were naive about Amazon DynamoDB's special time constraints.
  • 23. Very Simple Tables • • • • A site key (user, image, album id) as HashKey A date as RangeKey The rest of the data Just a few tables • We'll have to manage removing data from them over time • Obvious: fewer tables → lower bill
  • 24. Need for Tools • Even with our simple initial test bed, we saw the need for more tooling • We are huge users of memcache multi* functions • So we wanted to be able to have arbitrary-sized “batch” input requests • PHP doesn't do concurrency
  • 25. So...a Proxy • A long-running proxy to take requests and manage concurrency for PHP • A proxy to allow us to cheat a little with sizing our requests* • Needed a tool that was geared toward building tools like proxies • Go fit the bill
  • 26. A Little Risk • Writing tools for a young database in a young programming language • Resulted in two codebases we will share: • GoDynamo: equivalent of the AWS SDKs • BBPD: an HTTP proxy based on GoDynamo
  • 27. Observation #1: On Amazon DynamoDB's Terms • Sensible key ↔ application mapping • Denormalization • No reliance on complex queries or other relational features • Many at-scale MySQL users are already using it in this way anyway
  • 28. Observation #1: On Amazon DynamoDB's Terms • Avoid esoteric features • Don't force it • Amazon DynamoDB is not the only AWS database • Nice to have a “control” to use as a yardstick of success
  • 29. Observation #2: Respect Throttling • Coming from MySQL, graceful degradation is an expected artifact of system analysis • But Amazon DynamoDB is a shared service using a simple WAN protocol • You either get a 2xx (success), 4xx, or 5xx (some kind of failure) • A binary distinction
  • 30. Observation #2: Respect Throttling • Throttling is the failure state of a properlyformatted request • Throttling happens when the rate of growth of requests changes quickly (my observation) • Correlate your throttling to your provision
  • 31. Observation #2: Respect Throttling • Typically, throttling happens well below the provisioning level • Don't reflexively increase your provisioning • Amazon DynamoDB behaves best when you optimize requests for space and time
  • 32. Space Optimizations • • • • Compress data (reduce requests) Cache data (read locally when possible) Avoid clustering requests to tables/keys Use key/table structures if possible (often the application dictates this)
  • 33. Time Optimizations • Reduce herding/spikes if possible • Queue requests to be processed as a controlled rate of flow elsewhere • Experiment with concurrency to achieve optimum reqs/sec
  • 34. Don't Obsess Over Throttling • Some throttling is unavoidable • “Hot keys” are unavoidable • The service will get better about adapting to typical use • Experiment: flow, distribution, mix of requests, types of requests, etc. • Throttling is a strong warning
  • 35. Observation #3: Develop with Real(ish) Data • “Test” data and “test” volume will fail you when you launch • Again, no graceful degradation • Your real data has its own flow and distribution • You must optimize for that • Once again, set up a control to validate observations
  • 36. Observation #4: Live with the Limits • Don't try to recreate relational features in Amazon DynamoDB • Query/Scan are limited, be realistic • You can't really see behind the curtain • Feedback from the console is limited • Expect to iterate
  • 37. Success? Recall our original MySQL gripes: (1) ALTER TABLE: kind of solved Amazon DynamoDB doesn't have full table schemas so to speak, so while we are able to add Attributes to an Item at will, we can only change a table's provisioning once created.
  • 38. Success? (2) Replication: solved But opaque to using Amazon DynamoDB. (3) Concurrency: kind of solved Throttling introduces a new kind of concurrency issue, but at least it is limited to a single table.
  • 39. Success? (4) Ops: mostly solved Ops doesn't have to babysit servers anymore, but they need to learn the peculiarities of Amazon DynamoDB and accept the limited value of the console and available body of knowledge.
  • 40. Recap: What We Wrote • GoDynamo: like the AWS SDK, but in Go • BBPD: a proxy written on GoDynamo • See github.com/smugmug
  • 41. Recap: Why a Proxy? • Allows us to integrate Amazon DynamoDB with PHP so concurrency can be put to use • Moves operations to an efficient runtime • Provides for simple debugging via curl and can check for well-formedness of requests locally • Hides details like renewing IAM credentials
  • 42. Trivial Examples # Convenience endpoints available directly: $ curl -X POST -d '{"TableName":"user","Key":{"UserID":{"N":"1"}, "Date":{"N":"20131017"}}}' http://localhost:12333/GetItem # Or specify the endpoint in a header: $ curl -H 'X-Amz-Target: DynamoDB_20120810.GetItem' -X POST -d '{"TableName":"user","Key":{"UserID":{"N":"1"}, "Date":{"N":"20131017"}}}' http://localhost:12333/
  • 43. BBPD is Just a Layer • GoDynamo is where the heavy lifting is done • Libraries for all endpoints • AWS Signature Version 4 support • IAM support (transparent and thread-safe)* • Other nonstandard goodies • Pro-concurrency, high performance • Enables some cool hacks
  • 44. GoDynamo: Why Go? • Strong types, concurrency, Unicode, separate compilation, fast startup, low(ish) memory use, static binary as output of compiler (deploy → scp my_program) • Types ↔ JSON is easy, flexible, and idiomatic • Easy to learn and sell to your boss
  • 45. Trivial Example // control our concurrent access to IAM creds in the background iam_ready_chan := make(chan bool) go conf_iam.GoIAM(iam_ready_chan) // try to get an Item from a table var get1 get_item.Request get1.TableName = “my-table” get1.Key = make(endpoint.Item) get1.Key[“myhashkey”] = endpoint.AttributeValue{s:”thishashkey”} get1.Key[“myrangekey”] = endpoint.AttributeValue{n:”1”} body,code,err := get1.EndpointReq() if err != nil || code != http.StatusOK { panic(“uh oh”) } else { fmt.Printf(“%vn”,body) }
  • 46. AWS Identity and Access Management (IAM) • Included as a dependency is another package worth mentioning: goawsroles • An interface that describes how to handle IAM credentials • An implementation for text files • Suspends threads as credentials are being updated
  • 47. Just the Beginning • Available at github.com/smugmug • Standard disclaimer – works for us, but YMMV! • Would love for you to use it and help create a community of contributors Thanks! :)
  • 48. Please give us your feedback on this presentation DAT204 As a thank you, we will select prize winners daily for completed surveys!