Wie wäre es denn, wenn wir den ganzen Cloud-Kram
noch mal neu machen, nur dieses Mal richtig.

"Könnt Ihr euch noch
an Zeiten erinnern, in denen 1.0 noch stable bedeutete?"

Wer kennt wasmCloud schon?

WASM?

Von denen, die WASM kennen:
Wer hat es schon einmal ausprobiert?
Wer mit Rust?

Fermyon Spin,
Microsoft "slight" Spiderlightning,
SpinKube?

Wer setzt ein
ServiceMesh ein?

Wem geht davon die Komplexität auf die Nerven?

KubeVela,
OAM?

NATS statt Kafka?

Juli 2019 erster Release

April 2024 Version 1.0

Monolithen werden mit
der Zeit zu komplex!

Microservices
um die Komplexität zu reduzieren.

  • Componentization via Services

  • Organized around Business Capabilities

  • Built- & Run-Teams

  • Smart endpoints and dumb pipes

  • Decentralized Governance

  • Infrastructure Automation

  • Design for failure

Es könnte so einfach sein ... 

  • Service Discovery

  • Transportprotokolle

  • Authentifizierung

  • Autorisierung

  • Observability

  • FinOps

  • Caching

  • Security & Thread Modelling

... ist es aber nicht

  • Skalieren

  • Deployment

  • Maintenance

  • Backup & Restore

  • Verschlüsselung

  • Continuous
    Deployment

  • Multicloud

  • Development Frameworks 

  • Orchestration Tools

  • API Gateways

  • Service Meshes

  • Monitoring & Obserfvability Tools

  • MicroService Pattern

  • Platform Engineering

Vereinfachen durch
mehr Komplexität!

Step 1: Web Assembly

Web Assembly

  • Gebaut um Compute-Intensive Dinge im Browser zu machen
    • statt JavaScript
    • LLMs ausführen
    • Alle Browser
  • Offener W3C-Standard
  • Byte Code Alliance
  • Liefert das, was Java damals versprochen hat.

 

WASM jenseits vom Browser

  • Runtimes
    • Wasmtime, WASMR, WasmEdge, V8, wazero, wasmi, wasm3
  • Plugins
    • Envoy/Istio, Redpanda, CosmWasm, libsql
  • Serverless
    • Fastly, Knative, Fermyon Spin, Cloudflare, WasmCloud
  • Containers & Kubernetes
    • runwasi, containerd-shim, kwasm

Code

WASM

WASM

Runtime

Compile

Run

Wasm Components

Enthalten Speicher, Funktionen, Importe und Exporte
Beliebige Sprachen als Source
Einfache Interfaces zu anderen Komponenten

100% isoliert, Whitelisting only

  • WebAssembly System Interface
    Offizieller W3C-Standard
  • Aktuell in Version 0.2 (Preview 2)

Step 2: WASI 

0.2 APIS
I/O
Clocks
Random
Filesystem
Sockets
CLI
HTTP

wasi-io

Input-Stream,
Output-Stream,
read and write,
utility-funktionen, copy etc.

wasi-clocks

Aktuelle Uhrzeit / WallClock
Timezone etc.
Zeit messen

wasi-random

Pseudozufallszahlen
nutzbar für Kryptographie
nutzbar für Sprachinterna
wieHashmaps

wasi-filesystem

Files und Directories
Kein unixoides
"Everything is a file"
Read, Write, List etc

wasi-sockets

TCP / UDP Sockets
IPv4 / IPv6
Blocking / Non-Blocking
Kein HTTP, kein SSL
Kein BSD-Sockets-Interface

wasi-cli

Alles für die CLI
Parameter, Environment
Error & Exit-Codes
STDIN, STDOUT, STDERR
Terminal-Handling
lokale sockets, clock, random

wasi-http

HTTP-Requests senden
HTTP-Requests empfangen
Proxies
Konzepte für Autoscaling etc.

 

Ok, reicht für eine Demo, aber klingt nicht nach einem Ersatz für meinen 500 microservices-cluster.

Eine Datenbank wäre schön. Oder eine Message-Queue. Vielleicht sogar ein Blobstore.

WASI Cloud Core

Seit 4 Monaten in Arbeit

Phase 1
Microsoft, Spinkube, WasmCloud an Bord

0.1 APIS
Key/Value
Messaging
http
runtime-config
SQL
Blob-Store
HTTP

wasi-keyvalue

Key-Value-Store-Interface
Read, Write
Atomic Operations
Batching
Aktuell:
FS, S3, Azure, Redis, Vault

wasi-messaging

Input-Stream,
Output-Stream,
read and write,
utility-funktionen wie copy etc.

wasi-sql

Input-Stream,
Output-Stream,
read and write,
utility-funktionen wie copy etc.

