Scale a Swagger based Web API (Guillaume Laforge)

Post on 09-Jan-2017

178 views 3 download

Transcript of Scale a Swagger based Web API (Guillaume Laforge)

Proprietary + Confidential

Scale a Swagger-based Web APIwith Google Cloud Endpoints

Guillaume LaforgeStaff Developer Advocate

Google Cloud Platform

@glaforge

Slides available here:bit.ly/endpoints-nordic

Cloud Endpointshttps://cloud.google.com/endpoints/

Proprietary + Confidential

Scale a Swagger-based Web APIwith Google Cloud Endpoints

Guillaume LaforgeStaff Developer Advocate

Google Cloud Platform

@glaforge

What does

Swagger bring

to the table?

Proprietary + Confidential

Scale a Swagger-based Web APIwith Google Cloud Endpoints

Guillaume LaforgeStaff Developer Advocate

Google Cloud Platform

@glaforge

How do we Scale

in the Cloud?

Google-style!

Proprietary + Confidential

Scale a Swagger-based Web APIwith Google Cloud Endpoints

Guillaume LaforgeStaff Developer Advocate

Google Cloud Platform

@glaforge

So what’s

Cloud Endpoints

Proprietary + Confidential

@glaforge

Ok, OpenAPI Specs!

Proprietary + Confidential

@glaforge

Ok, OpenAPI Specs!

Cloud

Endpoints

mastermind!

Proprietary + Confidential

Benefits of OpenAPI Specs

Contract

First is

Trendy !@glaforge

Contract as

the Source

of Truth

Facilitates Team

Communication,

Collaboration

Great for Tooling

Great for Tooling

Client SDKs

Server skeletons

Great for Tooling

Client SDKs

Server skeletons

Test stubs

Static & live mocks

Great for Tooling

Client SDKs

Server skeletons

Test stubs

Static & live mocks

Static documentation

Great for Tooling

Client SDKs

Server skeletons

Test stubs

Static & live mocks Sandbox & live playground

Static documentation

API Portal w/ provisioning

Great for Tooling

Client SDKs

Server skeletons

Test stubs

Static & live mocks Sandbox & live playground

Static documentation

API Portal w/ provisioning

Be careful with code generation overwriting customisations

Proprietary + Confidential

Scale a Swagger-based Web APIwith Google Cloud Endpoints

Guillaume LaforgeStaff Developer Advocate

Google Cloud Platform

@glaforge

How do we Scale

in the Cloud?

Google-style!

Proprietary + Confidential

The various compute optionson Google Cloud Platform

@glaforge

Proprietary + Confidential

Google App Engine — GAEFlex and Standard

“Deploy your code,

we’ll scale it

for you!”

@glaforge

Proprietary + Confidential

Google Container Engine — GKEPowered by Kubernetes & Docker

OSS Kubernetes

based container

clustering

@glaforge

Proprietary + Confidential

Google Compute Engine — GCECustomize your VM images

Full control:

Reusable and

customisable VMs

@glaforge

Proprietary + Confidential

Scale a Swagger-based Web APIwith Google Cloud Endpoints

Guillaume LaforgeStaff Developer Advocate

Google Cloud Platform

@glaforge

So what’s

Cloud Endpoints

Proprietary + Confidential

Cloud EndpointsAPI Management on Google Cloud Platform

@glaforge

Proprietary + Confidential

What is API Management?

@glaforge

Proprietary + Confidential

● API Management from Google

● This architecture serves hundreds of billions of requests per day

● All configuration happens through Open API Spec (JSON/HTTP & gRPC)

Cloud Endpoints

@glaforge

Proprietary + Confidential

Three key aspectsFor public / private / mobile / µ-services use cases

@glaforge

Proprietary + Confidential

Three key aspectsFor public / private / mobile / µ-services use cases

Control access, authenticate users

SECURE

@glaforge

Proprietary + Confidential

Three key aspectsFor public / private / mobile / µ-services use cases

Logging and monitoring of key metrics

SECURE MONITOR

@glaforge

Proprietary + Confidential

Three key aspectsFor public / private / mobile / µ-services use cases

Speed and scalability

SECURE MONITOR SCALE

@glaforge

Proprietary + Confidential

@glaforge

Proprietary + Confidential

Extensible Service ProxyWhy a server-local proxy?

Extremely thin

Eliminates network hop

Simpler, better security

Scales with your app

<1 ms latency

@glaforge

Proprietary + Confidential

Extensible Service ProxyWhy a server-local proxy?

Extremely thin

Eliminates network hop

Simpler, better security

Scales with your app

<1 ms latencyWill be

Open

Sourced

@glaforge

Pancake DEMO

Proprietary + Confidential

Proprietary + Confidential

What else?

@glaforge

Proprietary + Confidential

JSON-HTTP/1.1

Use Open API specs to manage RESTful APIs written in any language and with

any framework.

Proto-HTTP/2

Use gRPC to build highly efficient

HTTP/2-based APIs

Choose your protocol

@glaforge

Proprietary + Confidential

Write once; serve twice

● At Google, our gRPC APIs serve both gRPC and REST/JSON surfaces

● Proxy allows you to write a gRPC backend and serve both REST/JSON and gRPC

● The only API management product that allows managing gRPC-based APIs

@glaforge

Proprietary + Confidential

Summary

Guillaume LaforgeStaff Developer Advocate

