The use of WebAssembly server-side is driving a major revolution in platform design, moving beyond the cloud as a destination.
Coupled with products like wasmCloud and NATS, WebAssembly is creating a whole new paradigm for Cloud Native, eliminating entire classes of problems (such as portability and its associated challenges) and creating simplified, robust and secure planes for distributed applications.
As a digital product consultancy, we have felt the pain of building microservice applications with today’s architectures - we know how hard it is to carry the weight of everything you need to manage.
But, with this new suite of tools, a new paradigm is rapidly emerging with a wealth of benefits to free organisations from the inherent challenges of distributed systems.
For the last decade (and even longer) the overwhelming message and drive has been for businesses to migrate to the cloud. The obvious and well-known business benefits are documented and largely true - provided the implementation is done well, and the migration goes to plan.
Now we are here (well, most of us), there is rightly a sense of trepidation about having all of our metaphorical eggs in one cloud-provider-shaped basket.
It is still far too complicated to manage and maintain hybrid environments and to free business logic development from the platform on which it runs.
I believe the next decade will be characterized by a rush beyond individual cloud providers - to a utility provided from anywhere (hybrid and multi-cloud).
In regulated industries such as finance and healthcare, regulators are suggesting that relying on a single cloud vendor is too risky, insisting you have a ‘get-out plan’.
Such plans hold quite a leap from words to deeds. Executing a move to a different cloud provider today would be expensive and prohibitive.
Containers and Kubernetes have been an eye opener for platform engineers and solution architects. It’s the first time there has been a standard, consistent and uniform way to deploy applications, regardless of which cloud provider you use.
The problem, however, is that we are still locked into cloud-provider-specific services - Amazon Web Services (AWS) is famous for the number of services it keeps introducing and every cloud-provider-specific service we use locks us in even further.
The next step is to move to a multi-cloud (or more accurately multi-location) model. To do that, we need to build above the HTTP TCP/IP networking stack that dominates microservice configurations today.
But multi-cloud isn’t really a thing. Yet. Not transparently. The best we can do today is to join discrete Kubernetes clusters together in a service mesh, using point-to-point connections between cloud providers.
And we can’t yet have workloads that are truly location independent.
The next step out of the cloud (or above the cloud really) is WebAssembly, running server-side, on one of the many runtimes we have now. And probably with a platform like wasmCloud, running on top of NATS, on top of Kubernetes (for now), on top of the cloud.
I am absolutely convinced that in the next few years (or maybe even months), server-side WebAssembly runtimes will make significant inroads into platform design, subtly influencing software architecture on the way.
As well as the natural evolution of core technology and its application, we are seeing microservices, delineated by network boundaries, giving way to much smaller, lighter actors, compiled to WebAssembly that talk over (potentially global) messaging backplanes.
So what does that actually mean? A number of things for the evolution of the platform.
We can now free ourselves from boilerplate code that sucks up so much of our energy today. Services will become smaller and more focused - the simpler and smaller we can make them the better.
With WebAssembly and wasmCloud we have a fundamental paradigm shift where these services are now more like actors, sitting above the network layer and representing our pure core.
Up until now, the vast majority of our time has been spent managing things that don’t represent our core value, but not anymore.
If we visualise the Onion Architecture (or ports and adapters, or hexagonal architecture, or clean architecture or whatever you want to call it), we can now begin to strip away the outer layers to focus on our business logic.
We want to push the side effects to the edge so we keep the core pure — simple, and easy to test. We want to iterate on this core quickly so we can deliver real value to customers
And now we can do that thanks to wasmCloud, WebAssembly, Kubernetes, and NATS.
For the first time, we can have truly global clusters, spread across geographical locations - all because of NATS and WasmCloud.
NATS flattens the WasmCloud lattice and elevates it above the network, allowing it to be independent of network topology - no more firewalls or perimeter based security models.
In a large enterprise, you might expect a single, global, multi-tenant NATS backplane to be the ceiling for the infrastructure team and the floor for the platform team.
WasmCloud becomes the ceiling for the platform team and the floor for the application teams. It provides a great developer experience for building modern distributed applications with high velocity and a core focus on building customer value.
Those enterprises that see this opportunity and embrace it first will be the most able to develop and deploy the vast array of customer-centric digital experiences demanded by the market.
WebAssembly is making its mark in almost every area of modern computing, most notably led by the CDNs and multi-channel content providers like Disney+. It's only a matter of time before this becomes a common pattern for Cloud Native applications.