Serverless architectures are one of the hottest trends in cloud computing this year, and for good reason. There are several technical capabilities and business factors coming together to make this approach compelling from both an application development and deployment cost perspective. The new OpenWhisk project provides an open source platform to enable these cloud-native, event-driven applications.
This talk will lay out the technical and business drivers behind the rise of serverless architectures, provide an introduction to the OpenWhisk open source project (and describe how it differs from other services like AWS Lambda), and give a demonstration showing how to start developing with this new cloud computing model using the OpenWhisk implementation available on IBM Bluemix.
Presented on October 12, 2016 at the NYC Bluemix meetup
2. @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.
4. @DanielKrookOpenWhisk.org
Cloud evolution means developers can write apps better, faster, and cheaper
Bare
metal
Virtual
machines
Containers
Functions
Decreasing concern (and control) over stack implementation
Increasing focus on business logic
5. @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
6. @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
7. @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)
8. @DanielKrookOpenWhisk.org
Problem: Programming and pricing models aren’t efficient
Continuous polling needed in the absence
of an event driven programming model
Charged for resources, even when idle
Worries persist about capacity management
Swif
t
Application
Container VMCF
2
Polling
1b
Request
1a
9. @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.
10. @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
13. @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
14. @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 pipeline
Complex 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 code
OpenWhisk can be used to
automate DevOps pipelines
based on events triggered from
successful builds, or completed
staging, or a go-live event.
Microservices builder
OpenWhisk can be used to easily
build microservices given the
footprint and programming model
desired by microservices
19. @DanielKrookOpenWhisk.org
Actions
Can be written in a variety of languages, such as
JavaScript, Python, Java, and Swift
A
function main(params) {
return { message: 'Hello, ' + params.name + ' from ' + params.place };
};
28. @DanielKrookOpenWhisk.org
OpenWhisk enables event driven applications
Event
Providers
Cloudant
GitHub
Weather
…
Which triggers execution of
associated OpenWhisk action
2
Slack
JS Swift Docker …
An event occurs, for example
• Commit pushed to GitHub repository
• Data changed in Cloudant
1
OpenWhisk
29. @DanielKrookOpenWhisk.org
OpenWhisk can implement REST microservices
Send HTTP request
HTTP GET
app.com/customers
1
Invoke OpenWhisk
action get-customers
Browser
Mobile App
Web App
2
JS Swift Docker …
OpenWhisk
API
Proxy
31. @DanielKrookOpenWhisk.org
Demo 2: Create a Slack bot
bit.ly/ow-demo-2
GET /register
POST /command
POST /event
Register
action
Event
action
Command
action
2
OpenWhisk
Engine
1
AAA
API
Proxy
Register
the bot
Respond
to direct
messages
Respond
to slash
commands
33. @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
34. 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
35. 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
44. @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)
50. @DanielKrookOpenWhisk.org
OpenWhisk CLI: Create and test action
Create the Action that analyzes IoT readings, then stores in the database
wsk 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 test
wsk action invoke --blocking --result analyze-service-event
--param service '{"appliance_serial": "xxxxyyyyzzzz", "part_number":
"ddddeeeeffff", "reading": 13, "timestamp": 1466188262}'
A
51. @DanielKrookOpenWhisk.org
OpenWhisk CLI: Link trigger to action
Create the Trigger that subscribes to an MQTT topic pattern
wsk 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 Rule
wsk rule create --enable openfridge-feed-rule
openfridge-feed-trigger analyze-service-event
R := T A