{"id":1219,"date":"2020-03-16T13:34:08","date_gmt":"2020-03-16T12:34:08","guid":{"rendered":"http:\/\/blog.zhaw.ch\/splab\/?p=1219"},"modified":"2020-03-18T06:53:25","modified_gmt":"2020-03-18T05:53:25","slug":"experimenting-with-webassembly-in-a-serverless-context","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/","title":{"rendered":"Experimenting with WebAssembly in a Serverless context"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Note<\/h2>\n\n\n\n<p>This post was <a href=\"https:\/\/medium.com\/@leonardas103\/experimenting-with-webassembly-in-a-serverless-context-9e320a8b669f\">first published<\/a> on Medium by <a href=\"https:\/\/medium.com\/@leonardas103\">Leonardas (Badrie) Persaud<\/a> &#8211; one of the students who was involved in this project. The post is republished here as the project was run within the context of the <a href=\"https:\/\/www.ifi.uzh.ch\/en\/seal\/teaching\/courses\/sme.html\">Software Maintenance and Evolution<\/a> course run by <a href=\"https:\/\/www.zhaw.ch\/en\/about-us\/person\/panc\/\">Sebastiano<\/a> and the project itself was supervised by <a href=\"https:\/\/www.zhaw.ch\/en\/about-us\/person\/murp\/\">Se\u00e1n<\/a>. The students involved in the project were <a href=\"https:\/\/www.uzh.ch\/de.html\">UZH<\/a> CS Master&#8217;s students:  <a rel=\"noreferrer noopener\" href=\"https:\/\/www.linkedin.com\/in\/badrie-leonardas-persaud-9a7292b7\/\" target=\"_blank\">Badrie L. Persaud<\/a>, <a rel=\"noreferrer noopener\" href=\"http:\/\/www.linkedin.com\/in\/bill-bosshard-00281a134\/\" target=\"_blank\">Bill Bosshard<\/a>, and, <a rel=\"noreferrer noopener\" href=\"https:\/\/www.linkedin.com\/in\/william-martini-274ba7105\/\" target=\"_blank\">William Martini<\/a> and all project related content is in the project&#8217;s <a href=\"https:\/\/github.com\/WilliamMartini\/WASM\">github repo<\/a>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\" id=\"3a2d\"><strong>Introduction<\/strong><\/h2>\n\n\n\n<p><a href=\"https:\/\/webassembly.org\/\">WebAssembly<\/a>  (WASM) is a binary instruction format for a stack-based virtual  machine. Though initially designed for the web browser [see 1], it can  be used in applications outside the web. One particular use case which  is of interest to us is the use of wasm in a serverless context, the  advantage of this being is the ability of WASM to support different  languages and compile down to a lightweight runnable entity which is in  principle portable across different processors\/platforms. Also, WASM is  designed as being safe, efficient and fast.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"676c\"><strong>Running WASM in Serverside Context<\/strong><\/h2>\n\n\n\n<p>Although WASM support for many languages is ongoing via extensions to widely used compilers, we observed issues working with Golang and ended up focusing on C\/C++ and Rust for the purposes of this work. A list of  supported languages can be found <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/appcypher\/awesome-wasm-langs\" target=\"_blank\">here<\/a><strong>.<\/strong><\/p>\n\n\n\n<p>C\/C++ code can be compiled to wasm using either <a href=\"https:\/\/emscripten.org\/docs\/compiling\/WebAssembly.html\" target=\"_blank\" rel=\"noreferrer noopener\">Emscripten <\/a>or Clang with <a href=\"https:\/\/github.com\/CraneStation\/wasi-sdk\" target=\"_blank\" rel=\"noreferrer noopener\">wasm32-wasi<\/a>\n compilation tags. Having a WASM binary of course is not enough \u2014 a \nmeans to run it on the native processor is also required. In this work, \nwe looked at two approaches: one based on using a WASM runtime which \nmaps from WASM instructions to native processor instructions during \nexecution and an alternative which is based on a priori compiling the \nWASM executable to native processor instructions. <a href=\"https:\/\/github.com\/wasmerio\/wasmer\" target=\"_blank\" rel=\"noreferrer noopener\">Wasmer<\/a>, <a href=\"https:\/\/wasmtime.dev\/\" target=\"_blank\" rel=\"noreferrer noopener\">Wasmtime, <\/a>and <a href=\"https:\/\/github.com\/bytecodealliance\/lucet\/wiki\/Getting-started\" target=\"_blank\" rel=\"noreferrer noopener\">Lucet<\/a>\n were considered here \u2014 the former two are runtimes which execute an \narbitrary WASM binary; the latter compiles the WASM binary to native \ncode. A full list of WASM runtimes can be found <a href=\"https:\/\/github.com\/appcypher\/awesome-wasm-runtimes\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p>To see how these different approaches perform we compared performance using a simple primes benchmark.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"545\" height=\"320\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png\" alt=\"\" class=\"wp-image-1221\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png 545w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw-300x176.png 300w\" sizes=\"auto, (max-width: 545px) 100vw, 545px\" \/><figcaption><em>The graph shows the time taken to find the largest prime number in max_int.<\/em><\/figcaption><\/figure>\n\n\n\n<p>Here\n we see that Wasmer&#8217;s performance is similar to Lucet, both performing \nfaster than Wasmtime. We performed a number of other comparisons using \nmemory bound and compute bound computation and this conclusion largely \nheld across all the experiments we performed. For this reason, as well \nas the fact that it has a substantial developer interest We choose to go\n ahead with using Wasmer<\/p>\n\n\n\n<p><em>Edit:  Till Schneidereit from the bytecode alliance reached out to note that  Wasmtime\u2019s performance was due to optimizations being <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/pull\/988\" target=\"_blank\">disabled by default<\/a> in previous versions of Wasmtime.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0697\"><strong>Running WASM in Serverless Context<\/strong><\/h2>\n\n\n\n<p>In\n most of today\u2019s serverless contexts, functions run in docker \ncontainers. For this reason, we investigated how to run serverless \nfunctions easily in docker containers \u2014 in principle, these could be \ndeployed on arbitrary serverless platforms.<\/p>\n\n\n\n<p>We\n first looked at the possibility of using OpenWhisk which allows running\n Docker containers [see 6]. One disadvantage is that the container needs\n to be uploaded <a href=\"https:\/\/github.com\/apache\/openwhisk\/blob\/master\/docs\/actions-docker.md\" target=\"_blank\" rel=\"noreferrer noopener\">publically <\/a>to\n Docker Hub and openwhisk requires that the container runs a service \nwhich exposes specific endpoints. We used a basic python-flask based \nservice which triggered the wasmer runtime and the wasm application \n-this approach had the undesirable side effect of generating a large \ncontainer image. However, we managed to get it working even with this \nlarger container image.<\/p>\n\n\n\n<p>While\n investigating the docker based approach, we found that it is possible \nto invoke WASM functionality directly from the Node.js runtimes \navailable on the different serverless platforms. [see 7], this is useful\n since Node is supported by most Serverless platforms. We did a simple \nbenchmark by computing fibonacci N = 42.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"626\" height=\"258\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1h14eNQoIG4GGPCFEXy0_0w.png\" alt=\"\" class=\"wp-image-1222\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1h14eNQoIG4GGPCFEXy0_0w.png 626w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1h14eNQoIG4GGPCFEXy0_0w-300x124.png 300w\" sizes=\"auto, (max-width: 626px) 100vw, 626px\" \/><figcaption><em>Comparison of serverless and native platforms running fib42<\/em><\/figcaption><\/figure>\n\n\n\n<p>As\n time was running out, we were unable to perform a very comprehensive \nanalysis of the relative merits of the Docker solution and the Node.js \nsolution. However, we did perform a basic comparison in which the WASM \nbased function was invoked in different ways as shown in Figure 2. We \nobserved that the Node.js solution works better than the Docker \ncontainer in the scenarios we explored. However, one draw-back of the \nNode solution is that it only supports data types of <em>ints <\/em>at the moment. We did not manage to find an explanation for the slow run time on AWS was not found during the research.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"b5a6\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>The\n project produced a performance comparison of different solutions for \nrunning wasm on the server side and then considered how wasm can be \ndeployed to different serverless platforms (AWS and Openwhisk). We found\n that NodeJS had some advantages over a Docker based solution \u2014 better \nperformance, easier packaging etc. However, there could be other \nbenefits from a Docker based solution, eg better integration with \nexisting serverless platforms. Ultimately, we believe it is likely that \nsupporting native WASM within the serverless platform will be a \nrequirement without the need for encapsulating them within Docker \ncontainers. In any case, this technology is still in the early days of \nits evolution and there remain many interesting issues to be explored \nand addressed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fe11\">Quick Links<\/h2>\n\n\n\n<ol class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/WilliamMartini\/WASM\/tree\/master\/toolchain-comparison\/benchmarks\/browser-test\" target=\"_blank\" rel=\"noreferrer noopener\">WebAssembly with Go<\/a><\/li><li><a href=\"https:\/\/github.com\/WilliamMartini\/WASM\/tree\/master\/toolchain-comparison\/wasmtime\" target=\"_blank\" rel=\"noreferrer noopener\">Compiling C to wasm and running on Wasmtime<\/a><\/li><li><a href=\"https:\/\/github.com\/WilliamMartini\/WASM\/tree\/master\/toolchain-comparison\/Lucet\" target=\"_blank\" rel=\"noreferrer noopener\">Compiling C to wasm and running on Lucet<\/a><\/li><li><a href=\"https:\/\/github.com\/WilliamMartini\/WASM\/tree\/master\/deployment\/rust\" target=\"_blank\" rel=\"noreferrer noopener\">Compiling Rust to wasm<\/a><\/li><li><a href=\"https:\/\/github.com\/WilliamMartini\/WASM\/tree\/master\/deployment\/docker-wasm\/wasmer%20in%20docker\" target=\"_blank\" rel=\"noreferrer noopener\">Putting Wasmer binary into a Docker Container<\/a><\/li><li><a href=\"https:\/\/github.com\/WilliamMartini\/WASM\/tree\/master\/deployment\/docker-wasm\/openwisk\" target=\"_blank\" rel=\"noreferrer noopener\">Creating an OpenWisk compliant Docker Container<\/a><\/li><li><a href=\"https:\/\/github.com\/WilliamMartini\/WASM\/tree\/master\/deployment\/nodejs\" target=\"_blank\" rel=\"noreferrer noopener\">Using Node.js to deploy wasm on Serverless<\/a><\/li><\/ol>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/aws\/\">aws<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/openwhisk\/\">openwhisk<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/serverless\/\">serverless<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/wasm\/\">wasm<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/webassembly\/\">webassembly<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>Note This post was first published on Medium by Leonardas (Badrie) Persaud &#8211; one of the students who was involved in this project. The post is republished here as the project was run within the context of the Software Maintenance and Evolution course run by Sebastiano and the project itself was supervised by Se\u00e1n. The [&hellip;]<\/p>\n","protected":false},"author":92,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[18,50,8,141,142],"features":[],"class_list":["post-1219","post","type-post","status-publish","format-standard","hentry","category-research","tag-aws","tag-openwhisk","tag-serverless","tag-wasm","tag-webassembly"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Experimenting with WebAssembly in a Serverless context - Service Prototyping Lab<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Experimenting with WebAssembly in a Serverless context\" \/>\n<meta property=\"og:description\" content=\"Note This post was first published on Medium by Leonardas (Badrie) Persaud &#8211; one of the students who was involved in this project. The post is republished here as the project was run within the context of the Software Maintenance and Evolution course run by Sebastiano and the project itself was supervised by Se\u00e1n. The [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Prototyping Lab\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-16T12:34:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-03-18T05:53:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png\" \/>\n<meta name=\"author\" content=\"Sean Murphy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sean Murphy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated 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\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/\"},\"author\":{\"name\":\"Sean Murphy\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/c87a6eef7e1f4a152aeec5f8b9527b8d\"},\"headline\":\"Experimenting with WebAssembly in a Serverless context\",\"datePublished\":\"2020-03-16T12:34:08+00:00\",\"dateModified\":\"2020-03-18T05:53:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/\"},\"wordCount\":928,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png\",\"keywords\":[\"aws\",\"openwhisk\",\"serverless\",\"wasm\",\"webassembly\"],\"articleSection\":[\"Research\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/\",\"name\":\"Experimenting with WebAssembly in a Serverless context - Service Prototyping Lab\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png\",\"datePublished\":\"2020-03-16T12:34:08+00:00\",\"dateModified\":\"2020-03-18T05:53:25+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/c87a6eef7e1f4a152aeec5f8b9527b8d\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/splab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Experimenting with WebAssembly in a Serverless context\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/\",\"name\":\"Service Prototyping Lab\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/splab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/c87a6eef7e1f4a152aeec5f8b9527b8d\",\"name\":\"Sean Murphy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/4514cb0ddfe236fd05d5ddb715bc19e1e1e35dafa16bb1b911e6094d278211d6?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4514cb0ddfe236fd05d5ddb715bc19e1e1e35dafa16bb1b911e6094d278211d6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4514cb0ddfe236fd05d5ddb715bc19e1e1e35dafa16bb1b911e6094d278211d6?s=96&d=mm&r=g\",\"caption\":\"Sean Murphy\"},\"url\":\"https:\/\/blog.zhaw.ch\/splab\/author\/murp\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Experimenting with WebAssembly in a Serverless context - Service Prototyping Lab","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:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/","og_locale":"en_GB","og_type":"article","og_title":"Experimenting with WebAssembly in a Serverless context","og_description":"Note This post was first published on Medium by Leonardas (Badrie) Persaud &#8211; one of the students who was involved in this project. The post is republished here as the project was run within the context of the Software Maintenance and Evolution course run by Sebastiano and the project itself was supervised by Se\u00e1n. The [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/","og_site_name":"Service Prototyping Lab","article_published_time":"2020-03-16T12:34:08+00:00","article_modified_time":"2020-03-18T05:53:25+00:00","og_image":[{"url":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png","type":"","width":"","height":""}],"author":"Sean Murphy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sean Murphy","Estimated reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/"},"author":{"name":"Sean Murphy","@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/c87a6eef7e1f4a152aeec5f8b9527b8d"},"headline":"Experimenting with WebAssembly in a Serverless context","datePublished":"2020-03-16T12:34:08+00:00","dateModified":"2020-03-18T05:53:25+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/"},"wordCount":928,"commentCount":0,"image":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png","keywords":["aws","openwhisk","serverless","wasm","webassembly"],"articleSection":["Research"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/","url":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/","name":"Experimenting with WebAssembly in a Serverless context - Service Prototyping Lab","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/splab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png","datePublished":"2020-03-16T12:34:08+00:00","dateModified":"2020-03-18T05:53:25+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/c87a6eef7e1f4a152aeec5f8b9527b8d"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png","contentUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/1vuxZoroK6ElNKEaYV3vkjw.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/16\/experimenting-with-webassembly-in-a-serverless-context\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/splab\/"},{"@type":"ListItem","position":2,"name":"Experimenting with WebAssembly in a Serverless context"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/splab\/#website","url":"https:\/\/blog.zhaw.ch\/splab\/","name":"Service Prototyping Lab","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/splab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/c87a6eef7e1f4a152aeec5f8b9527b8d","name":"Sean Murphy","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/4514cb0ddfe236fd05d5ddb715bc19e1e1e35dafa16bb1b911e6094d278211d6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4514cb0ddfe236fd05d5ddb715bc19e1e1e35dafa16bb1b911e6094d278211d6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4514cb0ddfe236fd05d5ddb715bc19e1e1e35dafa16bb1b911e6094d278211d6?s=96&d=mm&r=g","caption":"Sean Murphy"},"url":"https:\/\/blog.zhaw.ch\/splab\/author\/murp\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/1219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/users\/92"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/comments?post=1219"}],"version-history":[{"count":3,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/1219\/revisions"}],"predecessor-version":[{"id":1229,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/1219\/revisions\/1229"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/media?parent=1219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/categories?post=1219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/tags?post=1219"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/features?post=1219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}