1. 1IBM
_
Be Whisked Away with a
Raspberry PI, Java, and
OpenWhisk
Luc Desrosiers
IBM Certified IT Architect
Session CON2758
2. 2IBM
_
About me
• 20 years in IT – Development, Integration, Cloud
• IT Architect who loves to write code
• Java enthusiast since using Servlet Express back in 1998
• Cloud, IoT and Cognitive computing are areas that I am passionate about
• Probably lost my hair to a program that would not compile…
3. 3IBM
_
What can you expect to get from
this session?
• An understanding of serverless computing and OpenWhisk
• An early view on some usage patterns and how it can be used to
complement your application design
• A quick way to get started experimenting with OpenWhisk
And finally,
• A demonstration of an IoT solution integrated with OpenWhisk
4. 4IBM
_
What is OpenWhisk?
OpenWhisk is a Cloud platform to execute code in response to events
• OpenWhisk is an Open Source project released by IBM
• Supports many language including Java
• Based on the serverless concept …
5. 5IBM
_
What is serverless ?
OpenWhisk is a Cloud platform to execute code in response to events
• Serverless is about removing infrastructure from the equation
• It is about focusing on business logics, not thread pools
• Often associated to Function-as-a-Service
6. The transition from micro services…
Microservice
MicroserviceMicroservice
Microservice
Subscribe
REST
/HTTP
Microservice
Microservice
broker
API
Microservice
Publish
API
REST
/HTTP Publish
Service
Discovery
Microservice
1 Docker
Container
App
Servers
NodeJS
instance
App
Servers
NodeJS
instance
NodeJS
instance
VM
What if I need to
scale this?
VM
NodeJS
instance
NodeJS
instance
App
Servers
App
Servers
1 Docker
Container
VM
10. 10IBM
_
Where does it fit ?
• Serverless is a piece of the puzzle… not a complete solution
• Triggers and Back-end Services are not necessarily serverless
• Someone has to hold the state after all…
UI
Components
Serverless
components
Event
Generator
Back-end as a Service
11. 11IBM
_
Serverless and the 12 Factor App?
Twelve Factor App was created as a methodology for building SaaS…
II. Dependencies
Explicitly declare and isolate dependencies
III. Config
Store config in the environment
IV. Backing services
Treat backing services as attached resources
VI. Processes
Execute the app as one or more stateless
processes
https://12factor.net/
VII. Port binding
Export services via port binding
VIII. Concurrency
Scale out via the process model
IX. Disposability
Maximize robustness with fast startup and graceful
shutdown
12. 12IBM
_
OK, what about usage patterns ?
• Serverless technologies are still new… patterns have yet to emerge
• Simplicity should be the focus of each function
• May need significant refactoring of existing code to minimize
dependencies…
However there are some architecture patterns where serveless fits
nicely…
13. Mobile and Web Backend as a Service
APIGateway
Sequence
Business Logic
Action
/whisk/websock
et
Backend
Service
Action
Trigger
Web
App
Benefits:
• Clear delineation of business and controller logic
• Produces discreet reusable action that can be assembled as a sequence
/whisk/push
14. The analytics platform
Cloudant
DB A
Data processing pipeline
IoT
Events
Change
Feed
Change
Listener
Cloudant
DB A
Quality
Control
Event
Persister
/whisk/clou
dant
Data
Enrichment
/whisk/wea
ther
Benefits:
• Database change can trigger other actions
• Functionality can be extended easily
Trigger
16. 16IBM
_
Some considerations
• Avoid heavy-weight functions
• Harder to debug
• Harder to reuse
• Trigger do not guarantee order of processing…
• Message affinity is bad… avoid it at all costs
• Plan how your input and output are designed to maximize reuse
• Ability to re-use an action depends on the assumption it is making
about its input
• Assert aggressively!
17. 17IBM
_
Now, how can you get started?
1. Get familiar with the OpenWhisk command line interface
2. Create a basic Java Action
3. Deploy to Bluemix or locally
18. OpenWhisk Command Line
wsk trigger create <trigger-name>
1. Creating a trigger
wsk package create <package-name>
2. Creating a package
wsk action create <package>/<action> <Jar File>.jar
3. Creating an action
wsk package bind /whisk.system/websocket <bind-name> -p uri
ws://<url>
4. Create a binding for an action
wsk rule create <rule-name> <trigger> <action>
5. Create a rule for triggering an action
Installing OpenWhisk CLI can be found here: https://new-console.ng.bluemix.net/openwhisk/cli
19. Creating a Basic Java Action
The entry point for the Action must follow this signature
Note: If the JAR file has more than one class with a main
method matching required signature, the CLI tool uses the first
one reported by jar -tf
21. 21IBM
_
What is available out of the
box?
Here are some of the provided package of actions and feed you can use to
get started:
Cloudant
Alarms
Watson
github
Push
Notifications
slack
Weather data
22. 22IBM
_
Where does the Raspberry Pi come in?
• Serverless technology Is based on triggering action based on events
• A robot including sensors generates lots of events
• Objective was to see how serverless could be integrated
23. The Anatomy of an IoT tank
Cloudant
IoT-Tank
Stop Session
Start Session
Save IoT data
Change
Listener
Image Analysis
IoTBridge
Visual Recognition
Watson IoT
Foundation
IoTTankVision
OpenWhisk
Send image &
sensor data
Start &
stop session
24. IoT tank – Communication Layer
Pi4J – GPIO Control
IBM Watson IoT Foundation – IoT integration
Cloudant – Image persistence
JRPiCam – Pi Camera Control
Sending events:
Receiving commands:
25. 25IBM
_
Wrap-up
• Serverless technology is a key part of a microservices architecture
• OpenWhisk reduces the operational burden
• Patterns are still emerging but the technology works great with:
• Web or Mobile application
• Analytics
• DevOps pipeline
• Getting started is easy and quick… Try it for yourself!
26. 26IBM
_
Thank You!
Some references…
IBM Hybrid Cloud solution guide:
Building a Hybrid Cloud with Bluemix
Bluemix blog
Getting Started with OpenWhisk:
https://github.com/openwhisk/openwhisk
https://new-console.ng.bluemix.net/openwhisk/cli
https://console.ng.bluemix.net/docs/openwhisk/index.html?pos=2
Accessing the code:
https://github.com/ldesrosi/iot-tank-client
https://github.com/ldesrosi/iot-tank-server
Luc Desrosiers | ldesrosi@uk.ibm.com | Twitter: Luc_At_IBM