how serverless impacts design · traditional serverless model 㱺 design 㱺 deployment (model ⇄...

43
How serverless impacts design https://gojko.net/assets/dddeu20.pdf Gojko Adzic | gojko.net | @gojkoadzic | [email protected]

Upload: others

Post on 25-May-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

How serverless

impacts designhttps://gojko.net/assets/dddeu20.pdf

Gojko Adzic | gojko.net | @gojkoadzic | [email protected]

Page 2: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

"Modelling"

—wait, a shipping container has LEGS?

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 3: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

"Design"

—itinerary service

—shipping containers repository

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 4: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

"Deployment"

—itinerary service scaled to 5 web servers

—container repository synced to DB

—itinerary requests pushed to message queue

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 5: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

"Server"

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 6: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,
Page 7: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Serverless Socketlesspublic class LambdaMain implements RequestHandler<Event, Response> {

public Response handleRequest(Event request, Context context){

// do something useful with the event

};

};

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 8: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/

Page 9: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

https://atlassian.com/forge

Page 10: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 11: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Serverless Distractionless

—Generic: hire from the cloud provider

—Supporting: customise provider services

—Core: more time left for this

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 12: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Deliver on demand, never pay for idle

— AWS re:Invent 2016, Tim Wagner

https://www.slideshare.net/AmazonWebServices/aws-reinvent-2016-the-state-of-serverless-computing-svr311

Page 13: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Serverless Reservationless

provider 1m requests Free CPU Time

512MB,100ms

AWS 0.2 1m .000000834

Azure 0.2 1m .0000008

GCP 0.4 2m .000000925

Lambda US-east-1; Azure, central US; https://aws.amazon.com/lambda/pricing/; https://cloud.google.com/functions/pricing; https://azure.microsoft.com/

en-us/pricing/details/functions/

Page 14: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Paying for utilisation—not capacity

—not environments

—not instances

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 15: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Serverless financially rewards good design

(instantly, not at some potential distant future)

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 16: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

MindMup.com

Heroku February 2016 Lambda February 2017

~ -50% operational costs

~ +50% active users

~ 66% estimated savingsGojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 17: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

"lowered five-year operating costs by 60% and were 89% faster at compute deployment"

— IDC white paper on AWS Serverless

https://pages.awscloud.com/Gated_IDC_Generating_Value_Through_IT_Agility.html

Page 18: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Caroline Rennie, Product Lead, Comic Relief: https://www.youtube.com/watch?v=Kb2Qk3vAkJI

Page 19: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Apps ⇒ Taskssingle critical "CORE" ⇒ many tiny "kernels"

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 20: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Good news: very forgiving regarding design mistakes

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 21: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Apps Tasks

bounded contexts

around teams, products

each "task" a potential

context?

conceptual consistency security/access

anti-corruption layers

carefully planned

change blast radius

inherently small

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 22: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Bad news: "hello world" is highly distributed

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 23: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

https://martinfowler.com/bliki/FirstLaw.html

Page 24: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Don't

https://martinfowler.com/bliki/FirstLaw.html

Page 25: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Don't distribute your objects

https://martinfowler.com/bliki/FirstLaw.html

Page 26: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Time=money, very literally

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 27: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Time=money, very literally

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 28: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Traditional Serverless

Model ⇒ Design ⇒

Deployment

(Model ⇄ Deployment)

⇒ Design

long-lived objects short-lived tasks

Data transfer synthetic,

based on aggregates

Data transfer key to the

model

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 29: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Events become

"mini-aggregates"

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 30: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Traditional Serverless

Focus on the core,

design it well

Design the protocol,

other stuff is fixable later

push ugliness to

boundaries

focus on the boundaries

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 31: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

RPC / invocations Events / messaging

pretend network does

not exist

assume network exists

requests intent/facts

"shared kernel" / tight

coupling

"open host" / don't care

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 32: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Key challenge for "protocol" design

Design events complete enough to avoid chattiness, but still generic enough to allow decoupling and reuseGojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 33: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,
Page 34: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,
Page 35: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Groups of tasks end up as bounded contexts...

use runtime security needs as a hint about context boundaries!

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 36: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Traditional Serverless

Infrastructure is stateful

or stateless

Infrastructure is

transient

Reserved capacity Utilised capacity

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 37: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,
Page 38: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Model changes over time, but consistent at any point in time

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 39: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Model changes over time, may be inconsistent at single point in time

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 40: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Traditional Serverless

Infrastructure is stateful

or stateless

Infrastructure is

transient

Reserved capacity Utilised capacity

Model Universe Model Multiverse

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 41: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

Version-tolerant design

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020

Page 42: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,
Page 43: How serverless impacts design · Traditional Serverless Model 㱺 Design 㱺 Deployment (Model ⇄ Deployment) 㱺 Design long-lived objects short-lived tasks Data transfer synthetic,

http://leanpub.com/running-serverless/c/dddeu

50% off this week

Gojko Adzic | gojko.net | @gojkoadzic | https://gojko.net/assets/dddeu20.pdf | DDD Europe 2020