Top Banner
SERVERLESS ARCHITECTURES JAVA DAY LVIV 2016
39

JavaDay Lviv: Serverless Archtiectures

Jan 07, 2017

Download

Software

Antons Kranga
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: JavaDay Lviv: Serverless Archtiectures

SERVERLESS ARCHITECTURESJAVA DAY LVIV 2016

Page 2: JavaDay Lviv: Serverless Archtiectures

~ WHOAMI

▸ Full stack developer ~ 15years

▸ Cloud Architect

▸ DevOps evangelist

▸ Innovation Center of Accenture Cloud Platform

▸ Speaker

▸ Marathon runner

ANTONS KRANGA

@acankr

Page 3: JavaDay Lviv: Serverless Archtiectures

SERVERLESS MOTIVATION

@acankr

Page 4: JavaDay Lviv: Serverless Archtiectures

DON’T WORRY, THERE ARE SERVERS

@acankr

Page 5: JavaDay Lviv: Serverless Archtiectures

BUT THERE ARE NO SERVERS THAT WE MANAGE

@acankr

Page 6: JavaDay Lviv: Serverless Archtiectures

DEVS WANT TO GO NOOPS

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

Page 7: JavaDay Lviv: Serverless Archtiectures

DEVS WANT TO GO NODEVOPS

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

Page 8: JavaDay Lviv: Serverless Archtiectures

INCREASE PACE OF DEVELOPMENT

@acankr

Page 9: JavaDay Lviv: Serverless Archtiectures

@acankr

SIMPLIFY COMPLIANCE AUDIT

Page 10: JavaDay Lviv: Serverless Archtiectures

STATIC WEBSITE

@acankr

Page 11: JavaDay Lviv: Serverless Archtiectures

WE USING SERVERLESS FOR AGES

@acankr

Page 12: JavaDay Lviv: Serverless Archtiectures

@acankr

- Highly Available Serverless Storage

- Scaleable and Elastic

- Replicated across 2 availability zones

- Supports HTTP requestsS3

Page 13: JavaDay Lviv: Serverless Archtiectures

@acankr

Static HTML

CSS/Media

Rich JavaScript AppsGET

http

S3 StorageCloudFrontUSER

Page 14: JavaDay Lviv: Serverless Archtiectures

@acankr

Static HTML

CSS/Media

Rich JavaScript Apps

R53 Domain

GET

http

example.com

S3 StorageCloudFrontUSER

Page 15: JavaDay Lviv: Serverless Archtiectures

@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

Page 16: JavaDay Lviv: Serverless Archtiectures

DYNAMIC WEBSITE

@acankr

Page 17: JavaDay Lviv: Serverless Archtiectures

@acankr

GET

Static HTML

CSS/Media

Rich JavaScript AppsS3 StorageCloudFront

GETPOSTPUTDELETE

Dynamic DataData from DatabaseData from External Service

dataAPI Gateway Lambda

ajax

http

eventUSER

Page 18: JavaDay Lviv: Serverless Archtiectures

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

Page 19: JavaDay Lviv: Serverless Archtiectures

@acankr

Lambda

API Gateway

EVENT SOURCE

Kinesis Data Streams

SNS Queue or Topic data

Lambda

other dataCONSUMER OR EVENT

CRON Job

Page 20: JavaDay Lviv: Serverless Archtiectures

@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

Page 21: JavaDay Lviv: Serverless Archtiectures

@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

Page 22: JavaDay Lviv: Serverless Archtiectures

@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

Page 23: JavaDay Lviv: Serverless Archtiectures

STATEFUL LAMBDA

@acankr

Page 24: JavaDay Lviv: Serverless Archtiectures

@acankr

GETPOSTPUTDELETE

dataAPI Gateway Lambda

ajax event

USER

DB_URLDB_PORTDB_USER

Variables

VPC

Page 25: JavaDay Lviv: Serverless Archtiectures

@acankr

GETPOSTPUTDELETE

dataAPI Gateway Lambda

ajax event

USER

DB_URLDB_PORTDB_USER

Variables

VPC

AuthorizerLambda

Authorizer

Page 26: JavaDay Lviv: Serverless Archtiectures

HIPSTER WEB PORTAL

@acankr

Page 27: JavaDay Lviv: Serverless Archtiectures

GOOD PORTAL NEEDS CMS

@acankr

Page 28: JavaDay Lviv: Serverless Archtiectures

"...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

Page 29: JavaDay Lviv: Serverless Archtiectures

CODECOMMIT

@acankr

- Git Repository Service

- Backed by S3 storage

- Price: $1 per user

- Only: us-west-1 region

Page 30: JavaDay Lviv: Serverless Archtiectures

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”

Page 31: JavaDay Lviv: Serverless Archtiectures

@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

Page 32: JavaDay Lviv: Serverless Archtiectures

SERVERLESS CONTINUOUS DEPLOYMENT

@acankr

Page 33: JavaDay Lviv: Serverless Archtiectures

@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

Page 34: JavaDay Lviv: Serverless Archtiectures

ALTERNATIVES

@acankr

Page 35: JavaDay Lviv: Serverless Archtiectures

@acankr

- SERVICE FABRIC

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

- Deployment:- REST API- PowerShell

- GOOGLE CLOUD FUNCTIONS (ALPHA)

- Runtimes: - NodeJS (only)

- Deployment:- gcloud

Page 36: JavaDay Lviv: Serverless Archtiectures

TAKEAWAYS

@acankr

Page 37: JavaDay Lviv: Serverless Archtiectures

PAY FOR ONLY WHAT YOU USE

@acankr

Page 38: JavaDay Lviv: Serverless Archtiectures

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

Page 39: JavaDay Lviv: Serverless Archtiectures

THANK YOU!

@acankr

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

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

Self Link:

Demo: