You've now built a simple microservice with wasmCloud that uses common capabilities (handle HTTP requests, interface with a key-value store) that many cloud native applications need. So, why wasmCloud? What makes this application that you built different from similar apps on other platforms? Beyond providing an easy-to-use platform that's quick to get started with, we also want to make sure that you understand that the biggest benefits of wasmCloud come after you've built your application.
Now that your microservice is running, consider what you may have to do to actually deploy that to production in the cloud. If you're building this application in a modern language and packaging it up into a container, you may have the following hurdles to consider before you even get to the point of writing your features in the first place:
The only time you need to recompile your application is if you want to add new functional logic. All of the below questions don't need to be considered until after you've already built your application with wasmCloud, and can be freely changed at runtime whenever needed.
- What CPU architecture am I going to be deploying to? Do I need to build for x86, ARM, or both?
- What operating system am I going to be deploying to? Do I need to support more than just Linux?
- What cloud am I going to deploy to? What if I need to deploy to multiple clouds?
- Do I need to be able to scale multiple instances of my application? How many? How will I handle communication between instances of my application?
- Do I need to be able to distribute my application across multiple machines? How will I handle high availability or failover?
CPU Architecture and Operating System Support
wasmCloud applications compile to WebAssembly, which is a completely platform agnostic binary format. The wasmCloud runtime itself releases binaries for Linux, Mac, Windows, x86_64, and aarch64 machines.
wasmCloud applications can be deployed to many cloud, edge, bare-metal, or on-prem machines due to the portability of Wasm and broad support of operating systems and architectures by Wasmtime, our WebAssembly runtime of choice. This means that you can deploy your application to any cloud provider, or even to your own datacenter, without having to worry about the underlying infrastructure.
Each wasmCloud actor is a self-contained unit of execution. This means that you can scale your application vertically by simply running more instances of your actor. The wasmCloud runtime will automatically load balance requests across all instances of your actor.
wasmCloud applications can be distributed by running multiple instances of the wasmCloud runtime. Whether you're running a single instance of the runtime on a single machine, or multiple instances of the runtime across multiple machines, the wasmCloud runtime will automatically load balance requests across all instances of your application components. You do not need to configure load balancing, service discovery, or failover requirements for your application.
Runtime and Vendor Lock-In
The WebAssembly component you built in this tutorial can be deployed to any WebAssembly runtime that supports the WASI HTTP and Key-Value store interfaces. You can take that component and run it in wasmCloud's underlying runtime wasmtime, the ByteCode Alliance's jco NodeJS runtime, or even in the browser. Additionally, because we aren't compiling in vendor-specific code, you can use any implementation to satisfy your interfaces and choose that at runtime with wasmCloud.
We appreciate you taking the time to go through this tutorial and take a look at what we're passionate about building at wasmCloud. We welcome all in our Slack and we would love for you to come and engage with our community, especially if you found the tutorial and the above points exciting! We hold weekly community meetings at 1pm EST on Wednesdays, and you can find the link to join the meeting on our community calendar or just tune into the livestream on YouTube. Lastly, if you're looking to contribute to wasmCloud, all of our projects are open source on GitHub and you can refer to our CONTRIBUTING.md.