{"id":9325,"date":"2016-03-28T22:22:39","date_gmt":"2016-03-28T19:22:39","guid":{"rendered":"http:\/\/blog.altoros.com\/?p=9325"},"modified":"2019-06-20T03:31:31","modified_gmt":"2019-06-20T00:31:31","slug":"introduction-to-ibm-bluemix-openwhisk","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/","title":{"rendered":"Introduction to IBM Bluemix OpenWhisk"},"content":{"rendered":"<p>Recently, IBM announced <a href=\"https:\/\/www.ibm.com\/press\/us\/en\/pressrelease\/49158.wss\" target=\"_blank\" rel=\"noopener noreferrer\">OpenWhisk<\/a>, an event-based programming service for the Bluemix platform. The <a href=\"https:\/\/github.com\/apache\/openwhisk\" target=\"_blank\" rel=\"noopener noreferrer\">source code<\/a> of the project is also available for the open-source community. Seriously, it has to be something cool.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#OpenWhisk_architecture\" >OpenWhisk architecture<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#Can_I_run_it_locally\" >Can I run it locally?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#OpenWhisk_vs_AWS_Lambda\" >OpenWhisk vs. AWS Lambda<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#Conclusion\" >Conclusion<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#Further_reading\" >Further reading<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"OpenWhisk_architecture\"><\/span>OpenWhisk architecture<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Let\u2019s take a look at the main concepts behind OpenWhisk. First of all, it is distributed and serverless, which means that developers do not need to manage the environment for their code. Deployment, monitoring, and scaling activities are covered by the OpenWhisk service. It allows to develop reliable applications without having too much expertise in related areas.<\/p>\n<p>Also, OpenWhisk follows the event-driven programming paradigm, encouraging developers to create microservices that emit and handle events. A microservice doesn\u2019t need to know anything about what listens to its events and how they are handled. Loose coupling is one of the primary advantages of this model. Plus, you are free to choose a runtime and tools you want for every event handler.<\/p>\n<p>Here is the high-level architecture of OpenWhisk.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-architecture.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-architecture.png\" alt=\"ibm-bluemix-openwhisk-architecture\" width=\"640\" class=\"aligncenter size-full wp-image-9334\" \/><\/a><br \/>\n<small>Source: <a href=\"https:\/\/cloud.ibm.com\/docs\/api\/content\/openwhisk\/OpenWhisk.png\" target=\"_blank\" rel=\"noopener noreferrer\">IBM Bluemix<\/a><\/small><\/center><\/p>\n<p>&nbsp;<\/p>\n<p>In short, the execution flow can be described as the following:<\/p>\n<ul>\n<li>An application can have several triggers.<\/li>\n<li>Each trigger can be associated with several actions via rules.<\/li>\n<li>Once a trigger has been fired, it executes all associated actions.<\/li>\n<li>Actions can fire triggers or call other actions directly.<\/li>\n<li>Actions and feeds can be grouped into packages to allow usage between projects.<\/li>\n<\/ul>\n<p><em>Actions<\/em>, <em>triggers<\/em>, and <em>rules<\/em> are building blocks of every OpenWhisk application.<\/p>\n<p>Developers provide their code via actions, stateless functions written in one of the languages supported by the platform. Once the code has been sent to OpenWhisk, users can remotely execute it via a <a href=\"https:\/\/cloud.ibm.com\/apidocs\/98\" target=\"_blank\" rel=\"noopener noreferrer\">REST API<\/a>. If you are interested in the details of how exactly OpenWhisk executes your code, check out the <a href=\"https:\/\/github.com\/apache\/openwhisk\/blob\/master\/core\/nodejsAction\/Dockerfile\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a> repository. At its core, OpenWhisk wraps developer\u2019s code into a Docker container and executes it. The container comes with a predefined version of a specific runtime and several preinstalled libraries.<\/p>\n<p>Triggers correspond to the types of events and can be attached to specific feeds. They can\u2019t do anything on their own, but they can be associated with actions via rules. This link means that once an event comes in and fires a trigger, all associated actions will be invoked.<\/p>\n<p>While triggers can be fired using the REST API, developers are encouraged to use feeds. Feeds are the sources of events in OpenWhisk applications. For example, OpenWhisk is shipped with a <a href=\"https:\/\/github.com\/apache\/openwhisk\/blob\/master\/catalog\/github\/webhook.js\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub package<\/a> that basically registers a webhook. Once something of interest has occurred, it fires a trigger in OpenWhisk.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Can_I_run_it_locally\"><\/span>Can I run it locally?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>OpenWhisk is an open-source project, and users can deploy their own copy of the service. The list of instructions can be found on its <a href=\"https:\/\/github.com\/apache\/openwhisk\/blob\/master\/README.md#getting-started\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a> page.<\/p>\n<p>However, this is not the strongest side of OpenWhisk. At the time of writing, OpenWhisk itself wasn\u2019t Dockerized. README states that supported operating systems include Ubuntu 14.04, Mac OS X El Capitan, and Windows using Vagrant. Here are some of the most notable dependencies for Ubuntu deployment:<\/p>\n<ul>\n<li>Python<\/li>\n<li>Java<\/li>\n<li>Ant<\/li>\n<li>Scala<\/li>\n<li>Docker itself<\/li>\n<\/ul>\n<p>In addition to system dependencies, users need to set up Cloudant access in Bluemix and export the credentials into their environment. Recently, support for local CouchDB has been also added.<\/p>\n<p>In the era of one-line deployments and containers, it would be great to have a less invasive installation process. The developer environment via Docker Compose would work well in this case.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"OpenWhisk_vs_AWS_Lambda\"><\/span>OpenWhisk vs. AWS Lambda<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Let\u2019s see how OpenWhisk compares to a similar offering from a different provider.<\/p>\n<p><a href=\"https:\/\/aws.amazon.com\/lambda\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS Lambda<\/a> is an event-driven programming service from Amazon. Basically, it is a direct competitor for cloud-based OpenWhisk.<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-vs-amazon-lambda.png\" alt=\"ibm-bluemix-openwhisk-vs-amazon-lambda\" width=\"480\" class=\"aligncenter size-full wp-image-9336\" \/><\/center><\/p>\n<p>In terms of language support, Lambda provides a way to deploy JavaScript, Python, and Java functions. There is no Docker integration, which OpenWhisk has, but you can work around this by using other Amazon services such as <a href=\"https:\/\/aws.amazon.com\/ecs\/\" target=\"_blank\" rel=\"noopener noreferrer\">EC2 Container Service<\/a>.<\/p>\n<p>One of the biggest Lambda advantages is the whole Amazon stack behind it. In short, developers can create a completely serverless application by doing the following:<\/p>\n<ul>\n<li>Deploy the front-end part of the application on <a href=\"https:\/\/aws.amazon.com\/s3\/\" target=\"_blank\" rel=\"noopener noreferrer\">S3<\/a> and serve it from there<\/li>\n<li>Deploy the back-end part of the application on Lambda<\/li>\n<li>Consume Amazon services right from the browser JavaScript using <a href=\"https:\/\/aws.amazon.com\/cognito\/\" target=\"_blank\" rel=\"noopener noreferrer\">Cognito<\/a><\/li>\n<\/ul>\n<p>Also, there\u2019s an application framework\u2014<a href=\"https:\/\/github.com\/serverless\/serverless\" target=\"_blank\" rel=\"noopener noreferrer\">Serverless<\/a>\u2014that adds features like local execution, automatic deployment, versioning, aliases, and code reuse for Lambda projects.<\/p>\n<p>As for OpenWhisk and Bluemix, there\u2019s still a gap that needs to be closed. The <a href=\"https:\/\/cloud.ibm.com\/docs\/services\/ObjectStorage\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">Bluemix Object Storage<\/a> service doesn\u2019t provide the ability to directly serve HTML assets, which means that users need to run a separate container or a virtual server. It is possible to consume AWS services from browser applications using AWS Cognito, which provides credentials with a limited access. The Bluemix platform does not offer such functionality. It is very likely that these issues will be solved as soon as OpenWhisk develops into a mature product.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>OpenWhisk is a good fit for background jobs in web and mobile applications. To some point, it can even provide an entire back-end API for your application. The event-driven nature of OpenWhisk should also work well in IoT scenarios.<\/p>\n<p>However, the service is not suitable for applications relying on long-living connections (for example, chats using web sockets). The execution time for OpenWhisk functions <a href=\"https:\/\/new-console.ng.bluemix.net\/docs\/openwhisk\/openwhisk_reference.html#openwhisk_syslimits\" target=\"_blank\" rel=\"noopener noreferrer\">is limited<\/a>, so you won\u2019t be able to replace a simple web server with it.<\/p>\n<p>IBM doesn\u2019t charge you for using the hosted version yet. As of now, information on the pricing model hasn\u2019t been released, but we can expect similarities with <a href=\"https:\/\/aws.amazon.com\/lambda\/pricing\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS Lambda<\/a>. There is no point in using OpenWhisk in production right away, but it is exciting to see what it can become in the future. As for myself, I\u2019ve already forked the repository.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/ibm-bluemix-openwhisk-101-developing-a-microservice\/\">IBM Bluemix OpenWhisk 101: Developing a Microservice<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/\">How to Use OpenWhisk Docker Actions in IBM Bluemix<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Recently, IBM announced OpenWhisk, an event-based programming service for the Bluemix platform. The source code of the project is also available for the open-source community. Seriously, it has to be something cool.<\/p>\n<p>&nbsp;<\/p>\n<p>OpenWhisk architecture<\/p>\n<p>Let\u2019s take a look at the main concepts behind OpenWhisk. First of all, it is distributed and serverless, [&#8230;]<\/p>\n","protected":false},"author":42,"featured_media":44459,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[7],"tags":[873,187,750],"class_list":["post-9325","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news-and-opinion","tag-cloud-native","tag-ibm-bluemix","tag-openwhisk"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Introduction to IBM Bluemix OpenWhisk | Altoros<\/title>\n<meta name=\"description\" content=\"From this post, learn about OpenWhisk architecture, its common use cases, and alternatives.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introduction to IBM Bluemix OpenWhisk | Altoros\" \/>\n<meta property=\"og:description\" content=\"Recently, IBM announced OpenWhisk, an event-based programming service for the Bluemix platform. The source code of the project is also available for the open-source community. Seriously, it has to be something cool. &nbsp; OpenWhisk architecture Let\u2019s take a look at the main concepts behind OpenWhisk. First of all, it is distributed and serverless, [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-28T19:22:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-06-20T00:31:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-architecture-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1273\" \/>\n\t<meta property=\"og:image:height\" content=\"698\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alexander Sologub\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alexander Sologub\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/\",\"name\":\"Introduction to IBM Bluemix OpenWhisk | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-architecture-1.png\",\"datePublished\":\"2016-03-28T19:22:39+00:00\",\"dateModified\":\"2019-06-20T00:31:31+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/926ba6b8608065bae61d79cfd7da9bce\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-architecture-1.png\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-architecture-1.png\",\"width\":1273,\"height\":698},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introduction to IBM Bluemix OpenWhisk\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/926ba6b8608065bae61d79cfd7da9bce\",\"name\":\"Alexander Sologub\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Sologub_Aleksandr.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Sologub_Aleksandr.jpg\",\"caption\":\"Alexander Sologub\"},\"description\":\"Alexander Sologub has 6+ years in software engineering, being an expert in cloud automation and designing architectures for complex cloud-based systems. With strong background in Ruby, Go, and JavaScript, Alex took part in integrating a number of popular clouds with RightScale (a web-based platform for managing cloud infrastructures from multiple providers). His interests embrace building IoT solutions powered by cloud technologies and designing architectures that meet customer needs. Check out Alexander\u2019s profile on GitHub.\",\"url\":\"https:\/\/www.altoros.com\/blog\/author\/alexander-sologub\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introduction to IBM Bluemix OpenWhisk | Altoros","description":"From this post, learn about OpenWhisk architecture, its common use cases, and alternatives.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/","og_locale":"en_US","og_type":"article","og_title":"Introduction to IBM Bluemix OpenWhisk | Altoros","og_description":"Recently, IBM announced OpenWhisk, an event-based programming service for the Bluemix platform. The source code of the project is also available for the open-source community. Seriously, it has to be something cool. &nbsp; OpenWhisk architecture Let\u2019s take a look at the main concepts behind OpenWhisk. First of all, it is distributed and serverless, [...]","og_url":"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/","og_site_name":"Altoros","article_published_time":"2016-03-28T19:22:39+00:00","article_modified_time":"2019-06-20T00:31:31+00:00","og_image":[{"width":1273,"height":698,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-architecture-1.png","type":"image\/png"}],"author":"Alexander Sologub","twitter_misc":{"Written by":"Alexander Sologub","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/","url":"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/","name":"Introduction to IBM Bluemix OpenWhisk | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-architecture-1.png","datePublished":"2016-03-28T19:22:39+00:00","dateModified":"2019-06-20T00:31:31+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/926ba6b8608065bae61d79cfd7da9bce"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-architecture-1.png","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-openwhisk-architecture-1.png","width":1273,"height":698},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introduction to IBM Bluemix OpenWhisk"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/926ba6b8608065bae61d79cfd7da9bce","name":"Alexander Sologub","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Sologub_Aleksandr.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Sologub_Aleksandr.jpg","caption":"Alexander Sologub"},"description":"Alexander Sologub has 6+ years in software engineering, being an expert in cloud automation and designing architectures for complex cloud-based systems. With strong background in Ruby, Go, and JavaScript, Alex took part in integrating a number of popular clouds with RightScale (a web-based platform for managing cloud infrastructures from multiple providers). His interests embrace building IoT solutions powered by cloud technologies and designing architectures that meet customer needs. Check out Alexander\u2019s profile on GitHub.","url":"https:\/\/www.altoros.com\/blog\/author\/alexander-sologub\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/9325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=9325"}],"version-history":[{"count":5,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/9325\/revisions"}],"predecessor-version":[{"id":44461,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/9325\/revisions\/44461"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/44459"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=9325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=9325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=9325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}