Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Serverless Functions Azure, AWS, GCP
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Mikhail Shilkov
October 30, 2019
Programming
250
0
Share
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
100
Cloud Management Superpowers with Pulumi
mikhailshilkov
0
510
Cloud Superpowers with Pulumi and F#
mikhailshilkov
1
520
Cloud Management Superpowers with Pulumi and .NET
mikhailshilkov
0
130
Managing Any Cloud with .NET
mikhailshilkov
0
96
Azure Infrastructure as C# and F#
mikhailshilkov
0
270
Infrastructure as Software
mikhailshilkov
0
430
Azure Infrastructure as C# and F#
mikhailshilkov
0
320
Pulumi: Cloud Infrastructure as C# and F#
mikhailshilkov
0
870
Other Decks in Programming
See All in Programming
tRPCの概要と少しだけパフォーマンス
misoton665
2
250
20年以上続くプロダクトでも使い続けられる静的解析ツールを求めて
matsuo_atsushi
0
120
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
210
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
230
なぜあなたのコードには「コシ」がないのか?〜AI時代に問う、最後まで美味しい設計と戦略〜 #phpconkagawa / phpconkagawa2026
shogogg
0
100
[RubyKaigi 2026] Require Hooks
palkan
1
280
CursorとClaudeCodeとCodexとOpenCodeを実際に比較してみた
terisuke
1
510
Don't Prompt Harder, Structure Better
kitasuke
0
800
2026-04-15 Spring IO - I Can See Clearly Now
jonatan_ivanov
1
160
10 Tips of AWS ~Gen AI on AWS~
licux
5
520
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
290
2026年のソフトウェア開発を考える(2026/05版) / Software Engineering Scrum Fest Niigata 2026 Edition
twada
PRO
19
9.2k
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Prompt Engineering for Job Search
mfonobong
0
290
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
410
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
180
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.9k
The Limits of Empathy - UXLibs8
cassininazir
1
320
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
The Language of Interfaces
destraynor
162
26k
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