Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Serverless Functions Azure, AWS, GCP
Search
Mikhail Shilkov
October 30, 2019
Programming
280
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Serverless Functions Azure, AWS, GCP
Comparison of Function-as-a-Service offerings of AWS, Azure, and GCP
Mikhail Shilkov
October 30, 2019
More Decks by Mikhail Shilkov
See All by Mikhail Shilkov
From YAML to TypeScript: Developer’s View on Cloud Automation
mikhailshilkov
0
140
Cloud Management Superpowers with Pulumi
mikhailshilkov
0
570
Cloud Superpowers with Pulumi and F#
mikhailshilkov
1
580
Cloud Management Superpowers with Pulumi and .NET
mikhailshilkov
0
170
Managing Any Cloud with .NET
mikhailshilkov
0
130
Azure Infrastructure as C# and F#
mikhailshilkov
0
320
Infrastructure as Software
mikhailshilkov
0
480
Azure Infrastructure as C# and F#
mikhailshilkov
0
380
Pulumi: Cloud Infrastructure as C# and F#
mikhailshilkov
0
920
Other Decks in Programming
See All in Programming
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
2.4k
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
110
クラウドエージェントは、 何がそんなに便利なのか / what makes cloud agents so useful
rkaga
5
670
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
320
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
400
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.5k
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.6k
Performance Optimization With LLMs
xleitix
0
230
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
5k
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
400
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
690
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
300
Featured
See All Featured
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
880
Documentation Writing (for coders)
carmenintech
77
5.6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
500
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
730
GraphQLとの向き合い方2022年版
quramy
50
15k
What's in a price? How to price your products and services
michaelherold
247
13k
Writing Fast Ruby
sferik
630
63k
Google's AI Overviews - The New Search
badams
0
1.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Paper Plane
katiecoart
PRO
5
54k
Transcript
Serverless Functions Azure, AWS, GCP Cloud Republic Event | Utrecht
| October 30, 2019
• Software developer • Cloud • Serverless • Functional programming
• Microsoft Azure MVP https://mikhail.io @MikhailShilkov Mikhail Shilkov
Function-as-a-Service Cloud Offerings
Hosting Plans Configurability Languages Programming Model Concurrency Isolation Cost Orchestrations
Cold Starts Scalability Conclusions Q&A
Hosting Plans
Azure Functions
AWS Lambda and Google Functions
Configurability
Azure Functions Consumption
AWS Lambda Memory Allocation
GCF Memory Allocation
Azure Functions Premium
Programming Languages
Language Azure Functions AWS Lambda Google Cloud Functions .NET (C#/F#)
GA GA - Node.js (JS/TS) GA GA GA JVM (Java) GA GA - Python GA (Linux only) GA GA PowerShell Preview GA - Go - GA GA Ruby - GA - Comparison Table
Programming Model
Azure Functions: Triggers and Bindings [FunctionName("MyFunc")] public static void Work(
[TimerTrigger("0 */10 * * * *")] TimerInfo timer, [Blob("filename")] Stream stream, [Queue("myqueue")] out string message) { // body }
AWS: JSON Input and Output exports.handler = async (event) =>
{ const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
ASP.NET Core on AWS Lambda public class LambdaFunction : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
{ protected override void Init(IWebHostBuilder builder) { builder .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup() .UseApiGateway(); } }
GCP: Express-like API exports.helloWorld = (req, res) => { let
message = req.query.message || req.body.message || 'Hello World!'; res.status(200).send(message); };
Deployment Artifacts
Concurrency and Isolation
Resource Pool
Resource Pool
Resource Pool
Resource Pool
Resource Pool
Resource Pool
Resource Pool
Client Value Resource Utilization
Tradeoff
Server, VM, container, process, ...
Server, VM, container, process, ... VM VM
Server, VM, container, process, ... VM VM
Server, VM, container, process, ... VM VM
Server, VM, container, process, ... VM VM
Azure Functions 12
Legacy of App Service
Legacy of App Service
App Service: scalability
App Service: scalability
Function App Consumption Plan
Isolation Layers
Simultaneous Executions
Simultaneous Executions
Simultaneous Executions
Simultaneous Executions
AWS Lambda 22
AWS Lambda
AWS Lambda
AWS Lambda
Integrating with AWS Lambda
Simultaneous Executions in AWS Lambda
Isolation Layers
Simultaneous Executions in AWS Lambda
Simultaneous Executions in AWS Lambda
Simultaneous Executions in AWS Lambda
• • • • AWS Firecracker
Isolation Layers with Firecracker
«Naive» Function Composition
Statistical Multiplexing
Google Cloud Functions 31
Google Cloud Functions
Cost
Nominal Pricing
Nuances
Azure Simultaneous Executions
AWS Lambda: HTTP Integration
AWS Lambda: HTTP Integration
Orchestration
Azure Logic Apps
AWS Step Functions
Azure Durable Functions public static async Task Sequential(DurableOrchestrationContext context) {
var conf = await context.CallActivityAsync<ConfTicket> ("BookConference", "ServerlessDays"); var flight = await context.CallActivityAsync<FlightTickets> ("BookFlight", conf.Dates); await context.CallActivityAsync("BookHotel", flight.Dates); }
Performance and Scalability
Ideal Scalability: Throughput
Ideal Scalability: Latency
Customer Value Cloud Resource Utilization
Cold Starts
Example: Loading a map
Example: Loading a map
Example: Loading a map
Cold Start
Warm Start
Period Before a Subsequent Cold Start
Cold Starts: Language Comparison
Dependencies Add to Cold Start
Fighting Cold Starts: Azure [FunctionName("Warmer")] public static void WarmUp( [TimerTrigger("0
*/10 * * * *")] TimerInfo timer) { // No need to do anything }
AWS: Single instance warming
AWS: Multiple instance warming
ETL AT SCALE: Asynchronous data processing
Async Pipelines
Experiments with Queues
AWS Lambda Processing 100k SQS Messages
GCF Processing 100k Pub/Sub Messages
Azure Functions Processing 100k Queue Messages
CPU-intensive workload on AWS Lambda
CPU-intensive workload on Google Cloud Functions
CPU-intensive workload on Azure Functions
AWS Processing Speed per Reserved RAM
HTTP AT SCALE: Serving traffic of StackOverflow
Serving StackOverflow-like traffic
Requests/sec during the load test
0 200 400 600 800 1000 1200 Azure Functions: Response
Percentiles (ms)
0 200 400 600 800 1000 1200 Azure Functions: Response
Percentiles (ms)
0 200 400 600 800 1000 1200 Azure Functions: Instances
Google Functions: Response Percentiles (ms)
Google Functions: Response Percentiles (ms)
0 200 400 600 800 1000 1200 Google Functions: Instances
0 200 400 600 800 1000 1200 AWS Lambda: Response
Percentiles (ms)
0 200 400 600 800 1000 1200 AWS Lambda: Response
Percentiles (ms)
0 200 400 600 800 1000 1200 AWS Lambda: Instances
So, What Should You Choose?
• • • • Follow-up reading (1)
• • • Follow-up reading (2)
None