Zum Inhalt springen
TypFreigeschaltet
PhaseFleet
SchwierigkeitMittel
AufgabeMulti-Tenant SaaS
FürSolo Founder
FürDev Teams
FürAgenturen
ServicesContainers
ServicesSnapshots
ServicesExec
ServicesFiles
Warum HoodyContainer-Ökonomie
Warum HoodyBare-Metal-Isolierung
Warum HoodySnapshot-Zeitreisen
BrancheSaaS
TypFreigeschaltet
PhaseFleet
SchwierigkeitMittel
AufgabeMulti-Tenant SaaS
FürSolo Founder
FürDev Teams
FürAgenturen
ServicesContainers
ServicesSnapshots
ServicesExec
ServicesFiles
Warum HoodyContainer-Ökonomie
Warum HoodyBare-Metal-Isolierung
Warum HoodySnapshot-Zeitreisen
BrancheSaaS
TypFreigeschaltet
PhaseFleet
SchwierigkeitMittel
AufgabeMulti-Tenant SaaS
FürSolo Founder
FürDev Teams
FürAgenturen
ServicesContainers
ServicesSnapshots
ServicesExec
ServicesFiles
Warum HoodyContainer-Ökonomie
Warum HoodyBare-Metal-Isolierung
Warum HoodySnapshot-Zeitreisen
BrancheSaaS
TypFreigeschaltet
PhaseFleet
SchwierigkeitMittel
AufgabeMulti-Tenant SaaS
FürSolo Founder
FürDev Teams
FürAgenturen
ServicesContainers
ServicesSnapshots
ServicesExec
ServicesFiles
Warum HoodyContainer-Ökonomie
Warum HoodyBare-Metal-Isolierung
Warum HoodySnapshot-Zeitreisen
BrancheSaaS
CONTAINER · MULTI-TENANT-SAAS

Ein Sandbox pro Customer, automatisch

Hör auf, tenant_id in jede Tabelle zu streuen. Wenn sich ein Kunde anmeldet, kopiert ein Exec-Skript einen Fresh-Customer-Container und übergibt ihnen ihre eigene URL, ihr eigenes Dateisystem, ihre eigene SQLite. Isolation ist das Betriebssystem zwischen ihnen, nicht eine WHERE-Klausel.

Was dieser eine API-Call provisioniert

Jeder POST auf /api/v1/projects/{id}/containers startet eine isolierte Umgebung. Ein Call, ein Tenant, eine URL zurück an deine App.

01 · WEBHOOK

Signup löst den Container-POST aus

Dein Stripe-Webhook (oder ein beliebiger Billing-Webhook) trifft auf ein Hoody Exec Script. Kein Express, keine Server-Config — nur eine Datei in scripts/.

02 · ISOLATION

Linux-Namespaces, keine WHERE-Klausel

Der neue Container hat sein eigenes Dateisystem, sein eigenes SQLite, seine eigene Ramdisk. Tenant A kann die Daten von Tenant B schlicht nicht sehen.

03 · URL

Eine eindeutige URL zurück zu deiner App

Die Antwort enthält eine Container-URL. Deine App leitet den User in seine eigene Sandbox — im selben Deploy-Fenster.

04 · FIREWALL

Netzwerkregeln pro Tenant geklont

Netzwerk- und Firewall-Regeln des Containers werden aus deinem Template kopiert. Jeder neue Tenant startet von derselben Security-Baseline.

05 · IDLE

Null Kosten im Leerlauf

Stopp den Container und er kostet nichts. BTRFS speichert nur das Delta zu deinem Template — Speicher bleibt günstig, selbst im großen Maßstab.

06 · OFFBOARD

DELETE Container = Tenant vergessen

Ein DELETE-Call entfernt den Container und alle zugehörigen Daten. DSGVO-Offboarding ist kein Script, sondern ein einziger HTTP-Call.

Der ganze Flow ist ein Webhook-Handler. Kein Kubernetes-Operator, kein Namespace-YAML, kein Cluster-Admin. Drei HTTP-Calls: Webhook rein, Container raus, URL zum User.

Geteilte Multi-Tenancy vs. Container pro Kunde

Die traditionellen Optionen waren entweder eine Spalte auf jeder Tabelle oder eine Flotte aus VMs, die du dir nicht leisten konntest. Hoody ist eine dritte Form: Container, billig genug, um jedem Kunden einen zu geben.

DIMENSION
GETEILTE DB · TENANT_ID
HOODY · CONTAINER PRO KUNDE
  • ISOLATIONWHERE tenant_id = $1 — und du hoffst, dass jede Query daran denktLinux-Namespaces. Tenant A kann das Filesystem von Tenant B buchstäblich nicht sehen.
  • DATA-LEAK-OBERFLÄCHEjeder JOIN, jeder ORM-Hook, jedes Reporting-Skriptdie Container-Grenze. Ein Artefakt zu auditen, nicht 200 Query-Stellen.
  • PER-TENANT-CONFIGFeature-Flags-Tabelle, brüchig, halb getestet in DevEdit der Environment eines Containers. Die anderen 399 bleiben unverändert.
  • NOISY NEIGHBORein heavy Customer kann die geteilte DB blockenContainer-CPU- und Disk-Quotas; die Last eines Tenants bleibt in seiner Box.
  • OFFBOARDINGDELETE … WHERE tenant_id … plus 12 weitere Tabellen, die du vergessen hastDELETE den Container. Ihre Daten gehen mit. GDPR ist ein HTTP-Call.
  • KOSTEN IM IDLEjede Zeile kostet Storage, auch wenn der Kunde schläftstoppe den Container — null CPU, null RAM. BTRFS behält nur das Delta.
  • keine tenant_id-Spalten
  • keine Row-Level-Security-Audits
  • kein Namespace-YAML
  • delete = vergessen

Multi-Tenancy ist kein Architekturproblem mehr. Es wird zu einem `cp`-Befehl.

ONBOARDPOST /containers/$TEMPLATE/copy
OFFBOARDDELETE /containers/$CID
PER-TENANT-TWEAKPATCH /containers/$CID [ env_vars ]
  • Namespace-Grade-Isolation
  • GDPR-Delete in einem Call
  • ein Container pro Account

Was das ersetzt

Per-Tenant-Isolation hat historisch entweder eine clevere WHERE-Klausel oder ein teures Cluster bedeutet. Container pro Kunde verdrängt die üblichen Workarounds:

  • Geteilte Multi-Tenancy (tenant_id-Spalte)Eine schlechte Query legt alle offen
  • Eigene Tenant-Isolation-MiddlewareSelbstgebaute Guard, die du für immer pflegst
  • Postgres-Row-Level-Security-PoliciesRichtige Antwort, teuer pro Tabelle zu auditen
  • Kubernetes-Namespace pro TenantCluster-Level-Overhead, Ops-Team nötig
  • Per-Customer-Schemas / DatenbankenMigrations-Multiplikator, Connection-Pool-Schmerz
  • Stripe-Metering-Zeilen in einer geteilten TabelleUsage-Tracking auf dieselbe geteilte Box geklebt

Idle Customers kosten nichts. Aktive skalieren on demand. Das Ganze läuft auf $49 Bare Metal, bis du Hunderte zahlende User hast.

Lies die anderen