+ All Categories
Home > Software > Serverless apps with OpenWhisk

Serverless apps with OpenWhisk

Date post: 08-Jan-2017
Category:
Upload: daniel-krook
View: 361 times
Download: 0 times
Share this document with a friend
51
Serverless apps with OpenWhisk Cloud native • Event driven • Microservices @DanielKrook • Senior Software Engineer • IBM Cloud OpenWhisk.org
Transcript
Page 1: Serverless apps with OpenWhisk

Serverless apps with OpenWhiskCloud native • Event driven • Microservices

@DanielKrook • Senior Software Engineer • IBM Cloud

OpenWhisk.org

Page 2: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

What you will learn today

• How cloud has evolved to enable developers to write cloud native applications better, faster, and cheaper using serverless technology.

• How OpenWhisk provides an open source platform to enable cloud native, serverless, event driven applications.

• How to get started developing with OpenWhisk on Bluemix, or contributing to the underlying open source serverless platform.

Page 3: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

What makes serverless,event driven computing so compelling?

Page 4: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Cloud evolution means developers can write apps better, faster, and cheaper

Bare metal

Virtual machines

ContainersFunctions

Decreasing  concern  (and  control)  over  stack  implementation

Increasing  focus  on  business  logic

Page 5: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Newer workloads are a better fit for event driven programming

Execute app logic in response to database triggers

Execute app logic in response to sensor data

Execute app logic in response to cognitive trends

Execute app logic in response to scheduled tasks

Provide easy server-side backend for mobile app

Page 6: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Problem: It’s expensive to scale microservices

Explosion in number of containers / processes:

1. Increase of infrastructure cost footprint

2. Increase of operational management cost and complexity

Region BRegion A

Break-­down  into  microservices

Make  each  micro  service  HA

Protect  against  regional  outages

Monolithic application

Page 7: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Serverless can handle many cloud native app 12 Factors

I Codebase Handled by developer (Manage versioning of functions on their own)

II Dependencies Handled by developer, facilitated by serverless platform (Runtimes and packages)

III Config Handled by platform (Environment variables or injected event parameters)

IV Backing services Handled by platform (Connection information injected as event parameters)

V Build, release, run Handled by platform (Deployed resources are immutable and internally versioned)

VI Processes Handled by platform (Single stateless containers often used)

VII Port binding Handled by platform (Actions or functions are automatically discovered)

VIII Concurrency Handled by platform (Process model is hidden and scales in response to demand)

IX Disposability Handled by platform (Lifecycle is hidden from the user, fast startup and elastic scale is prioritized)

X Dev/prod parity Handled by developer (The developer is the deployer. Scope of what differs is narrower)

XI Logs Handled by platform (Developer writes to console.log, platform handles log streaming)

XII Admin processes Handled by developer (No distinction between one off processes and long running)

Page 8: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Problem: Programming and pricing models aren’t efficient

Continuous polling needed in the absenceof an event driven programming model

Charged for resources, even when idle

Worries persist about capacity managementSwift

Application

Container VMCF

2

Polling

1b

Request

1a

Page 9: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Cost model offers a better match between app and resources

Applications charged by compute time (millisecond) rather than

reserved memory (GB/hour).

While many applications must still be deployed in a daemon

model, serverless provides an alternative that can mean substantial cost savings for a variety of event driven workloads.

Greater linkage between cloud resources used and business

operations executed.

Page 10: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Technological and business factors make serverless compelling

Serverless platforms and frameworks are gaining traction

Cost models getting more granular and efficient

Growth of event driven workloads that need automated scale

Platforms evolving to facilitate cloud native design for developers

Page 11: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

IntroducingOpenWhisk

Page 12: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

OpenWhisk in a nutshell

OpenWhisk is a cloud platformthat executes code

in response to events

OpenWhisk

Page 13: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

OpenWhisk is different than other hosted services

Serverless deployment and operations model

Optimized utilization, fine grained metering at any scale

Flexible programming model with powerful tooling

Open source and open ecosystem (moving to Apache)

Ability to run in public, private, and hybrid models

OpenWhisk

Page 14: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

OpenWhisk supports many growing workloads

OpenWhisk can help power various mobile, web and IoT app use cases by simplifying the programming model of orchestrating various services using events without a dedicated backend.

Digital app workloads Big Data/Analytics pipelineComplex data pipelines for Big Data/Analytics tasks can be scripted using changes in data services or streams for near real-time analytics and feedback.

DevOps and infrastructure as codeOpenWhisk can be used to automate DevOps pipelines based on events triggered from successful builds, or completed staging, or a go-live event.

Microservices builderOpenWhisk can be used to easily build microservices given the footprint and programming model desired by microservices

Page 15: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

The OpenWhiskprogramming model

Page 16: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Triggers, actions, rules (and packages)

Data sources define the events they emit as triggers.

Developers associate actions to handle the events via rules.

T A R

Page 17: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Triggers

A class of events that can occurT

Social events

Data changes

Device readings Location updates

User input

Page 18: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Actions

Code that runs in response to an event(that is, an event handler)

A

Page 19: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Actions

Can be written in a variety of languages, such asJavaScript, Python, Java, and Swift

A

function main(params)  {return  {  message:  'Hello,  ' +  params.name +  '  from  ' +  params.place };

};

Page 20: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Actions

Or any other language by packaging with DockerA

Page 21: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Actions

Can be composed to create sequencesthat increase flexibility and foster reuse

A

AA := A1 + A2 + A3

AB := A2 + A1 + A3

AC := A3 + A1 + A2

Page 22: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Rules

An association of a trigger to an actionin a many to many mapping.

R

R := T A

Page 23: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Packages

A shared collection of triggers and actionsP

A

A readwrite

T changes A translate A forecast

A postT topic

OpenSource A myAction

