Slide 1

Slide 1 text

Showdown of the serverless cloud, orchestrating functions choose your alliance, go to: https://presentain.com/showdown

Slide 2

Slide 2 text

Kenny Baas-Schwegler @kenny_baas Baasie.com xebia.com/blog/author/kbaas/ Marc Duiker Azure Consultant - I ❤ Serverless Software Consultant - Domain-Driven Design @marcduiker blog.marcduiker.nl

Slide 3

Slide 3 text

Why do I like serverless?

Slide 4

Slide 4 text

Why do I like serverless?

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Let’s look at the specs!

Slide 7

Slide 7 text

Type​ AWS Lambda​ Azure Functions​ Google Cloud Functions​ Price 1M Executions​ ($) 0.20​ 0.20​ 0.40​ Price GB-s​ ($) 0.00001667​ 0.000016​ 0.0000025​ Price GHz-s ($) - - 0.0000100 Free executions/month​ 1M​ 1M​ 2M​ Free GB-s/month​ 400K​ 400K​ 400K​ ​Free GHz-s/month ​- ​- ​200K Total​ cost/month ($) ​78.48 75.40 92.70 Comparing Cost* * For 10M function executions of 1 sec each using a 512MB / 800MHz machine.

Slide 8

Slide 8 text

Runtimes AWS Lambda​ Azure Functions​ Google Cloud Functions​ Node.js v6 & v8 v6, v8, v10 v6 & v8 (beta) .NET Framework ​- v4.7​ ​- .NET Core v1, v2.x v2.x -​ Python v.2.7, v3.6 & v3.7 v3.6 (preview)​ v3.7.1​ (beta) Java ​v8 v8 (preview) -​ Ruby v2.5 - -​ Go v1.x -​ v1.11(beta) Comparing Runtimes

Slide 9

Slide 9 text

Comparing Cold Start Source: https://mikhail.io/2018/08/serverless-cold-start-war/

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Parking Garage Use Case

Slide 12

Slide 12 text

You get a FAAS

Slide 13

Slide 13 text

Everybody gets a FAAS

Slide 14

Slide 14 text

Flying Spaghetti Functions https://clearlens.org/do-you-believe-in-a-flying-spaghetti-monster/

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Question: How do we split systems into functions? Heuristic: Within a bounded context modules are a perfect candidate for splitting up into functions. Heuristic: Use one source control repository per bounded context.

Slide 20

Slide 20 text

SDK Portal Monitoring Orchestration Documentation Testing

Slide 21

Slide 21 text

“Everything we hear is an opinion, not a fact. Everything we see is a perspective, not the truth.” ― Marcus Aurelius , Meditations

Slide 22

Slide 22 text

Documentation - AWS

Slide 23

Slide 23 text

Documentation - AWS

Slide 24

Slide 24 text

24 Documentation - Azure

Slide 25

Slide 25 text

25 Documentation - GCloud

Slide 26

Slide 26 text

26 Documentation + - AWS Lambda ● Extensive, detailed documentation. ● Everything you need! ● Extensive wall of text crits you Azure Functions ● Quickstarts for novices ● Detailed reference material for the more experienced. ● Not 100% complete across all languages. GCP Functions ● Quickstarts for novices. ● Hard to find specific information

Slide 27

Slide 27 text

SDK - AWS https://www.npmjs.com/package/@types/aws-lambda

Slide 28

Slide 28 text

SDK - AWS

Slide 29

Slide 29 text

SDK - AWS

Slide 30

Slide 30 text

SDK - AWS

Slide 31

Slide 31 text

31 SDK - Azure

Slide 32

Slide 32 text

32 SDK - Azure

Slide 33

Slide 33 text

SDK - GCP

Slide 34

Slide 34 text

SDK - GCP https://www.npmjs.com/package/@types/google-cloud__datastore

Slide 35

Slide 35 text

SDK - GCP

Slide 36

Slide 36 text

36 SDK + - AWS Lambda ● Flexible SDK, extensive. ● Can also create your own runtime. ● Quirks in the gateway body as string. Need to do validation yourself, also typed. Azure Functions ● Easy to use SDK for C#. ● Limited usage of certain NuGet package versions the framework is using (e.g. NewtonSoft.Json). GCP Functions ● Using standard 3th party libraries.

Slide 37

Slide 37 text

Orchestration - AWS https://github.com/binxio/aws-cfn-update

Slide 38

Slide 38 text

Orchestration - AWS

Slide 39

Slide 39 text

Orchestration - AWS

Slide 40

Slide 40 text

Orchestration - Azure

Slide 41

Slide 41 text

41 SDK - Azure

Slide 42

Slide 42 text

