How to build a Distributed Serverless Polyglot Microservices IoT Platform using Docker and OpenWhisk

Post on 15-Apr-2017

2.723 views 0 download

Transcript of How to build a Distributed Serverless Polyglot Microservices IoT Platform using Docker and OpenWhisk

Animesh Singh STSM IBM Cloud Platform Cloud Expo, Santa Clara, November 2016 @AnimeshSingh

How to build a Distributed Serverless Polyglot Microservices IoT Platform using Docker and OpenWhisk

@AnimeshSingh

Cloud Computing Evolution

Bare Metal

IaaS

Container Orchestrators PaaS

@AnimeshSingh

Problem: It’s expensive to scale microservices, even on a PaaS

Explosion in number of containers / processes:

1.  Increase of infrastructure cost footprint

2.  Increase of operational management cost and complexity

Region B Region A

Break-down into microservices

Make each micro service HA

Protect against regional outages

Monolithic application

@AnimeshSingh

Problem: the programming and cost model doesn’t help

•  Continuous polling needed in the absence of an event driven programming model.

•  Charged for resources, even when idle.

•  Worries persist about capacity management.

Swift

Application

Container VM CF

2

Polling

1b

Request

1a

@AnimeshSingh

Bare Metal

IaaS

Container Orchestrators PaaS

Enter Serverless!

Serverless

@AnimeshSingh

a cloud-native platform for

short-running, stateless computation and

event-driven applications which

scales up and down instantly and automatically and

charges for actual usage at a millisecond granularity

event handlers events

What is Serverless?

@AnimeshSingh

Why is Serverless attractive?

7

Short answer: Besides a)  making app development & ops dramatically faster, cheaper, easier (but different J ), it b)  Drives infrastructure cost savings

(yes – this has been true for most IT innovations over the last decades, while serverless potentially introduces another step-function change)

@AnimeshSingh

Key factors for infrastructure cost savings Traditional models (CF, containers, VMs)

Serverless

High Availability At least 2-3 instances of everything

No incremental infrastructure

Multi-region deployment One deployment per region No incremental infrastructure

Cover delta between short (<10s) load spikes and valleys (vs average)

~2x of average load No incremental infrastructure

Example incremental costs 2 instances x 2 regions x 2 = 8x

1x

8

@AnimeshSingh

What is Serverless good for?

9

Introducing OpenWhisk, a fabric and platform for the serverless, event driven programming model

@AnimeshSingh

What is OpenWhisk? an open Beta offering in IBM’s Bluemix cloud

@AnimeshSingh

What is OpenWhisk? an open-source project on github

@AnimeshSingh

Build your apps, your way. Use a combination of the most prominent open-source compute

technologies to power your apps. Then, let Bluemix handle the rest.

Ease of getting started Full stack Control

Functions PaaS Containers IaaS

What is OpenWhisk? another way to build apps….

@AnimeshSingh

What is OpenWhisk? a distributed compute service to execute application logic in response "to events.

@AnimeshSingh

OpenWhisk: How does it work?

Incoming HTTP request, e.g. HTTP GET openwhisk.ng.bluemix.net/api/v1/<namespace>/actions/getCustomers

1 Browser

Mobile App

Web App

OpenWhisk

2 Invoke associated OpenWhisk action

„getCustomers“

Swift! Docker JS! Python! Java*!

Variety of languages

* work in progress

@AnimeshSingh

OpenWhisk: How does it work?

-  API Gateway takes care of… -  security (authenticate, authorize, threat protect, validate)

-  control (rate limiting, response caching)

-  mediation

-  parameter mapping

-  schema validation

-  … and supports e.g. different verbs (Get, Post, Put, Delete, …)

Incoming HTTP request, e.g. HTTP GET api-gw.mybluemix.net/…/getCustomers

1 Browser

Mobile App

Web App

AP

I Gat

eway

2

OpenWhisk

3 Invoke associated OpenWhisk action

„getCustomers“

Swift! Docker JS! Python! Java*!

* work in progress

Coming soon...

The OpenWhisk programming model

What is OpenWhisk? a high-level serverless programming model

Trigger Rule

Action

Package

What is OpenWhisk? a high-level serverless programming model

Trigger Rule

Action

Package

language support to encapsulate, share, extend code

first-class event-driven programming constructs

first-class functions compose via sequences

docker containers as actions

all constructs first-class — powerful extensible language

@AnimeshSingh

Trigger: A class of events that can happen T

Programming model

@AnimeshSingh

Actions: An event-handler, i.e. code that runs in response to an event

A

Programming model

@AnimeshSingh

Programming model Actions: Multi-runtime support, e.g. JavaScript A

functionmain(msg){return{message:'Hello,'+msg.name+'from'+msg.place};

};

@AnimeshSingh

Actions: Multi-runtime support, e.g. Swift A funcmain(params:[String:Any])->[String:Any]{

varreply=[String:Any]()ifletname=params[“name”]as?String{ print(“Hello\(name)”) reply[“msg”]=“Goodbye\(name)”}returnreply

}

Programming model

@AnimeshSingh

Actions: In any other language by packaging with Docker A Programming model

@AnimeshSingh

Rules: An association of a trigger and an action R

R := T A

Programming model

@AnimeshSingh

Actions: Can be chained to create sequences to increase flexibility and foster reuse A

AA := A1 + A2 + A3

AB := A2 + A1 + A3

AC := A3 + A1 + A2

Programming model

@AnimeshSingh

Packages: A shared collection of triggers and actions P

A

A read

write T changes A translate A forecast

A post T topic

Open Source A myAction

T myFeed

Yours

T commit

Third Party

Programming model

OpenWhisk backend architecture

@AnimeshSingh

github.com

openwhisk/openwhisk

!!!!

coreruntime

CLIpackagessecurityfeatures

persistent store

loggingmonitoring billing

authentication

OpenWhisk on Bluemix

@AnimeshSingh

Edge!VM!Edge!

VM!

! Edge!

!!!!

Edge!VM!Edge!

VM!

Master!!!!!!!!!

controllerEdge!VM!Edge!

VM!

!Slave!

!!!!!!!!!!

invoker

•  microservices deployed in docker containers!•  open-source system middleware!•  NoSQL (CouchDB) persistence!

action container!action

container!action container!action

container!action container!action

container!action container!action container

OpenWhisk Open Source Core Runtime

Why Docker?

@AnimeshSingh

controller

invoker

Deploying and managing traditional microservices

1

Why Docker?

@AnimeshSingh

Slave VM

Lightweight isolated execution environment for arbitrary user code

action container action container

action container action container

action container action container

action container action container

2

Why Docker?

@AnimeshSingh

Portable description of arbitrary binary user actions (Dockerfile)

Docker file

3 Why Docker?

@AnimeshSingh

% wsk action invoke hello in 8 easy steps

How it all works?

POST /api/v1/namespaces/myNamespace/actions/myAction

36

Controller

… Invoker Invoker Invoker

1!

2!3,4!

5!

6!

7!

8!

OpenWhisk Topology

@AnimeshSingh

Cloudant

ELK-Stack

Controller

Integration Service

… Invoker Invoker Invoker

Monitoring

OpenWhisk Topology in Bluemix

@AnimeshSingh

OpenWhisk: Usage of Docker

•  Isolation of actions • Control over consumed resources of each container

38

A = wsk action invoke docker run

@AnimeshSingh

OpenWhisk: Container startup

39

Start container docker run

Initialize /init

Run /run

cold container

@AnimeshSingh

Start container docker run

Initialize /init

Run /run

OpenWhisk: Container startup

40

pre-warmed container

@AnimeshSingh

Start container docker run

Initialize /init

Run /run

OpenWhisk: Container startup

41

warm container

@AnimeshSingh

OpenWhisk: Container startup optimization

• Performance is king.

42

cold container pre-warmed container warm container

faster

IoT Usecase Node-RED and MQTT

