What is wasmCloud?
wasmCloud helps you build and run globally distributed applications on any cloud and any edge, using WebAssembly. For more on our philosophy, see the intro page.
What problem does wasmCloud solve?
Building and running distributed applications is hard.
wasmCloud's design encourages developers to decompose their applications into small, loosely-coupled building blocks of business logic and non-functional requirements. This allows developers to swap out capabilities at runtime without the need to recompile. It allows operators to roll out security patches or upgrades without friction. And it allows applications to dynamically move and scale in response to changing requirements without disrupting a service.
Our goal is to make distributed applications easier, so developers and operators can be more productive.
What is included in the wasmCloud ecosystem?
Is wasmCloud Open Source?
Is wasmCloud a WebAssembly runtime?
What is the unit of compute for wasmCloud?
wasmCloud applications are composed of actors and capability providers, which are linked together at runtime. Decoupling business logic from capabilities is part of the design philosophy of wasmCloud.
What programming languages does wasmCloud support?
Where can I find examples of wasmCloud actors, providers, and applications?
The latest examples of actors are in the main repo, under the examples directory.
For examples of first-party capability providers, check out the providers directory.
Every example also includes an application manifest, which can be used to deploy the example.
I see wasmCloud actors are stateless, but I need to store state. Is wasmCloud right for me?
wasmCloud applications can access and store state via capability providers. Only actors are stateless (between invocations).
Do capability providers implement capabilities, or do they act as proxies to external capabilities?
Capability providers can implement capabilities directly and act as proxies to external capabilities, depending on the needs of your application.
How does wasmCloud handle versioning?
wasmCloud applications, and their components, are versioned. Application manifests include a version, which allows for upgrading (or rolling back) to a different version.
How does wasmCloud handle secrets?
There are several kinds of secrets involved in distributed applications. Configuration for actors and providers can contain sensitive data. Today, these values are associated with runtime links, or given to providers on startup The host itself is also configured with sensitive data, which are passed to the host on startup.
Actors can also retrieve secrets at runtime via a capability provider like kv-vault that proxies to a secrets management solution.
What tools does wasmCloud offer for observability?
Observability is crucial for distributed systems. Check out the Observability section of the host page for more information on logs, tracing, and metrics.
What is NATS? Why does wasmCloud depend on NATS?
NATS is open-source "message oriented middleware", and is also a CNCF incubating project. NATS is responsible for "addressing, discovery and exchanging of messages that drive the common patterns in distributed systems."
wasmCloud chose to use NATS early in its history because NATS provides a combination of features that were unavailable in another single technology: pub-sub messaging, load-balanced routing, delivery guarantees, account multi-tenancy, decentralized security, broad scaling ability, etc. Choosing NATS allowed the wasmCloud community to focus on building an application platform.
How do I make sure my application has high performance and avoid routing requests all over the place?
wasmCloud applications can be deployed in an immensely flexible way. Everything can be running within a single host, spread across multiple hosts inside a VPC, or span the globe (and even space). Sometimes performance can be improved by running parts of an application locally. Sometimes it's better to run everything centrally.
wasmCloud doesn't make these decisions for you; instead, wasmCloud gives you the tools to make the right decisions for your application, and the flexibility to change those decisions at runtime.
One other feature of NATS helps here: when using leaf nodes, NATS will prioritize traffic to local subscribers, which means requests will be handled without transiting the network if possible.
Does wasmCloud work with container orchestration systems like Kubernetes?
wasmCloud is compatible with, but not dependent on, Kubernetes. wasmCloud hosts can be deployed on/in bare metal, laptops, VMs, containers, Raspberry Pis, in Nomad clusters, in Kubernetes clusters, and many other environments. For more information on how to use wasmCloud with an existing Kubernetes cluster, check out the Kubernetes integration section.
Is wasmCloud ready for production?
wasmCloud is used in production by several companies already. See the deployment guide for topics related to running wasmCloud in production.
How does wasmCloud handle "noisy neighbor" issues?
This is a common question for anyone running a large distributed system! In terms of wasmCloud, there are two major ways this problem can occur: CPU/memory resource contention (normal for most systems) and provider bottlenecks. Both of these are covered below:
CPU/Memory Resource Contention
The most common type of noisy neighbor problem is resource contention over things like CPU and memory. Because Wasm is an emerging technology there isn't a 100% standard way to handle this yet. However, we have plans to add resource management to Wadm, our scheduling and orchestration tool. This will recognize requests and limits for actors and providers, and will ensure that resources are available for use, returning an error if things would be overprovisioned. Right now, we already have a
max_concurrency value you can set for actors (when you start them manually or via Wadm), which will get you pretty far. But as for actually enforcing specific limits, you'll still have to manage enforcement of these limits at the OS or container level (which is currently the status quo for most things). However, in the future, because Wasm is extremely deterministic, we should be able to use a combination of the metrics a wasmCloud host exposes and knowledge of what steps a module will take to develop a much more flexible, dynamic, and automated way of handling limits and requests of resources.
In wasmCloud, individual providers can be used by many different actors. This means that if a provider is overloaded, it can affect all actors that use it. However, this is also a common problem with other systems (such as ingress in Kubernetes) and the current solution is essentially the same as is done in those systems. You can run a copy of a provider across multiple hosts in the same geographical area in order to spread the load between them. In the future, providers will be entirely in Wasm, meaning that they will be able to scale up and down based on demand on a single host (as well as being spread between hosts).
How can I get involved?
wasmCloud prides itself on being a welcoming community. Feel free to:
We would love your feedback!