aws september webinar series - getting started with dynamodb streams

45
dynamodb-pm@ Event Driven Computing Enabled by DynamoDB Streams Launch update on Cross-region replication and Database Triggers with AWS Lambda Integration © 2015 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.

Upload: amazon-web-services

Post on 15-Apr-2017

3.847 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: AWS September Webinar Series - Getting Started with DynamoDB Streams

dynamodb-pm@

Event Driven Computing Enabled by DynamoDB Streams

Launch update on Cross-region replication and Database Triggers with AWS Lambda Integration

© 2015 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.

Page 2: AWS September Webinar Series - Getting Started with DynamoDB Streams

• What are DynamoDB Streams?• How to build with DynamoDB Streams• Why DynamoDB Streams?

dynamodb-pm@

Page 3: AWS September Webinar Series - Getting Started with DynamoDB Streams

What are DynamoDB Streams?

• Time ordered and partitioned change log

• Provides a stream of updates, inserts, deletes

• Guaranteed to be delivered only once

• Use Kinesis Client Library (KCL), Lambda, or API to query pre-image, post-image, key, timestamp

• Scales with your table

DynamoDB StreamsDynamoDB

dynamodb-pm@

Page 4: AWS September Webinar Series - Getting Started with DynamoDB Streams

dynamodb-pm@

Use Cases for DynamoDB Streams

Page 5: AWS September Webinar Series - Getting Started with DynamoDB Streams

Cross-region replication

post

DynamoDB Streams

Cross Region ReplicationAsia Pacific (Tokyo) EU (Ireland) Replica

US East (N. Virginia)

dynamodb-pm@

Page 6: AWS September Webinar Series - Getting Started with DynamoDB Streams

Cross region replication library

• Bootstrapping• Horizontal scaling with KCL Workers• Load balancing• Fault tolerance with check pointing

dynamodb-pm@

Page 7: AWS September Webinar Series - Getting Started with DynamoDB Streams

Cross region replication

Shard 1

DynamoDB Stream

DynamoDB

Partition 1

Shard 2

Shard 3

Partition 2

Table

KCL Worker

KCL Worker

KCL Worker

US East (N. Virginia) EU (Ireland)

dynamodb-pm@

Page 8: AWS September Webinar Series - Getting Started with DynamoDB Streams

Cross region replication

DynamoDB Stream

DynamoDBTable

US East (N. Virginia) EU (Ireland)

Partition 1

Partition 2

Partition 3

Partition 4

Partition 5

Table

Shard 1

Shard 2

Shard 3

Shard 4

KCLWorker

KCLWorker

KCLWorker

KCLWorker

dynamodb-pm@

Page 9: AWS September Webinar Series - Getting Started with DynamoDB Streams

Consuming Streams (KCL)AWSDynamoDBstreamsAdapterClient adapterClient = new AWSDynamoDBstreamsAdapterClient(updateStreamsCredentials, .. );..

AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient(dynamoDBCredentials, ..);..

KinesisClientLibConfiguration workerConfig = new KinesisClientLibConfiguration (.., streamId, updateStreamsCredentials, ..)

.withMaxRecords(100) .withInitialPositionInStream(InitialPositionInStream.TRIM_HORIZON);

Worker worker = new Worker(recordProcessorFactory, workerConfig, adapterClient, dynamoDBClient, ..);

Thread t = new Thread(worker);t.start();

Full code available online dynamodb-pm@

Page 10: AWS September Webinar Series - Getting Started with DynamoDB Streams

Processing streams (KCL)

