javaday lviv: serverless archtiectures

39
SERVERLESS ARCHITECTURES JAVA DAY LVIV 2016

Upload: antons-kranga

Post on 07-Jan-2017

3.482 views

Category:

Software


7 download

TRANSCRIPT

SERVERLESS ARCHITECTURESJAVA DAY LVIV 2016

~ WHOAMI

▸ Full stack developer ~ 15years

▸ Cloud Architect

▸ DevOps evangelist

▸ Innovation Center of Accenture Cloud Platform

▸ Speaker

▸ Marathon runner

ANTONS KRANGA

@acankr

SERVERLESS MOTIVATION

@acankr

DON’T WORRY, THERE ARE SERVERS

@acankr

BUT THERE ARE NO SERVERS THAT WE MANAGE

@acankr

DEVS WANT TO GO NOOPS

@acankrhttp://martinfowler.com/bliki/DevOpsCulture.html

DEVS WANT TO GO NODEVOPS

@acankrhttp://martinfowler.com/bliki/DevOpsCulture.html

INCREASE PACE OF DEVELOPMENT

@acankr

@acankr

SIMPLIFY COMPLIANCE AUDIT

STATIC WEBSITE

@acankr

WE USING SERVERLESS FOR AGES

@acankr

@acankr

- Highly Available Serverless Storage

- Scaleable and Elastic

- Replicated across 2 availability zones

- Supports HTTP requestsS3

@acankr

Static HTML

CSS/Media

Rich JavaScript AppsGET

http

S3 StorageCloudFrontUSER

@acankr

Static HTML

CSS/Media

Rich JavaScript Apps

R53 Domain

GET

http

example.com

S3 StorageCloudFrontUSER

@acankr

Static HTML

CSS/Media

Rich JavaScript Apps

COST MODEL: $0.03 GiB per Month

S3 HIGHLY AVAILABLE STORAGE

- Covered by AWS S3 SLA

- Durability: 99.999999999%

- Availability: 99.99%

SLOW WRITE OPERATIONS

R53 Domain

GET

http

example.com

S3 StorageCloudFrontUSER

DYNAMIC WEBSITE

@acankr

@acankr

GET

Static HTML

CSS/Media

Rich JavaScript AppsS3 StorageCloudFront

GETPOSTPUTDELETE

Dynamic DataData from DatabaseData from External Service

dataAPI Gateway Lambda

ajax

http

eventUSER

LAMBDA

@acankr

- AWS Computing Service

- Designed to reflect async Actor Model

- Resilient and Scaleable

- 512 RAM

- Supports Runtimes- Java- Python- NodeJS- Go (implicitly)

- Max Timeout 5 mins

- Pricing: - 0.20$ per million requests.- Billable 100 milliseconds

@acankr

Lambda

API Gateway

EVENT SOURCE

Kinesis Data Streams

SNS Queue or Topic data

Lambda

other dataCONSUMER OR EVENT

CRON Job

@acankr

API Gateway

Lambda

+

- API Management Tool

- Authorization + Custom Authorizer

- Defines: Environment Variables for Lambda

- Can be defined with Swagger and imported

- Code Supports Versioning

- Integrated with CloudWatch

- Lambda Containers are Cached for 5 minutes

- Can be deployed with “apex.run” tool

- User can write files in /tmp

@acankr

BUILD.GRADLEapplyplugin:'java'version='1.0.0'mainClassName='Main'

jar{ archiveName='apex.jar'}

repositories{mavenCentral()}

dependencies{compile('com.amazonaws:aws-lambda-java-core:1.1.0','com.amazonaws:aws-lambda-java-events:1.1.0')}

SHELL

$./gradlewcleanbuild

BUILDSUCCESSFUL

Totaltime:9.134secs

@acankr

MAIN.JAVApublicclassMainimplementsRequestHandler<String,String>{@Override publicStringhandleRequest(Stringinput,Contextcontext){ context.getLogger().log("Myinputis:"+input); return"Hello:"+input }

}

FUNCTION.JSON{"runtime":"java8","role":"arn:aws:iam::776022106184:role/apex_lambda_function","handler":"Main::handleRequest","memory":512,"timeout":32}

SHELL

$apexdeploy

•functioncreated

STATEFUL LAMBDA

@acankr

@acankr

GETPOSTPUTDELETE

dataAPI Gateway Lambda

ajax event

USER

DB_URLDB_PORTDB_USER

Variables

VPC

@acankr

GETPOSTPUTDELETE

dataAPI Gateway Lambda

ajax event

USER

DB_URLDB_PORTDB_USER

Variables

VPC

AuthorizerLambda

Authorizer

HIPSTER WEB PORTAL

@acankr

GOOD PORTAL NEEDS CMS

@acankr

"...USE GIT AS THE BASIS FOR A LIGHTWEIGHT CMS, WITH TEXT-BASED EDITING

FORMATS. GIT HAS POWERFUL FEATURES FOR TRACKING CHANGES AND

EXPLORING ALTERNATIVES, WITH A DISTRIBUTED STORAGE MODEL THAT IS FAST

IN USE AND TOLERANT OF NETWORKING ISSUES."

ThoughtWorks Technology Radar https://www.thoughtworks.com/radar/techniques/git-based-cms-git-for-non-code

assess since May 2015

BEST CMS

@acankr

CODECOMMIT

@acankr

- Git Repository Service

- Backed by S3 storage

- Price: $1 per user

- Only: us-west-1 region

CODECOMMIT

@acankr

Lambda

+

- Lambda doesn’t have GIT client.

- You can “statically link” git libraries with git2go library (libgit2)

- To read SSH key file with Lambda it must be stored in “/tmp” directory

- SSH private key must have 600 credentials

- SSH private key must be owned by user “sandbox”

@acankr

USER

GET

Static HTML

CSS/Media

Rich JavaScript AppsS3 StorageCloudFront

GETPOSTPUTDELETE

Dynamic DataData from DatabaseData from External Service

dataAPI Gateway Lambda

ajax

http

event

Lambda

push

EDITOR

event

document commit

PUT

Checkout documentRender or post-process Publish

CodeCommit

SERVERLESS CONTINUOUS DEPLOYMENT

@acankr

@acankr

CompilationLambda

push

DEV

event

document commit

Checkout Compile

CodeCommit

PUT

S3

GET

Checkout Compile

TestingLambda

if needed long running tests

VMs

CREATE

DeploymentLambda

Lambda

SNS

ChatOps

ALTERNATIVES

@acankr

@acankr

- SERVICE FABRIC

- Runtimes: - ASP .NET (1Core)- NodeJS- etc

- Deployment:- REST API- PowerShell

- GOOGLE CLOUD FUNCTIONS (ALPHA)

- Runtimes: - NodeJS (only)

- Deployment:- gcloud

TAKEAWAYS

@acankr

PAY FOR ONLY WHAT YOU USE

@acankr

TAKEAWAYS

READING

▸ Book: AWS Lambda in Action

▸ MEAP begin in 2016 February

▸ Publication: March 2017

▸ Author: Danilo Poccia

▸ ISBN: 9781617293719https://www.manning.com/books/aws-lambda-in-action

@acankr

THANK YOU!

@acankr

http://www.slideshare.net/akranga/javaday-lviv-serverless-archtiectures

https://github.com/akranga/chuck-lambda

Self Link:

Demo: