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.
- 114