Slide 1

Slide 1 text

Proprietary + Confidential Serverless on Google Cloud Mete Atamel Developer Advocate at Google @meteatamel atamel.dev speakerdeck.com/meteatamel

Slide 2

Slide 2 text

01 The Pic-a-Daily: A serverless photo sharing app

Slide 3

Slide 3 text

A photo-sharing application

Slide 4

Slide 4 text

A photo-sharing application

Slide 5

Slide 5 text

Four code labs g.co/codelabs/serverless-workshop

Slide 6

Slide 6 text

02 The Serverless spectrum on Google Cloud Platform

Slide 7

Slide 7 text

Proprietary + Confidential Operational Model Programming Model No Infra Management Managed Security Pay only for usage Service-based Event-driven Stateless Serverless

Slide 8

Slide 8 text

Proprietary + Confidential Virtual Machine OS Application Runtime Application Virtual Hardware Dedicated Server OS Application Runtime Application Virtual Hardware Containers OS Application Runtime Application Virtual Hardware Functions Functions Functions Application Platform OS Application Runtime Application Virtual Hardware Functions Serverless OS Application Runtime Application Virtual Hardware Functions Infrastructure Container Platform Function Compute Engine Kubernetes Engine App Engine Cloud Functions On-Premises Serverless Zone Physical Hardware Cloud Run

Slide 9

Slide 9 text

Proprietary + Confidential Serverless functions Serverless web applications Serverless HTTP workloads Source code-based event driven functions Source code-based web apps and API backends HTTP containers fully managed HTTP containers on GKE cluster Cloud Functions App Engine Cloud Run Serverless compute options

Slide 10

Slide 10 text

Final architecture diagram

Slide 11

Slide 11 text

03 Cloud Functions

Slide 12

Slide 12 text

Back end code functions that automatically run in response to a trigger event Microservices Cloud "glue" Node.js, Python, Go, Java Cloud Functions

Slide 13

Slide 13 text

Cloud Functions as cloud glue Access 20+ Google services from GCF Cloud Storage Cloud Pub/Sub HTTPS Firebase Cloud Scheduler Cloud Tasks

Slide 14

Slide 14 text

Good fit “Serverless” Using Pub/Sub and/or Cloud Storage Don't want to think about runtime env Data transformations (ETL) Cloud-based HTTP glue and webhooks Constraints Runtimes: Node.js, Python, Go, Java Function level granularity Must interact via events No custom domain name Concurrency level of 1 (more cold starts) Good fit? Constraints?

Slide 15

Slide 15 text

Four code labs Lab 1 — Store and analyse pictures Storing pictures in Cloud Storage, trigger a Cloud Functions instance Calling the Cloud Vision API for analysis Storing metadata in Cloud Firestore Lab 3 — Run containers on schedule At a regular interval, with Cloud Scheduler Invoking a Cloud Run instance, to create a collage of recent pictures found in Cloud Firestore Storing collage in Cloud Storage Lab 2 — Create thumbnails Cloud Storage notifications sent to Pub/Sub Triggering a Cloud Run instance via Pub/Sub Creating a thumbnail with ImageMagick, and storing back into Cloud Storage Lab 4 — Create a web frontend Creating a web application with App Engine Listing pictures from Cloud Firestore Displaying pictures & collage from Cloud Storage g.co/codelabs/serverless-workshop

Slide 16

Slide 16 text

04 Cloud Run

Slide 17

Slide 17 text

Containers Any language Any library Any binary Ecosystem of base images .js .rb .go .py .sh … 0 1 0 1 0 0 1 1 1

Slide 18

Slide 18 text

Containers Flexibility Serverless Velocity

Slide 19

Slide 19 text

Cloud Run Fully managed, deploy your workloads and don’t see the cluster. Cloud Run on Anthos Deploy into Anthos, run serverless side-by-side with your existing workloads. Knative Everywhere Use the same APIs and tooling anywhere you run Kubernetes with Knative. Serverless containers with Knative & Cloud Run

Slide 20

Slide 20 text

Container to production in seconds Natively Serverless One experience, where you want it Cloud Run Bringing serverless to containers

Slide 21

Slide 21 text

HTTPS Endpoint Public • Website • API endpoint Private • Internal services • Async tasks • Mobile backend • Webhook

Slide 22

Slide 22 text

Container contract Listen on 0.0.0.0 on port $PORT (default 8080) HTTP server must start < 4 min (timeout → 504) Request time < 15 min (default → 5 min) Stateless (in-memory file system, doesn’t persist) Computation only within request (No background activity)

Slide 23

Slide 23 text

Container resources 1 vCPU per container instance (configurable to 2vCPU) 256 MiB of memory up to a max of 2 GiB (configurable) 80 concurrent requests per container (configurable 1-80) 1000 max containers by default (configurable 1-1000) Access to a Metadata Server Sandboxed by gVisor

Slide 24

Slide 24 text

Pay per use CPU / Memory / Requests 100ms

Slide 25

Slide 25 text

Billable time Instance Billable Time Request 1 Start Request 1 End Request 2 Start Request 2 End Instance Time Billable Non-billable

Slide 26

Slide 26 text

Concurrency: up to 80 concurrent requests concurrency = 1 concurrency = 80

Slide 27

Slide 27 text

Pub/Sub triggered internal services Cloud Run Cloud Pub/Sub Queue Queue Queue

Slide 28

Slide 28 text

Storage triggered internal services Cloud Run Cloud Pub/Sub Queue Queue Queue Cloud Storage

Slide 29

Slide 29 text

Scheduled services Command Line Interface (CLI) User Interface (UI) Scheduler API Cloud Run Cloud Scheduler

Slide 30

Slide 30 text

