serverless architectural patterns and best practices | aws

40
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Daniel Geske <[email protected]> 24 August 2017 Serverless Architectural Patterns and Best Practices

Upload: aws-germany

Post on 22-Jan-2018

343 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Serverless Architectural Patterns and Best Practices | AWS

© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Daniel Geske <[email protected]>

24 August 2017

Serverless Architectural Patterns and Best Practices

Page 2: Serverless Architectural Patterns and Best Practices | AWS

Agenda

Serverless characteristics and practices3-tier web applicationBatch processingStream processingOperations automationWrap-up/Q&A

Page 3: Serverless Architectural Patterns and Best Practices | AWS

Spectrum of AWS offerings

AWSLambda

Amazon Kinesis

AmazonS3

Amazon API Gateway

AmazonSQS

AmazonDynamoDB

AWS IoT

Amazon EMR

Amazon ElastiCache

AmazonRDS

Amazon Redshift

Amazon Elasticsearch

Service

Managed Serverless

Amazon EC2

“On EC2”

Amazon Cognito

Amazon CloudWatch

Page 4: Serverless Architectural Patterns and Best Practices | AWS

Serverless patterns built with functions

Functions are the unit of deployment and scaleScales per request—users cannot over or under-provisionNever pay for idleSkip the boring parts; skip the hard parts

Page 5: Serverless Architectural Patterns and Best Practices | AWS

Lambda considerations and best practices

AWS Lambda is stateless—architect accordingly• Assume no affinity with underlying compute

infrastructure• Local filesystem access and child process may not

extend beyond the lifetime of the Lambda request

Page 6: Serverless Architectural Patterns and Best Practices | AWS

Lambda considerations and best practicesCan your Lambda functions survive the cold?

• Instantiate AWS clients and database clients outside the scope of the handler to take advantage of connection re-use.

• Schedule with CloudWatchEvents for warmth

• ENIs for VPC support are attached during cold start

import sys import logging import rds_configimport pymysql

rds_host = "rds-instance" db_name = rds_config.db_nametry:

conn = pymysql.connect( except:

logger.error("ERROR:def handler(event, context):

with conn.cursor() as cur:Executes with

each invocation

Executes during cold start

Page 7: Serverless Architectural Patterns and Best Practices | AWS

Lambda considerations and best practices

How about a file system?• Don’t forget about /tmp (512 MB

scratch space) exports.ffmpeg = function(event,context) { new ffmpeg('./thumb.MP4', function (err, video) { if (!err) { video.fnExtractFrameToJPG('/tmp’)function (error, files) { … }…if (!error) console.log(files); context.done(); ...

Page 8: Serverless Architectural Patterns and Best Practices | AWS

Lambda considerations and best practices

Custom CloudWatch metrics• 40 KB per POST• Default Acct Limit of 150 TPS• Consider aggregating with Kinesis

def put_cstate ( iid, state ): response = cwclient.put_metric_data(

Namespace='AWSx/DirectConnect',MetricData=[{ 'MetricName':'ConnectionState','Dimensions': [

{ 'Name': 'ConnectionId','Value': iid},

],'Value': state,'Unit': 'None’

Page 9: Serverless Architectural Patterns and Best Practices | AWS

Pattern 1: 3-Tier Web Application

Page 10: Serverless Architectural Patterns and Best Practices | AWS

Web application

Data stored in Amazon

DynamoDB

Dynamic content in AWS Lambda

Amazon API Gateway

Browser

Amazon CloudFront

Amazon S3

Page 11: Serverless Architectural Patterns and Best Practices | AWS

Amazon API Gateway AWS

LambdaAmazon

DynamoDB

AmazonS3

Amazon CloudFront

• Bucket Policies• ACLs

• OAI• Geo-Restriction• Signed Cookies• Signed URLs• DDOS

IAM

AuthZ

IAM

Serverless web app security

• Throttling• Caching• Usage Plans

Browser

Page 12: Serverless Architectural Patterns and Best Practices | AWS

Amazon API Gateway AWS

LambdaAmazon

DynamoDB

AmazonS3

Amazon CloudFront

• Bucket Policies• ACLs

• OAI• Geo-Restriction• Signed Cookies• Signed URLs• DDOS

IAMAuthZ IAM

Serverless web app security

• Throttling• Caching• Usage Plans

Browser

Amazon CloudFront• HTTPS• Disable Host

Header Forwarding

AWS WAF

Page 13: Serverless Architectural Patterns and Best Practices | AWS

Amazon API Gateway

AWSLambda

AmazonDynamoDB

AmazonS3

Amazon CloudFront

• Access Logs in S3 Bucket• Access Logs in S3 Bucket

• CloudWatch Metrics-https://aws.amazon.com/cloudfront/reporting/

Serverless web app monitoring

AWS WAF• WebACL Testing• Total Requests• Allowed/Blocked

Requests by ACL

logslogs

• Invocations• Invocation Errors• Duration• Throttled

Invocations

• Latency• Throughput• Throttled Reqs• Returned Bytes• Documentation

• Latency• Count• Cache Hit/Miss• 4XX/5XX Errors

Streams

AWSCloudTrail

BrowserCustom CloudWatch

Metrics & Alarms

Page 14: Serverless Architectural Patterns and Best Practices | AWS

Serverless web app lifecycle management

AWS SAM (Serverless Application Model) - blog

AWSLambda

Amazon API Gateway

AWS CloudFormation

AmazonS3

AmazonDynamoDB

Package & Deploy

Code/Packages/Swagger

Serverless Template

Serverless Template

w/ CodeUri

package deployCI/CD Tools

Page 15: Serverless Architectural Patterns and Best Practices | AWS

Amazon API Gateway best practices

Use mock integrationsSigned URL from API Gateway for large or binary file uploads to S3Use request/response mapping templates for legacy apps and HTTP response codesAsynchronous calls for Lambda > 30s

Page 16: Serverless Architectural Patterns and Best Practices | AWS

Roo

t /

/{proxy+} ANY Your Node.jsExpress app

Greedy variable, ANY method, proxy integration

Simple yet very powerful:

• Automatically scale to meet demand

• Only pay for the requests you receive

Page 17: Serverless Architectural Patterns and Best Practices | AWS

Pattern 2: Batch Processing

Page 18: Serverless Architectural Patterns and Best Practices | AWS

Characteristics

Large data setsPeriodic or scheduled tasksExtract Transform Load (ETL) jobsUsually non-interactive and long runningMany problems fit MapReduce programming model

Page 19: Serverless Architectural Patterns and Best Practices | AWS

Serverless batch processing

AWS Lambda: Splitter

Amazon S3Object

Amazon DynamoDB: Mapper Results

AWS Lambda: Mappers

….

…. AWS Lambda: Reducer

Amazon S3Results

Page 20: Serverless Architectural Patterns and Best Practices | AWS

Considerations and best practices

Cascade mapper functionsLambda languages vs. SQLSpeed is directly proportional to the concurrent Lambda function limitUse DynamoDB/ElastiCache/S3 for intermediate state of mapper functionsLambda MapReduce Reference Architecture

Page 21: Serverless Architectural Patterns and Best Practices | AWS

Cost of serverless batch processing

200 GB normalized Google Ngram data-set Serverless:

• 1000 concurrent Lambda invocations• Processing time: 9 minutes• Cost: $7.06

Page 22: Serverless Architectural Patterns and Best Practices | AWS

Pattern 3: Stream Processing

Page 23: Serverless Architectural Patterns and Best Practices | AWS

Stream processing characteristics

• High ingest rate• Near real-time processing (low latency from ingest to

process)• Spiky traffic (lots of devices with intermittent network

connections)• Message durability• Message ordering

Page 24: Serverless Architectural Patterns and Best Practices | AWS

Serverless stream processing architecture

Sensors

Amazon Kinesis:Stream

Lambda: Stream Processor

S3:Final Aggregated Output

Lambda:Periodic Dump to S3

CloudWatch Events:Trigger every 5 minutes

S3:Intermediate Aggregated

Data

Lambda:Scheduled Dispatcher

KPL:Producer

Page 25: Serverless Architectural Patterns and Best Practices | AWS

Fan-out pattern

• Number of Amazon Kinesis Streams shards corresponds to concurrent Lambda invocations

• Trade higher throughput & lower latency vs. strict message ordering

Sensors

Amazon Kinesis:Stream

Lambda: Dispatcher

KPL:Producer Lambda:

Processors

Increase throughput, reduce processing latency

Page 26: Serverless Architectural Patterns and Best Practices | AWS

More about fan-out pattern

• Keep up with peak shard capacity• 1000 records / second, OR• 1 MB / second

• Consider parallel synchronous Lambda invocations• Rcoil for JS (https://github.com/sapessi/rcoil) can help• Dead letter queue to retry failed Lambda invocations

Page 27: Serverless Architectural Patterns and Best Practices | AWS

Best practices

• Tune batch size when Lambda is triggered by Amazon Kinesis Streams – reduce number of Lambda invocations

• Tune memory setting for your Lambda function – shorten execution time

• Use KPL to batch messages and saturate Amazon Kinesis Stream capacity

Page 28: Serverless Architectural Patterns and Best Practices | AWS

Monitoring

Amazon Kinesis Stream metric GetRecords.IteratorAgeMilliseconds maximum

Page 29: Serverless Architectural Patterns and Best Practices | AWS

Amazon Kinesis Analytics

Sensors

Amazon Kinesis:Stream

Amazon Kinesis Analytics: Window Aggregation

Amazon Kinesis StreamsProducer S3:

Aggregated Output

CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM"

SELECT STREAM "device_id",

FLOOR("SOURCE_SQL_STREAM_001".ROWTIME TO MINUTE) as "round_ts",

SUM("measurement") as "sample_sum",

COUNT(*) AS "sample_count"

FROM "SOURCE_SQL_STREAM_001"

GROUP BY "device_id", FLOOR("SOURCE_SQL_STREAM_001".ROWTIME TO MINUTE);

Aggregation Time Window

Page 30: Serverless Architectural Patterns and Best Practices | AWS

Cost comparison - assumptions

• Variable message rate over 6 hours• Costs extrapolated over 30 days

20,000

10,000

20,000

50,000

20,000

10,000

1 2 3 4 5 6

MESSAGE

S/SEC

HOURS

Page 31: Serverless Architectural Patterns and Best Practices | AWS

Serverless• Amazon Kinesis Stream with 5

shards

Cost comparison

Server-based on EC2• Kafka cluster (3 x m3.large)• Zookeeper cluster (3 x m3.large)• Consumer (1 x c4.xlarge)

Service Monthly Cost

Amazon Kinesis Streams $ 58.04

AWS Lambda $259.85

Amazon S3 (Intermediate Files) $ 84.40

Amazon CloudWatch $ 4.72

Total $407.01

Service Monthly Cost

EC2 Kafka Cluster $292.08

EC2 Zookeeper Cluster $292.08

EC2 Consumer $152.99

Total On-Demand $737.15

1-year All Upfront RI $452.42

Page 32: Serverless Architectural Patterns and Best Practices | AWS

Compare related servicesAmazon Kinesis Streams Amazon SQS Amazon SNS

Message Durability Up to retention period Up to retention period Retry delivery (depends on destination type)

Maximum Retention Period 7 days 14 days Up to retry delivery limit

Message Ordering Strict within shard Standard - Best effort FIFO – Strict within Message Group

None

Delivery semantics Multiple consumers pershard

Multiple readers per queue (but one message is only handled by one reader at a time)

Multiple subscribers per topic

Scaling By throughput using Shards Automatic Automatic

Iterate over messages Shard iterators No No

Delivery Destination Types Kinesis Consumers SQS Readers HTTP/S, Mobile Push, SMS, Email, SQS, Lambda

Page 33: Serverless Architectural Patterns and Best Practices | AWS

Lambda architecture

Data Sources

Serving Layer

Speed Layer

AWS Lambda: Splitter

Amazon S3Object

Amazon DynamoDB: Mapper Results

AmazonS3

AWS Lambda: Mappers

….

…. AWS Lambda: Reducer

Amazon S3Results

Batch Layer

Sensors

Amazon Kinesis:Stream

Lambda: Stream Processor

S3:Final Aggregated Output

Lambda:Periodic Dump to S3

CloudWatch Events:Trigger every 5 minutes

S3:Intermediate Aggregated

Data

Lambda:Scheduled Dispatcher

KPL:Producer

Page 34: Serverless Architectural Patterns and Best Practices | AWS

Pattern 4: Automation

Page 35: Serverless Architectural Patterns and Best Practices | AWS

Automation characteristics

• Respond to alarms or events• Periodic jobs • Auditing and Notification• Extend AWS functionality…All while being Highly Available and Scalable

Page 36: Serverless Architectural Patterns and Best Practices | AWS

Automation: dynamic DNS for EC2 instancesAWS Lambda:

Update Route53Amazon CloudWatch Events:

Rule TriggeredAmazon EC2 Instance

State Changes

Amazon DynamoDB: EC2 Instance Properties

Amazon Route53: Private Hosted Zone

Tag:CNAME = ‘xyz.example.com’

xyz.example.com A 10.2.0.134

Page 37: Serverless Architectural Patterns and Best Practices | AWS

Automation: image thumbnail creation from S3

AWS Lambda: Resize Images

Users upload photos

S3:Source Bucket

S3:Destination Bucket

Triggered on PUTs

Page 38: Serverless Architectural Patterns and Best Practices | AWS

CapitalOne Cloud CustodianAWS Lambda:

Policy & Compliance RulesAmazon CloudWatch Events:

Rules Triggered

AWS CloudTrail:Events

Amazon SNS: Alert Notifications

Amazon CloudWatch Logs:Logs

Read more here: http://www.capitalone.io/cloud-custodian/docs/index.html

Page 39: Serverless Architectural Patterns and Best Practices | AWS

Best practices

• Document how to disable event triggers for your automation when troubleshooting

• Gracefully handle API throttling by retrying with an exponential back-off algorithm (AWS SDKs do this for you)

• Publish custom metrics from your Lambda function that are meaningful for operations (e.g. number of EBS volumes snapshotted)

Page 40: Serverless Architectural Patterns and Best Practices | AWS

Go build something.

Daniel Geske <[email protected]>