Top Banner
AWS Lambda and Cassandra Paris AWS User Group | 5th Sep 2018 Lyuben Todorov Director of Consulting, EMEA
44

Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

May 22, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

AWS LambdaandCassandra

Paris AWS User Group | 5th Sep 2018

Lyuben TodorovDirector of Consulting, EMEA

Page 2: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

PARIS AWS User GroupLes AWS User Group permettent aux

utilisateurs d’AWS de communiquer et

échanger pour répondre à des questions,

partager des idées et tout savoir sur les

nouveaux services et les bonnes pratiques.+2000 utilisateurs

Page 3: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

http://urlz.fr/7kpV

Page 4: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Me

• Lyuben Todorov

• Consulting Director Instaclustr EMEA

• Univ. of Dundee

• Distributed Programming / OSS

Social Media: /in/lyubent

Page 5: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Talk Overview

Cassandra + λ Scale POC

• λ and C* (Cassandra) introduction

• Why use λ and Instaclustr’s managed service

• High Level Setup of λ and C* in Instaclustr

• Technical Challenges of using λ• Lessons Learned

Page 6: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

What is λ

• Serverless

• Pay for execution time (1M requests free)(400k GBsec free)

• Auto-scale

• Always Available

Server

Operation

App

Operation

Operation

Database

Operation

Page 7: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

What is λ

• Serverless (no need to share)

• Pay for execution time (1M requests free)(400k GBsec free)

• Auto-scale

• Always Available

λ Operation λ Operation

Page 8: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

What is λ

• Serverless (no need to share)

• Pay for execution time (1M requests free)(400k GBsec free)

• Auto-scale

• Always Available

λ Operation λ Operation

User Event

Container Teardown

Container Creation

Page 9: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

λ Use-cases

• Peeking Applications

• Event driven applications

• Short Code Execution Times

Page 10: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

What is C*

• Highly Available Distributed Database

• No SPOF (p2p architecture)

• Open Source

• Tunable Consistency

Available

Partition Tolerant Consistent

Page 11: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

C* Client

• Relevant to lambda:• Gossip – used by client to discover nodes• create λ per DC and use DC Aware Client• Query with LOCAL consistencies• Be careful with client timestamps (due to cold start)

Page 12: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Instaclustr Hosted Service

• Simple

• Auto scaling service

• 24/7 Support

• Access to Analytics

• Dashboard for Monitoring

• Security Plugins

Page 13: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

How to set up λ

• Connect λ to Backend

• Deploy and test web app

Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 14: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Create VPC Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 15: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

VPC Subnet Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 16: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Add Some Instant Awesome Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 17: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Pick Your Cloud Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 18: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Choose Node Capacity & Type Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 19: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Scalable backend Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 20: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Peering λ and C*’s VPCsLambda’s VPC needs to be connected with Instaclustr’s Cassandra VPC via Instaclustr console:

Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 21: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Route Tables

• Add rule for the API Gateway

• Add rule for Instaclustr VPC

Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 22: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Create λ in AWS Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 23: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Deploy λ Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 24: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Deploy λ Create λ VPC

Create subnet for VPC

Provision C* Cluster

VPC Peering Request – C* to λ

Update Route Table

Create & Deploy λ

Page 25: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Architecture

Page 26: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

The App

• Allows to process web requests

• POST used for inserting an event

• GET used for fetching an event

• Cassandra Table (Model):

CREATE TABLE event ( id uuid, source text, type text, recorded timestamp, PRIMARY KEY(id) )

Page 27: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

The App - API Gateway

• Two resources added (POST and GET)

Page 28: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

The App - API Gateway

• POST /event/ writes an event to C*session.execute("INSERT INTO ic.event (id, source, type, recorded)" +"VALUES (now(), '10.1.13.77', 'Auth', toTimestamp(now())");

• GET /event/{id} retrieves an event from C* by id. session.execute("SELECT * FROM ic.event");

Page 29: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

The App - Code

• Java Application

• Request processed as stream

• Output as JSON

public void handler(InputStream inputStream, OutputStream outputStream, Context context) {

// IMPL.

// Pass request to either GET or POST depending on context.

}

Page 30: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Challenges

• Application Scalability

• λ Warmup Time

• Reducing Memory Usage

• Connection Pooling

• Dependency Management

• Execution Environment Limits

Page 31: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Scaling Requests

• Load balancer can distribute requests

• Adds Complexity

• What if a backend changes

Page 32: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Scaling Requests with λ• Lambda scales app automatically

• Re-deploy only 1 thing on app update

Page 33: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Scaling Requests with λ• Configure concurrent execution

• Write good app code!

Page 34: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Function Warmup Time

• Cold start is when λ has to initialise resources in order to execute a λ• Container / NIC / other resources.

• Containers torn-down after 15 min of inactivity = cold start after

• λ Function avoids cold-start if constantly running

Page 35: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Function Warmup Time

1 2 3 4 5 6 7

time (min)

Avg. Request Response Time (sec)Parallel Requests (hundreds)

12

10

8

6

4

2

Page 36: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Function Warmup Time

• Cheat – Ping the λ every 5-10 minsCreate a Rule in AWS as an Event and schedule it to run every 10 min.

• Monitor container changes

Page 37: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Reduce Memory Usage

• 512 MB by default

• Way too much for a simple C* client

• CPU is proportional to memory allocated to app

Page 38: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Connection Pool Management

• Creating connections is expensive

• Connection pooling allows reuse

• λ is stateless and asynchronous in nature

Page 39: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Connection Pool Management

• Store session state outside of handler function’s scope

• Variables outside of handler remain initialised across λ calls

// Keep client wrapper outside of handleReqest function // will keep client initialised throughout λ execution private CassandraClient client = new CassandraClient(); public String handleRequest(Map<String,Object> input, Context context) { return "C* Version: " + client.getVersion(); }}

Page 40: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Dependency Management(Java ftw)

• Lean dependencies

• Smaller App

• Faster Deployment

• Less Downtime

<dependency> <groupId>io.symphonia</groupId> <artifactId>lambda-logging</artifactId> <version>1.0.1</version></dependency>

pom.xml

Log4J Jar Size 8.6 MBSymphonia Jar Size 8.1 MBNo Logger Jar Size 7.3 MB

Page 41: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Execution Environment Limits

• Limited to 512 MB of disk

• 3008 MB Memory Limit

• Max timeout – 5 mins.

• Max response payload – 6MB

• Event payload – 128 KB

Per λ invocation

Page 42: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

POC Benchmark

• Create client to send out periodically increasing requests

• Run for 7 min 30 sec

• Review Cassandra latency metric

Page 43: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Outcome

Latency 75percentile (μs)Requests

Time (sec)

Page 44: Paris AWS User Group | 5th Sep 2018 Cassandra …...PARIS AWS User Group Les AWS User Group permettent aux utilisateurs d’AWS de communiquer et échanger pour répondre à des questions,

Q & λ