T myFeed

Yours

T commit

ThirdParty

Page 24: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhiskin action

Page 25: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

The OpenWhisk execution model

Pool of actions

Swift DockerJS

Trigger

1

Running action

Running action

Running action

3

OpenWhiskEngine

2 A

T

AAA

Page 26: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

Demo 1: Create a timer triggered action

Page 27: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Demo 1: Timer triggered action

Trigger

1

Runningaction

2

T

A

Cron syntax alarm

Log the current time

$ wsk action create handler handler.js

$ wsk action invoke --blocking handler

$ wsk trigger create every-20-seconds \--feed /whisk.system/alarms/alarm--param cron “*/20 * * * * *”

$ wsk rule create --enable \invoke-periodically \every-20-seconds \

handler

$ wsk activation poll

bit.ly/ow-demo-1

Page 28: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

OpenWhisk enables event driven applications

Event Providers

Cloudant

GitHub

Weather

Which triggers execution ofassociated OpenWhisk action

2

SlackJS Swift Docker …

An event occurs, for example• Commit pushed to GitHub repository• Data changed in Cloudant

1 OpenWhisk

Page 29: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

OpenWhisk can implement REST microservices

Send HTTP requestHTTP GET

app.com/customers

1

Invoke OpenWhiskaction get-customers

Browser

Mobile App

Web App

2

JS Swift Docker …

OpenWhisk

API Proxy

Page 30: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

Demo 2: Create a Slack bot

Page 31: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Demo 2: Create a Slack bot

bit.ly/ow-demo-2GET /register

POST /command

POST /event

Register action

Event action

Command action

2

OpenWhiskEngine

1

AAA

API Proxy

Register the bot

Respond to direct messages

Respond to slash commands

Page 32: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhiskhigh level implementationarchitecture

Page 33: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

OpenWhisk design principles

1. Provide an open interface for event providers

2. Offer polyglot support and simple extensibility for new runtimes

3. Support higher level constructs as appropriate (e.g. action sequences)

4. Scale dynamically on a per request basis

5. Enable sharing of actions and event providers

6. Leverage best of breed open source software (Docker, Kafka, Consul, …)

7. Use the Apache 2 License

Page 34: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhisk under the hood: Developer view

Couch DB Consul

Router (NGINX)

Controller

Kafka

Invoker Invoker

Docker

Executor Executor

Docker

Java Swift

Executor Executor

NodeJS Python

1. Router receives request to API via CLI or UI

2. Controller checks entitlement and dispatches requests to Kafka

3. Invokers pull requests from CouchDB and start execution of the action

Page 35: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhisk under the hood: A deeper look

bit.ly/ow-int

1. Entering the system: nginx

2. Really entering the system: Controller

3. Authentication and Authorization: CouchDB

4. Getting the action: CouchDB… again

5. Who’s there to invoke the action: Consul

6. Please form a line: Kafka

7. Actually invoking the code already: Invoker

8. Storing the results: Yes… CouchDB again

Page 36: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhisk container model

Philippe Suterbit.ly/ow-psuter

Page 37: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhisk container model

Philippe Suterbit.ly/ow-psuter

Page 38: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhisk container model

Philippe Suterbit.ly/ow-psuter

Page 39: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhisk container model

Philippe Suterbit.ly/ow-psuter

Page 40: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhisk container model

Philippe Suterbit.ly/ow-psuter

Page 41: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhisk container model

Philippe Suterbit.ly/ow-psuter

Page 42: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

OpenWhisk container model

Page 43: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

Summary

Page 44: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

What you learned today

• We’re in the early days of an evolution that is empowering developers to write cloud native applications better, faster, and cheaper

• OpenWhisk provides an open source platform to enable cloud native, serverless, event driven applications

• Bluemix provides a hosted instance of OpenWhisk that you can use to get started (and offers integration with a catalog of services)

Page 45: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Experiment with OpenWhisk on Bluemix

bit.ly/ow-bm

Page 46: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Join us to build a cloud native platform for the future!

OpenWhisk.org

dwopen.slack.com #openwhisk

bluemix.net

Page 47: Serverless apps with OpenWhisk

OpenWhisk.org @DanielKrook

Backup

Page 48: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

Watson IOT OpenWhisk

Customer registry

Shipping system SendGridService

reports

actions

IBM Cloud

LOB, SoR systems &databases

Need a new filter

Email: Filter on its way!

bit.ly/open-fridge

Page 49: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

analyze reading

OpenWhisk

createorder

alert customer

alarm

changes changes

service order appliance

feed

WatsonIoT

A A AT

T T

T

P

PP

bit.ly/open-fridge

Page 50: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

OpenWhisk CLI: Create and test action

Create the Action that analyzes IoT readings, then stores in the databasewsk action create analyze-service-event analyze-service-event.js \

--param cloudant_user $CLOUDANT_USER

--param cloudant_pass $CLOUDANT_PASS

Invoke the Action manually with sample message data to testwsk action invoke --blocking --result analyze-service-event

--param service '{"appliance_serial": "xxxxyyyyzzzz", "part_number":

"ddddeeeeffff", "reading": 13, "timestamp": 1466188262}'

A

Page 51: Serverless apps with OpenWhisk

@DanielKrookOpenWhisk.org

OpenWhisk CLI: Link trigger to action

Create the Trigger that subscribes to an MQTT topic patternwsk trigger create openfridge-feed-trigger \

--feed mqtt/mqtt-feed-action

--param topic 'iot-2/type/+/id/+/evt/+/fmt/json'

--param url 'ssl://example.messaging.internetofthings.ibmcloud.com:8883’

Link the Trigger to the Action using a Rulewsk rule create --enable openfridge-feed-rule \

openfridge-feed-trigger analyze-service-event

R := T A


Recommended