@AnimeshSingh

CLIENTS BROKER

@AnimeshSingh SUBSCRIBE

PUBLISH

{…}

{…}

{…}

{…}

@AnimeshSingh

COMMERCIAL OPEN-SOURCE MOSQUITTO

MOSCA

ACTIVEMQ

RABBITMQ

MESSAGESIGHT

HIVEMQ

THINGMQ

CLOUDMQTT

MQTT Brokers

@AnimeshSingh

MQTT NODES IN NODE-RED

@AnimeshSingh

DEVICES NODE-RED

BROKER

@AnimeshSingh DEVICES

NODE-RED

BROKER

OpenWhisk Feeds and creating MQTT feeds

@AnimeshSingh

Trigger

Action

Action

Action

push, fork, comment, ..

CUSTOM FEED EXAMPLE

@AnimeshSingh

anybody can create a Package with a feed

/whisk.system/github /mynamespace/github

MQTT feeds for OpenWhisk

•  Bridging MQTT messages to OpenWhisk Actions can be achieved by creating a new Feed provider. This provider would subscribe to message topics and execute registered Triggers with incoming messages.

•  The custom feed provider would need to establish and maintain long-lived MQTT connections, waiting for messages to arrive. This requirements means the Feed provider needs an external service to handle managing these connections, it won’t be possible within the Feed Action.

•  This feed provider service is implemented using Node.js, using Cloudant for the database. The service listens for HTTP requests, with Trigger registration details, from the Feed Action. The Node.js MQTT library is used to subscribe to registered topics. When messages are received, the OpenWhisk client library is used to invoke the Trigger remotely, passing the message contents as event parameters.

•  This service provider is packaged using Docker. Pushing this image into the IBM Containers registry, the Feed provider can be started on IBM Bluemix using the Containers service.

http://jamesthom.as/blog/2016/06/15/openwhisk-and-mqtt/

MQTT feeds for OpenWhisk •  This service provider is packaged using Docker.

•  Pushing this image into the IBM Containers registry, the Feed provider can be started on IBM Bluemix using the Containers service.

Registering Feeds http://jamesthom.as/blog/2016/06/15/openwhisk-and-mqtt/

Node-RED for Serverless OpenWhisk

@AnimeshSingh

Node-RED and OpenWhisk •  Community effort to integrate with open tools: NodeRED

•  NodeRED is all about automating flows to orchestrate calls to

different service APIs •  Usually triggered by calls from external systems or devices •  Runs within a long-running single node process, with a dedicated amount of CPU & memory

being allocated

•  OpenWhisk is all about executing code (custom logic) in response to events on a scalable platform, with a dedicated amount of CPU & memory being allocated per-request

•  NodeRED and OpenWhisk complement each other •  Use NodeRED to graphically create flows, automating a series of tasks in a kind of workflow •  Use OpenWhisk to execute custom logic (requiring some kind of CPU- or memory bound

operation) triggered from within NodeRED

@AnimeshSingh

•  Use Node-RED to create Multi cloud Serveless Applications!

Use Node-RED to compose Serverless Applications

$ wsk property set --apihost openwhisk.ng.bluemix.net --auth 96294c7b-e6f4-4ccf --namespace “animeshsingh" $ wsk action invoke /whisk.system/utils/

echo -p message hello --blocking --result

{ "message": "hello" }

@AnimeshSingh

Devices Node-RED & OpenWhisk

MQTT Broker Trigger

Action

Action

Action

Bringing it all together – Serverless IoT Applications

Summary

@AnimeshSingh

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

• OpenWhisk, MQTT and Node-RED can be used together to create IoT Serverless applications

@AnimeshSingh

Experiment with OpenWhisk on Bluemix

bit.ly/ow-bm

@AnimeshSingh

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

OpenWhisk.org dwopen.slack.com #openwhisk bluemix.net

OpenWhisk and MQTT http://jamesthom.as/blog/2016/06/15/openwhisk-and-mqtt/

Thank You