wasi-blobstore

Input-Stream,
Output-Stream,
read and write,
utility-funktionen wie copy etc.

wasi-keyvalue

Input-Stream,
Output-Stream,
read and write,
utility-funktionen wie copy etc.

Step 3: Verdrahten mit Wasmcloud

WasmCloud Hosts

"Nodes" in K8s
 

  • Lokal, auf Blech
  • On the Edge, IoT
  • Docker, Kubernetes Operator
  • Konfigurierbar: Labels, Registry


Sandbox via Wasmtime Builtin

Observability via OTEL Builtin

 

Lattice

Das "Servicemesh" von WasmCloud

  • Auf Basis von NATS
  • selbstformend
  • selbstheilend
  • Multi-Cloud via NATS GateWays

 

ServiceMesh via NATS

  • Alles ist in Nats
  • Kommunikation 
    • messages mit Subject
    • Publishern
    • Subscribern
    • wRPC als Protokoll
  • Streams as Store für Messages
  • Buckets als Key-Value-Store 

Komponenten

Die eigentliche Businesslogik

Als Wasm-Kompilat
 

Sprechen mit: 

  • anderen Komponenten
  • WASI
     

Nutzen wRPC über NATS als Protokoll

 

Runtime-verdrahtete Komponenten

Interfaces via WIT

Eine Sprachunabhängige IDL
 

  • Imports und Exports
  • Typen und Funktionen
  • Semanitische Versionierung
  • Ebenen
    • Interface: Funktionen, Typen
    • World: Import&Export
    • Package: zum Publishen

Provider

Langlaufende Komponenten

Meist nonfunktionale Anforderungen

  • zB Datenbankinterfaces
  • HTTP bereitstellen
  • Secrets aufbewahren
  • Notifications senden
     

Zeigen nach innen oder aussen

  • intern (lokaler Blob-Storage)
  • extern (s3-Anbindung)

Deklarativ via WADM

"wasmCloud Application Deployment Manager"

 

  • deklaratives Deployment von
    wasmCloud-Applikationen
  • Applikationen über das OAM als wadm.yaml
  • Installierbar als Kubernetes-Operator

 

  • Managed gewünschten Status mit Versionierung und Rollback
  • Verfolgt wasmClouds CloudEvents
  • Kompensiert mittels reconciliation-loop

Deploy & Scale

Deploy über Yaml-Updates

  • per OAM in Kubernetes
  • per WASH-Commandline
  • interne Verteilung per Auction

 

Es gibt zwei Scaler 

  • Spread Scaler - Prozentual nach Tags
  • Daemon Scaler - Absolut nach Tags

 

 

OAM Spec
Application Name, Version und Beschreibung

 


Komponente/Actor

 

Traits

Scaling

Run-Time Link

 

 

Provider/Capability

 

Interface-Contract
 

Ok, das klingt noch nicht
sooo viel einfacher als was wir bei Microservices haben.

Demo

Security by Default

WASM

  • Executable != Data, keine RCEs
  • Echtes Least Privilege über WIT

 

Builtin Support für Open Policy Agent

 

wasmCloud

  • Aktionen von Komponenten via JWT
  • Komponenten sind selbst signiert.
  • Neue Nodes mit Keypair
  • Node-übergreifende Aktionen brauchen Cluster Signing Key

Observability

OpenTelemetry basiert

  • Logging
  • Tracing
  • Metrics

WASMCLOUD_OBSERVABILITY_ENABLED="true"

Und, wie stabil ist es?

Die Konzepte sind wirklich gut. Aber ...

  • die Stabilität ist nicht wirklich 1.0
  • Vorgestern Nacht kam Secret-Support dazu
  • Viele Bugs, viel Debugging zum Betrieb
  • Lohnt sich heute nur bei grossen Potentialen
  • Vielleicht macht auch Fermyon Spin oder noch etwas anderes das Rennen.

Code

Slides

wasmCloud

By Johann-Peter Hartmann

wasmCloud

WasmCloud ist eine verteilte Runtime zum Erstellen von Cloud-Native-Anwendungen. Seit der Version 1.0 laufen Applikationen universell portabel und direkt aus der Programmierung heraus ohne weiteren Aufwand auf allen Devices, von Cloud bis Edge. Skalierbarkeit, hybdride Cloud und Self-Healing, Security mit Zero Trust, Effizienz in Ressourcen- und Netzwerknutzung liegen in der Architektur begründet und sind selbstverständlich. In seinem Vortrag stellt Johann-Peter Hartmann die Konzepte von wasmCloud und ihre Anwendung in der Praxis vor und zeigt, für welche Applikationen wasmCloud bereits heute eine gute Wahl darstellt.

  • 134