public class StreamsRecordProcessor implements IRecordProcessor { .. @Override public void processRecords(List<Record> records,.. ) { for(Record record : records) {

if (record instanceof RecordAdapter) {

Record ddbStreamRecord = ((RecordAdapter) record).getInternalObject();

switch(ddbStreamRecord.getEventName()) { case "INSERT" : case "MODIFY" : DemoHelper.putItem(dynamoDBClient, tableName,

ddbStreamRecord.getDynamodb().getNewImage()); break;

case ”REMOVE" : DemoHelper.deleteItem(dynamoDBClient, tableName,

ddbStreamRecord.getDynamodb().getKeys().get(“Id”).getN()); break; }...

parixitpo@l

Page 11: AWS September Webinar Series - Getting Started with DynamoDB Streams

dynamodb-pm@

DynamoDB Triggers

• Trigger AWS Lambda functions• Example – Validate address, send notifications

Page 12: AWS September Webinar Series - Getting Started with DynamoDB Streams

DynamoDB Streams and AWS Lambda

Page 13: AWS September Webinar Series - Getting Started with DynamoDB Streams

Triggers

Lambda FunctionNotify change

Aggregate tables

Page 14: AWS September Webinar Series - Getting Started with DynamoDB Streams

External views

CloudSearchElastiCache Lambda Function

dynamodb-pm@

Page 15: AWS September Webinar Series - Getting Started with DynamoDB Streams

Real-Time Voting

Write-heavy items

Page 16: AWS September Webinar Series - Getting Started with DynamoDB Streams

Requirements for voting

• Allow each person to vote only once• No changing votes• Real-time aggregation• Voter analytics, demographics

Page 17: AWS September Webinar Series - Getting Started with DynamoDB Streams

Real-time voting architecture

AggregateVotesTable

Voters

RawVotes Table

Voting App

Page 18: AWS September Webinar Series - Getting Started with DynamoDB Streams

Partition 11000 WCUs

Partition K1000 WCUs

Partition M1000 WCUs

Partition N1000 WCUs

Votes Table

Candidate A Candidate B

Scaling bottlenecks

50,000/sec

70,000/sec

Voters

Provision 200,000 WCUs

Page 19: AWS September Webinar Series - Getting Started with DynamoDB Streams

Write sharing

Candidate A_2

Candidate B_1

Candidate B_2

Candidate B_3

Candidate B_5

Candidate B_4

Candidate B_7

Candidate B_6

Candidate A_1

Candidate A_3

Candidate A_4Candidate A_7 Candidate B_8

Candidate A_6 Candidate A_8

Candidate A_5

Voter

Votes Table

Page 20: AWS September Webinar Series - Getting Started with DynamoDB Streams

Write sharding

Candidate A_2

Candidate B_1

Candidate B_2

Candidate B_3

Candidate B_5

Candidate B_4

Candidate B_7

Candidate B_6

Candidate A_1

Candidate A_3

Candidate A_4Candidate A_7 Candidate B_8

UpdateItem: “CandidateA_” + rand(0, 10)ADD 1 to Votes

Candidate A_6 Candidate A_8

Candidate A_5

Voter

Votes Table

Page 21: AWS September Webinar Series - Getting Started with DynamoDB Streams

Votes Table

Shared aggregation

Candidate A_2

Candidate B_1

Candidate B_2

Candidate B_3

Candidate B_5

Candidate B_4

Candidate B_7

Candidate B_6

Candidate A_1

Candidate A_3

Candidate A_4

Candidate A_5

Candidate A_6 Candidate A_8

Candidate A_7 Candidate B_8

Periodic Process

Candidate ATotal: 2.5M

1. Sum2. Store Voter

Page 22: AWS September Webinar Series - Getting Started with DynamoDB Streams

Correctness in voting

UserId Candidate DateAlice A 2013-10-02

Bob B 2013-10-02

Eve B 2013-10-02

Chuck A 2013-10-02

RawVotes Table

Segment VotesA_1 23

B_2 12

B_1 14

A_2 25

AggregateVotes Table

Voter1. Record vote and de-dupe; retry 2. Increment candidate counter

Page 23: AWS September Webinar Series - Getting Started with DynamoDB Streams

Correctness in aggregation?

UserId Candidate DateAlice A 2013-10-02

Bob B 2013-10-02

Eve B 2013-10-02

Chuck A 2013-10-02

RawVotes Table

Segment VotesA_1 23

B_2 12

B_1 14

A_2 25

AggregateVotes Table

Voter

Page 24: AWS September Webinar Series - Getting Started with DynamoDB Streams

Real-time voting architecture (improved)

AggregateVotesTable

Amazon Redshift Amazon EMR

Your Amazon Kinesis–

Enabled App

Voters RawVotes TableVoting App RawVotesDynamoDB

Stream

Page 25: AWS September Webinar Series - Getting Started with DynamoDB Streams

Real-time voting architecture

AggregateVotesTable

Amazon Redshift Amazon EMR

Your Amazon Kinesis-

Enabled App

Voters RawVotes TableVoting App RawVotesDynamoDB

Stream

Handle any scale of election

Page 26: AWS September Webinar Series - Getting Started with DynamoDB Streams

Real-time voting architecture

AggregateVotesTable

Amazon Redshift Amazon EMR

Your Amazon

Kinesis-Enabled app

Voters RawVotes TableVoting App RawVotesDynamoDB

Stream

Vote only once, no changing votes

Page 27: AWS September Webinar Series - Getting Started with DynamoDB Streams

Real-time voting architecture

AggregateVotesTable

Amazon Redshift Amazon EMR

Your Amazon

Kinesis–Enabled App

Voters RawVotes TableVoting app RawVotesDynamoDB

Stream

Real-time, fault-tolerant, scalable aggregation

Page 28: AWS September Webinar Series - Getting Started with DynamoDB Streams

Real-time voting architecture

AggregateVotesTable

Amazon Redshift Amazon EMR

Your Amazon

Kinesis–Enabled App

Voters RawVotes TableVoting app RawVotesDynamoDB

Stream

Voter analytics, statistics

Page 29: AWS September Webinar Series - Getting Started with DynamoDB Streams

Analytics with DynamoDB Streams

• Collect and de-dupe data in DynamoDB• Aggregate data in-memory and flush periodically• Important when: Performing real-time aggregation and analytics

Page 30: AWS September Webinar Series - Getting Started with DynamoDB Streams

Op: PUTJohnTokyo

Op: UPDATEJohnPluto

Op: UPDATEJohnMars

DynamoDB writes and Streams

Operation #

DynamoDB Operation

Data inDynamoDB

Data in Streams

1 PUT : {John:Tokyo}

{John:Tokyo} PUT John Tokyo

2 UPDATE:{John:Mars}

{John:Mars} UPDATE John Mars

3 UPDATE:{John:Pluto}

{John:Pluto} UPDATE John Pluto

Data: {Name:Destination}

dynamodb-pm@

Page 31: AWS September Webinar Series - Getting Started with DynamoDB Streams

View Type Destination

Old Image – Before update Name = John, Destination = Mars

New Image – After update Name = John, Destination = Pluto

Old and New Images Name = John, Destination = MarsName = John, Destination = Pluto

Keys Only Name = John

View types

dynamodb-pm@

Page 32: AWS September Webinar Series - Getting Started with DynamoDB Streams

Features of DynamoDB Streams

dynamodb-pm@

Page 33: AWS September Webinar Series - Getting Started with DynamoDB Streams

Streams Characteristics

• Each item update appears exactly once • Records are strictly ordered by time• Streams are Asynchronous

dynamodb-pm@

Page 34: AWS September Webinar Series - Getting Started with DynamoDB Streams

Durability & high availabilityHigh throughput consensus protocolReplicated across multiple AZs

dynamodb-pm@

Page 35: AWS September Webinar Series - Getting Started with DynamoDB Streams

Managed StreamsSimply enable streams

dynamodb-pm@

Page 36: AWS September Webinar Series - Getting Started with DynamoDB Streams

ElasticityAdjusts to table throughput

dynamodb-pm@

Page 37: AWS September Webinar Series - Getting Started with DynamoDB Streams

PerformanceDesigned for sub-second latency

| |

Sub-second latency

dynamodb-pm@

Page 38: AWS September Webinar Series - Getting Started with DynamoDB Streams

DurabilityRecords available for 24 hours

dynamodb-pm@

Page 39: AWS September Webinar Series - Getting Started with DynamoDB Streams

How much does it cost?

• Free to turn it on• First 2.5 million reads per month are Free• $0.20 per million reads after that

DynamoDB StreamsDynamoDBdynamodb-pm@

Page 40: AWS September Webinar Series - Getting Started with DynamoDB Streams

dynamodb-pm@

What Customers Are Saying

Page 41: AWS September Webinar Series - Getting Started with DynamoDB Streams

Mapbox

ProblemMaking mapping data highly available, even faster.

DynamoDB Streams use-caseCross-region Replication

In their own words“DynamoDB Streams unlocks cross-region replication - a critical feature that enabled us to fully migrate to DynamoDB. Cross-region replication allows us to distribute data across the world for redundancy and speed.” - Jake Pruitt, Software Developer, Mapbox

Page 42: AWS September Webinar Series - Getting Started with DynamoDB Streams

TOKYU HANDS ProblemAugmenting Point of Sale system to react in real time to inventory and customer data

DynamoDB Streams use-caseDynamoDB Triggers (DynamoDB Streams + AWS Lambda)

In their own words“TOKYU HANDS is running in-store Point Of Sales system backed by DynamoDB and various AWS services. We really like full-managed services such as DynamoDB. I believe DynamoDB Streams would help us making the system more sophisticated and more automated.” - Yamazaki-san, Cloud Architect, TOKYU HANDS.

Page 43: AWS September Webinar Series - Getting Started with DynamoDB Streams

The local version of DynamoDB

• Desktop Installable• Development & Testing• Publicly available at DynamoDB.com

Now supports DynamoDB Streams

Page 44: AWS September Webinar Series - Getting Started with DynamoDB Streams

Cross-region replication app:http://tinyurl.com/DynamoDBCrossRegionReplication

Open sourced Cross-region library is availablehttp://tinyurl.com/DynamoDBReplicationLibrary

dynamodb-pm@

Page 45: AWS September Webinar Series - Getting Started with DynamoDB Streams

dynamodb-pm@

Thank you!