Google Cloud Platform

@glaforge

Summary

Manage

Open

Choice

JSON Web Tokens,

Auth0, Firebase

API Keys, Custom...

Secure

Monitor

Scale

Summary

Manage

Open

Choice

Secure

Monitor

ScaleDashboard with

API Metrics

and API Logs

Summary

Manage

Open

Choice

Secure

Monitor

Scale

Summary

Manage

Open

Choice

Protocol

Tech

Scale

JSON / HTTP

Or gRPC

Summary

Manage

Open

Choice

Protocol

Tech

Scale

Any Language

Any Framework

Summary

Manage

Open

Choice

Protocol

Tech

Scale

3rd party cloud,

or on-premise

Summary

Manage

Open

ChoiceStandard

OSS

Summary

Manage

Open

ChoiceStandard

OSS

Current state & supported platforms

● BETA: Cloud Endpoints for JSON / HTTP REST APIs ○ App Engine Flex, Container Engine, Compute Engine○ Other clouds + on premise via Kubernetes

● ALPHA: Cloud Endpoints for gRPC○ Same (except GAE Flex w/ HTTP/1.1 support only)

@glaforge

Proprietary + Confidential

Thanks for your attention!

Guillaume LaforgeStaff Developer Advocate

Google Cloud Platform

@glaforge

Slides available here:bit.ly/endpoints-nordic

Cloud Endpointshttps://cloud.google.com/endpoints/

References

Slides of this presentationhttp://bit.ly/nordic-endpoints

Google Cloud Endpointshttps://cloud.google.com/endpoints/

Managing gRPC APIs with Google Cloud Endpointshttp://www.slideshare.net/WenchengLu/managing-grpc-apis-with-google-cloud-endpoints

Choosing a compute option on Google Cloud Platformhttps://cloud.google.com/docs/choosing-a-compute-option

@glaforge

Picture credits — public domain images

Truth newspaperhttps://pixabay.com/fr/v%C3%A9rit%C3%A9-journal-actualit%C3%A9s-imprim%C3%A9-166853/

Women working togetherhttps://pixabay.com/fr/femmes-travail-d-%C3%A9quipe-l-%C3%A9quipe-1209678/

Drillhttps://pixabay.com/fr/t%C3%AAte-de-forage-foret-perceuse-m%C3%A9tal-444504/

Pancakeshttps://pixabay.com/fr/cr%C3%AApe-cr%C3%AApes-manger-alimentaire-640865/

Room service iconhttps://pixabay.com/fr/service-de-chambre-serviteur-service-297071/

@glaforge

Proprietary + Confidential

Appendix

Proprietary + Confidential

--- swagger: "2.0" info: description: "No description" version: "1.0.0" title: "pancakes-api" contact: {} host: "pancakes-endpoint-demo.appspot.com" paths: /pancakes: get: summary: "Retrieve the pancakes" operationId: "getAllPancakes" produces: - "application/json" parameters: [] responses: 200: description: "Status 200" schema: type: "array" items: $ref: "#/definitions/Pancake" security: - api_key: []

swagger2.yaml

post: summary: "Add a new pancake" operationId: "createPancake" consumes: - "application/json" produces: - "application/json" parameters: - in: "body" name: "body" required: false schema: $ref: "#/definitions/Pancake" responses: 201: description: "Status 201" schema: $ref: "#/definitions/Pancake" security: - api_key: []

Proprietary + Confidential

/pancakes/{pancakeId}: get: summary: "Retrieve a particular pancake" operationId: "getPancakeById" produces: - "application/json" parameters: - name: "pancakeId" in: "path" description: "The unique pancake ID" required: true type: "string" responses: 200: description: "Status 200" schema: $ref: "#/definitions/Pancake" security: - api_key: []

swagger2.yaml

securityDefinitions: api_key: type: "apiKey" name: "key" in: "query" definitions: Pancake: type: "object" required: - "title" properties: id: type: "string" description: "The unique pancake ID" title: type: "string" description: "Pancake title"

Proprietary + Confidential

FROM gcr.io/google_appengine/openjdk8 VOLUME /tmp ADD build/distributions/pancakes.tar / ENV JAVA_OPTS='-Djava.security.egd=file:/dev/./urandom' ENTRYPOINT ["/pancakes/bin/start"] EXPOSE 8081

Dockerfile

Proprietary + Confidentialkube-cfg.yaml

apiVersion: v1 kind: Service metadata: name: esp-pancakes spec: ports: - port: 80 targetPort: 8080 protocol: TCP name: http selector: app: esp-pancakes type: LoadBalancer ---

apiVersion: extensions/v1beta1 kind: Deployment metadata: name: esp-pancakes spec: replicas: 1 template: metadata: labels: app: esp-pancakes spec: containers: - name: esp image: b.gcr.io/endpoints/endpoints-runtime:0.3 args: [ "-p", "8080", "-a", "127.0.0.1:8081", "-s", "pancakes-endpoint-demo.appspot.com", "-v", "2016-10-24r0", ] ports: - containerPort: 8080 - name: pancakes-image image: gcr.io/pancakes-endpoint-demo/pancakes-image:latest ports: - containerPort: 8081

Proprietary + Confidential

SERVICE: “esp-pancakes”

CONTAINER: “esp” APP-CONTAINER: “pancakes-image”

APP

80 8080 8081 8081