Orchestration - GCP Not supported OOTB :(

Slide 43

Slide 43 text

Orchestration + - AWS Lambda ● Visualisation in the portal ● Uses JSON/YAML configuration. Azure Functions ● Flexibility because the orchestration is in code. ● The orchestration needs to be deterministic, so don’t use code which is not (e.g. new GUIDs, DateTime, new threads). GCP Functions ● N/A ● N/A

Slide 44

Slide 44 text

Deployment Cycle - AWS

Slide 45

Slide 45 text

Deployment Cycle - AWS https://xebia.com/blog/building-an-elixir-runtime-for-aws-lambda/

Slide 46

Slide 46 text

Deployment Cycle - AWS

Slide 47

Slide 47 text

Deployment Cycle - Azure

Slide 48

Slide 48 text

Deployment Cycle - Azure

Slide 49

Slide 49 text

Deployment Cycle - GCP

Slide 50

Slide 50 text

50 Deployment Cycle + - AWS Lambda ● Stateful Cloudformation. ● Sometimes manual interference when config is false. Azure Functions ● Multiple ways to deploy your functions to the cloud. ● Prefer CLI over ARM. ● Watch out for breaking changes in orchestrations. GCP Functions ● Terraform to the rescue! ● Google Cloud deployment configuration counter intuitive.

Slide 51

Slide 51 text

Portal - AWS

Slide 52

Slide 52 text

Portal - AWS

Slide 53

Slide 53 text

Portal - Azure

Slide 54

Slide 54 text

Portal - Azure

Slide 55

Slide 55 text

Portal - GCloud

Slide 56

Slide 56 text

56 Portal + - AWS Lambda ● Most parts are simple and easy to discover. ● No real boundaries of projects. ● Some parts are hard to navigate. Azure Functions ● Resource Groups are useful containers for multiple services. ● It is very slow to navigate & use. GCP Functions ● Projects is good concept for grouping services. ● Portal is quick to use.

Slide 57

Slide 57 text

57 Testing - AWS

Slide 58

Slide 58 text

58 Testing - AWS AWS SAM LOCAL

Slide 59

Slide 59 text

59 Testing - Azure

Slide 60

Slide 60 text

60 Testing - Azure

Slide 61

Slide 61 text

61 Testing - Azure

Slide 62

Slide 62 text

62 Testing - Azure

Slide 63

Slide 63 text

63 Testing - Azure

Slide 64

Slide 64 text

64 Testing - GCP

Slide 65

Slide 65 text

65 Testing + - AWS Lambda ● Unit testing is easy ● SAM Local seems promising ● SAM Local still in beta ● Mocking dynamo takes some time to understand Azure Functions ● Unit testing is easy ● Local runtime is available for running without cloud connection. ● Local runtime depends on a separate storage emulator (not all versions are compatible). GCP Functions ● Node Emulator available for local testing. ● Emulator is in alpha version ● Supports Node v6 only

Slide 66

Slide 66 text

Monitoring - AWS

Slide 67

Slide 67 text

Monitoring - Azure

Slide 68

Slide 68 text

Monitoring - GCP

Slide 69

Slide 69 text

69 Monitoring + - AWS Lambda ● CloudWatch is mature, gives the right amount of stats Azure Functions ● Basic logging OOTB and easy integration with Application Insights. GCP Functions ● Basic monitoring OOTB

Slide 70

Slide 70 text

Key takeaways Question: When do we use AWS? Heuristic: When we want to use many different function runtimes. Heuristic: When we want to use the latest runtimes.

Slide 71

Slide 71 text

Key takeaways Question: When do we use Azure? Heuristic: When we’re familiar with the Microsoft ecosystem. Heuristic: When we want to orchestrate functions.

Slide 72

Slide 72 text

Key takeaways Question: When do we use Google Cloud? Heuristic: When we want the best functions portal experience.

Slide 73

Slide 73 text

Key takeaways Question: When should we use Orchestrations? Heuristic: Use orchestrations within a bounded context. Heuristic: Use orchestrations when having processes over multiple modules in your bounded context. Heuristic: Use orchestrations for long running processes.

Slide 74

Slide 74 text

74 Pricing https://aws.amazon.com/lambda/pricing/​ https://azure.microsoft.com/en-us/pricing/details/functions/​ https://cloud.google.com/functions/pricing​ Comparison: https://docs.google.com/spreadsheets/d/1Q6vllVYe1CfHAK6MP6Uz6mTYPiU4DljwL8XN4E5FQdw/edit?usp=sharing Runtimes & languages​ https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html https://docs.microsoft.com/en-us/azure/azure-functions/supported-languages​ https://cloud.google.com/functions/docs/writing/​ Cold Start https://mikhail.io/2018/08/serverless-cold-start-war/ ​ Sources Github Repository with our demo code https://github.com/Baasie/serverless-showdown