Data Model
3.1 D1 Database Schema
-- Customers and authentication
CREATE TABLE customers (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL,
created_at INTEGER NOT NULL,
cloud_accounts JSON NOT NULL, -- { aws: [], azure: [], gcp: [] }
kivera_identity_id TEXT,
max_concurrent_workloads INTEGER DEFAULT 100,
default_requirements JSON
);
CREATE TABLE api_tokens (
id TEXT PRIMARY KEY,
customer_id TEXT NOT NULL REFERENCES customers(id),
token_hash TEXT NOT NULL,
name TEXT NOT NULL,
permissions JSON NOT NULL,
created_at INTEGER NOT NULL,
expires_at INTEGER,
last_used_at INTEGER
);
-- Workloads
CREATE TABLE workloads (
id TEXT PRIMARY KEY,
customer_id TEXT NOT NULL REFERENCES customers(id),
name TEXT NOT NULL,
status TEXT NOT NULL, -- PENDING, PROVISIONING, RUNNING, STOPPING, TERMINATED, FAILED
requirements JSON NOT NULL,
config JSON NOT NULL,
created_at INTEGER NOT NULL,
started_at INTEGER,
terminated_at INTEGER,
termination_reason TEXT
);
CREATE TABLE workload_instances (
id TEXT PRIMARY KEY,
workload_id TEXT NOT NULL REFERENCES workloads(id),
provider TEXT NOT NULL, -- aws, azure, gcp
region TEXT NOT NULL,
instance_type TEXT NOT NULL,
instance_id TEXT NOT NULL,
public_ip TEXT,
private_ip TEXT,
status TEXT NOT NULL,
spot_price REAL NOT NULL,
created_at INTEGER NOT NULL,
terminated_at INTEGER
);
CREATE TABLE workload_routing (
workload_id TEXT PRIMARY KEY REFERENCES workloads(id),
endpoint TEXT NOT NULL,
provider TEXT NOT NULL,
region TEXT NOT NULL,
instance_id TEXT NOT NULL,
updated_at INTEGER NOT NULL
);
-- Spot pricing history
CREATE TABLE spot_price_history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
provider TEXT NOT NULL,
region TEXT NOT NULL,
instance_type TEXT NOT NULL,
price_per_hour REAL NOT NULL,
availability_zone TEXT,
recorded_at INTEGER NOT NULL
);
CREATE INDEX idx_spot_prices_lookup ON spot_price_history(provider, region, instance_type, recorded_at DESC);
-- Audit log
CREATE TABLE audit_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
customer_id TEXT NOT NULL,
workload_id TEXT,
action TEXT NOT NULL,
details JSON,
ip_address TEXT,
user_agent TEXT,
created_at INTEGER NOT NULL
);
CREATE INDEX idx_audit_customer ON audit_log(customer_id, created_at DESC);
3.2 KV Namespace Structure
# Routing (hot path - needs to be fast)
workload:{workloadId}:endpoint -> "10.0.1.50"
workload:{workloadId}:status -> "RUNNING" | "INTERRUPTED" | "STOPPING"
workload:{workloadId}:provider -> "aws"
workload:{workloadId}:region -> "us-east-1"
# Price cache (updated every 60s)
prices:{provider}:{region}:{instanceType} -> { price: 0.05, updatedAt: 1234567890 }
prices:best:{requirements_hash} -> { provider: "aws", region: "us-east-1", ... }
# Customer session cache
customer:{customerId}:token:{tokenPrefix} -> { permissions: [...], expiresAt: ... }
# Rate limiting
ratelimit:{customerId}:{action}:{window} -> count
3.3 Durable Object State (SQLite)
-- ConnectionManager DO
CREATE TABLE connections (
id TEXT PRIMARY KEY,
workload_id TEXT NOT NULL,
backend TEXT NOT NULL,
connected_at INTEGER NOT NULL,
last_activity_at INTEGER NOT NULL
);
-- PriceCollector DO
CREATE TABLE spot_prices (
provider TEXT NOT NULL,
region TEXT NOT NULL,
instance_type TEXT NOT NULL,
vcpu INTEGER NOT NULL,
memory_gb REAL NOT NULL,
gpu_count INTEGER DEFAULT 0,
gpu_type TEXT,
price_per_hour REAL NOT NULL,
interruption_rate REAL,
availability_score REAL,
updated_at INTEGER NOT NULL,
PRIMARY KEY (provider, region, instance_type)
);
CREATE INDEX idx_prices_requirements ON spot_prices(vcpu, memory_gb, gpu_count, price_per_hour);
-- HealthMonitor DO
CREATE TABLE health_checks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
checked_at INTEGER NOT NULL,
healthy BOOLEAN NOT NULL,
response_time_ms INTEGER,
error TEXT
);