Services part of async tasks Cloud Tasks user_registration user_levelcompleted user_inapppurchase user_statechange Daily activity metrics service User profile service Payment processing service Game state service

Slide 31

Slide 31 text

Proprietary + Confidential Good fit? Constraints? Good fit Stateless HTTP request-response workloads Scale: way up, down to zero, bursty Specific runtime requirements: language, dependencies, etc Constraints Must use containers Decide on build process (Cloud Build, etc)

Slide 32

Slide 32 text

Four code labs Lab 1 — Store and analyse pictures Storing pictures in Cloud Storage, trigger a Cloud Functions instance Calling the Cloud Vision API for analysis Storing metadata in Cloud Firestore Lab 3 — Run containers on schedule At a regular interval, with Cloud Scheduler Invoking a Cloud Run instance, to create a collage of recent pictures found in Cloud Firestore Storing collage in Cloud Storage Lab 2 — Create thumbnails Cloud Storage notifications sent to Pub/Sub Triggering a Cloud Run instance via Pub/Sub Creating a thumbnail with ImageMagick, and storing back into Cloud Storage Lab 4 — Create a web frontend Creating a web application with App Engine Listing pictures from Cloud Firestore Displaying pictures & collage from Cloud Storage g.co/codelabs/serverless-workshop

Slide 33

Slide 33 text

Four code labs Lab 1 — Store and analyse pictures Storing pictures in Cloud Storage, trigger a Cloud Functions instance Calling the Cloud Vision API for analysis Storing metadata in Cloud Firestore Lab 3 — Run containers on schedule At a regular interval, with Cloud Scheduler Invoking a Cloud Run instance, to create a collage of recent pictures found in Cloud Firestore Storing collage in Cloud Storage Lab 2 — Create thumbnails Cloud Storage notifications sent to Pub/Sub Triggering a Cloud Run instance via Pub/Sub Creating a thumbnail with ImageMagick, and storing back into Cloud Storage Lab 4 — Create a web frontend Creating a web application with App Engine Listing pictures from Cloud Firestore Displaying pictures & collage from Cloud Storage g.co/codelabs/serverless-workshop

Slide 34

Slide 34 text

05 App Engine

Slide 35

Slide 35 text

Dedicated Server Dedicated Server OS Application Runtime Application Virtual Hardware Functions Physical Hardware OS Application Runtime Application Hardware Functions Dedicated Server OS Application Runtime Application Hardware Functions Serverless OS Application Runtime Application Hardware Functions Function Cloud Functions On-Premises Virtual Machine OS Application Runtime Application Hardware Functions Infrastructure Compute Engine Containers OS Application Runtime Application Hardware Functions Container Kubernetes Engine Application Platform OS Application Runtime Application Hardware Functions Platform App Engine Highly customizable Highly managed

Slide 36

Slide 36 text

What is App Engine? Serverless, but for your whole web app and not just single functions. App Engine goal: let developers focus on code, GCP handle the rest Can scale very quickly Open-source, idiomatic experience Use any library, extension, binary, or framework Python, Java, Node.js, PHP, Ruby, Go

Slide 37

Slide 37 text

App Engine Standard (2nd gen) ● Open-source, idiomatic experience ● Use any extension, binary, or framework ● Supported Runtimes ○ Python 3.7 (3.8 in beta) ○ Java 11 ○ Node.js 10 (12 in beta) ○ PHP 7.3 ○ Go 1.12 App Engine Flexible ● Runs Docker containers ● Open source runtimes for Node.js, Ruby, Java, Python, Go, PHP, .NET ● Also, if it runs in a Docker container, you can run it ← nearly everything ⚠Not serverless!

Slide 38

Slide 38 text

App Engine runtimes Standard 1st generation Standard 2nd generation Flexible Python 2.X, Java, PHP, Go Node.js 10, Python 3.7, Go 1.12, PHP 7.3, Java 11 Node.js, Ruby, Java, Python, Go, PHP, .NET & custom container images Sandboxed processes Runs on managed VMs GAE specific APIs + GCP APIs Use GCP APIs directly No binary modules / libraries any extension, binary, or framework open-source, idiomatic experience

Slide 39

Slide 39 text

Concurrency & scaling Traffic Traffic •Scale up/down •Scale-up may lead to "cold starts" •One vs. multiple concurrent requests •Traffic splitting across versions •CDN static asset serving

Slide 40

Slide 40 text

Good fit HTTP/S request-response Stateless serving applications Scaling to high traffic CDN static asset serving Constraints Standard (1st gen) ● Runtimes for Python, Java, PHP, Go, Node.js Standard (2nd gen) ● Can use use binary extensions ● Python, Node.js, Java, Go, Ruby, PHP Flexible runtimes ● Inherit Docker constraints ● Not best for very low traffic sites (no scale to 0) ● Slow deploy times Good fit? Constraints?

Slide 41

Slide 41 text

Four code labs Lab 1 — Store and analyse pictures Storing pictures in Cloud Storage, trigger a Cloud Functions instance Calling the Cloud Vision API for analysis Storing metadata in Cloud Firestore Lab 3 — Run containers on schedule At a regular interval, with Cloud Scheduler Invoking a Cloud Run instance, to create a collage of recent pictures found in Cloud Firestore Storing collage in Cloud Storage Lab 2 — Create thumbnails Cloud Storage notifications sent to Pub/Sub Triggering a Cloud Run instance via Pub/Sub Creating a thumbnail with ImageMagick, and storing back into Cloud Storage Lab 4 — Create a web frontend Creating a web application with App Engine Listing pictures from Cloud Firestore Displaying pictures & collage from Cloud Storage g.co/codelabs/serverless-workshop

Slide 42

Slide 42 text

Proprietary + Confidential Questions & Answers Mete Atamel — @meteatamel