Read first

Start Here

A seventeen-chapter systems-design guide for building the data platform at a GPU-marketplace company. This chapter sets up the running case study — the company, its source systems, the canonical data model, the three reference stacks, and the scale numbers — that every later chapter builds on. Don't skip it: the rest of the guide assumes this vocabulary.

What this guide is (and isn't)

This is a guide about designing the data platform itself — the ingestion, storage, modeling, transformation, serving, governance, and AI-enablement systems that a Data Platform Engineer (DPE) stands up so that everyone else in the company can answer questions with data and ship ML. It is a systems-design guide: it reasons about components, data flows, trade-offs, and failure modes.

It is not a guide about doing data-engineering tasks on rented GPUs, and it is not an interview cram sheet. For the former, read the sibling guide Data Engineering for Neoclouds.

Layered by design

Every chapter opens with foundational framing (what the concept is, why it exists) and then climbs to senior design-decision depth (the trade-offs, the schemas, the capacity math). New to the field? Read top-to-bottom. Senior? The first section of each chapter is skimmable; the value is in the later sections and the callouts.

The case study: GridDP

Throughout the guide we design GridDP — the internal data platform for a hypothetical GPU-rental marketplace. A quick refresher on why a marketplace is a fascinating data-platform case study:

  • It is two-sided. Providers (GPU owners) list machines; clients rent them. Every event has two economic actors, which doubles the modeling and the metrics.
  • The product emits a firehose of physical telemetry. Tens of thousands of GPUs report utilization, temperature, power, and benchmark scores every few seconds. This is the high-volume, time-series part of the platform.
  • Pricing is a live market. On-demand prices and interruptible bids change by the hour. The platform needs event-time-correct pricing and clearing data.
  • Trust is system-generated. DLPerf benchmarks, reliability scores, and fraud signals are data products the platform computes and feeds back into the marketplace ranking — the data platform is in the product's critical path, not just a back office.
  • Money flows both ways. Clients are billed; providers are paid out; crypto and fiat rails, KYC, and a double-entry ledger all generate financial data with correctness requirements.
Illustrative, not official

GridDP and its architecture are invented for teaching — a composite drawn from how GPU-rental marketplaces behave in general, not any one company's stack. Treat the numbers and schemas as realistic teaching fixtures, not facts about a specific business.

The source systems (the application space)

A data platform is only as good as its understanding of where data is born. Chapter 01 goes deep on this; here is the map you should hold in your head for the whole guide. GridDP ingests from nine source systems:

┌──────────────────────────────────────────────────────────────────────────┐ │ APPLICATION SPACE (sources) │ ├───────────────────────────┬────────────────────────────────────────────────┤ │ TRANSACTIONAL (OLTP) │ EVENTS / STREAMS │ THIRD-PARTY │ │ Postgres, row-by-row │ Kafka topics, append-only │ external APIs │ │ │ │ │ │ 1 marketplace-api │ 6 marketplace-events │ 8 payments │ │ accounts, listings, │ search, click, rent, │ Stripe (fiat)│ │ rentals, bids │ bid, preempt, cancel │ crypto rails │ │ │ │ KYC / AML │ │ 2 billing-service │ 7 host-agent telemetry │ │ │ meters, invoices, │ ⚡ THE FIREHOSE ⚡ │ 9 support │ │ credits, payouts, │ per-GPU metrics every │ Zendesk-like │ │ double-entry ledger │ ~10s: util, temp, power, │ tickets, │ │ │ VRAM, DLPerf probes, │ disputes │ │ 3 instance-orchestrator │ reliability heartbeats │ │ │ instance lifecycle │ │ │ │ │ │ │ │ 4 ranking-service │ │ │ │ DLPerf, reliability, │ │ │ │ search-rank features │ │ │ │ │ │ │ │ 5 trust-safety │ │ │ │ fraud signals, bans │ │ │ └───────────────────────────┴──────────────────────────────┴──────────────────┘ │ ▼ ┌────────────────────┐ │ GridDP │ ← everything in chapters │ the data platform │ 03–16 is about this box └────────────────────┘

Two properties of this source map drive most of the architecture:

  1. Heterogeneous shapes. Slowly-changing relational tables (accounts), high-frequency append-only events (telemetry), and external API pulls (payments) need fundamentally different ingestion patterns — CDC, streaming, and batch respectively. Chapter 04 is organized around exactly this split.
  2. One source dominates volume. The host-agent telemetry firehose is 2–3 orders of magnitude larger than everything else combined. A huge fraction of the platform's cost and design tension comes from this single source. Watch it recur in 04 (ingest), 05 (store), 14 (scale).

The data domains

Source systems are an engineering view. The platform also needs a business view — the domains that analysts and ML models actually reason about. We organize GridDP into six domains; most chapters touch one or two explicitly.

DomainGrain / core entitiesPrimary sourcesWho cares
Marketplacelisting, search, match, rental, bidmarketplace-api, marketplace-eventsProduct, growth
Supply / fleethost, machine, GPU, telemetry samplehost-agent, orchestratorSupply ops, ML
Billing & financemeter, invoice, payout, ledger entrybilling-service, paymentsFinance, execs
Trust & safetyfraud signal, ban, disputetrust-safety, supportT&S, risk
Quality / rankingDLPerf score, reliability scoreranking-service, host-agentProduct, ML
Customeraccount, session, ticketmarketplace-api, clickstream, supportGrowth, CX

Domains are not just documentation — they become the ownership boundaries for data contracts (chapter 09), the seams for access control (chapter 11), and the top-level namespaces in the catalog. A platform without explicit domains becomes a swamp where no one owns anything.

The canonical data model

Here is the core entity model in miniature. Chapter 06 develops the full dimensional model (with slowly-changing dimensions, fact grains, and DDL); this is the skeleton to memorize first. Note the two-sided spine: supply on the left, demand on the right, meeting at the rental.

SUPPLY SIDE DEMAND SIDE ┌──────────────┐ ┌──────────────┐ │ host │ 1 1 │ customer │ │ (provider) │───┐ ┌────│ (account) │ └──────────────┘ │ │ └──────────────┘ │ * * │ │ 1 ┌──────────────┐ │ │ │ │ machine │◀──┘ │ │ * │ (physical box)│ │ ┌──────────────┐ └──────────────┘ │ │ bid │ │ 1 │ │ (interruptible)│ │ * │ └──────────────┘ ┌──────────────┐ ┌──────────────┐ │ │ │ gpu │ │ listing/ │ │ │ │ (one card) │ │ offer │ │ │ └──────────────┘ └──────────────┘ │ │ │ │ 1 │ │ │ │ * │ │ │ produces ┌─────────────┐ │ │ ▼ │ instance │◀──────┘ │ ┌──────────────┐ │ (a running │◀──────────────────┘ │ telemetry_ │ │ rental) │ │ sample │ └─────────────┘ │ (⚡firehose) │ │ 1 └──────────────┘ │ * ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │ rental_ │ * 1 │ invoice │ 1 * │ ledger_entry │ │ meter │──────│ │──────│ (double-entry)│ └─────────────┘ └──────────────┘ └──────────────┘ │ 1 │ * ┌──────────────┐ │ payout │ → to provider └──────────────┘
The grains that matter most

Three fact grains carry the business: one row per telemetry sample (billions, time-series), one row per rental-hour meter (the billing atom), and one row per bid event (the market). Almost every metric in the company is an aggregation over one of these three. Hold them; chapter 06 formalizes them.

The three reference stacks

Rather than prescribe one toolchain, the guide carries three end-to-end reference architectures and compares them at every layer. When a chapter says "in Stack A…", this is what it means:

LayerStack A — Open-source lakehouseStack B — Databricks-centricStack C — Snowflake-centric
Streaming busKafka / RedpandaKafka → Auto LoaderKafka → Snowpipe Streaming
Ingest / CDCDebezium, FlinkDelta Live Tables, DebeziumFivetran, Snowpipe, connectors
Table formatApache Iceberg on S3Delta LakeSnowflake tables (FDN) + Iceberg
Transformdbt-core + Spark SQLdbt or DLT (Spark)dbt + Dynamic Tables
OrchestrateDagster (or Airflow)Databricks WorkflowsSnowflake Tasks / Airflow
Query engineTrino / SparkDatabricks SQL (Photon)Snowflake virtual warehouses
Telemetry / real-timeClickHouseDelta + Spark SS / ClickHouseClickHouse or Dynamic Tables
Catalog / governancePolaris/Nessie + DataHubUnity CatalogSnowflake Horizon
ML / featuresFeast + MLflowDatabricks Feature Store + MLflowSnowflake Feature Store + Snowpark
Semantic layerCube / dbt MetricFlowUnity Catalog metrics / dbtSnowflake Semantic Views / dbt
NL-to-SQL / AIself-hosted LLM + CubeDatabricks Genie / AI-BISnowflake Cortex Analyst

Chapter 03 explains why you would choose each (capital model, team size, lock-in tolerance, cost curve). The short version: A minimizes vendor cost and lock-in at the price of engineering headcount; B excels when ML and large-scale Spark are central; C wins on time-to-value and SQL-analyst ergonomics. A real company at GridDP's stage usually runs a hybrid — and a marketplace's telemetry firehose pushes all three toward a specialist time-series engine (ClickHouse) on the side.

Scale numbers (the fixtures)

Design is meaningless without magnitudes. These are the numbers we size GridDP against; they recur in the capacity math in chapters 04, 05, 14, and 15.

QuantityFigureImplication
GPUs on the marketplace~17,000The fleet whose telemetry we ingest
Telemetry intervalevery 10 s / GPU6 samples/min/GPU
Telemetry samples/day~150 M/day (17k × 6 × 1440)~1,700 events/sec sustained; the firehose
Marketplace + clickstream events/day~20–40 M/dayBursty; spikes on model releases
Rentals (active concurrent)~10–15 kRental-hour meter rows: ~10 M/day
Raw landed data growth~150–250 GB/day compressed~50–90 TB/yr → tiering matters
Accounts (lifetime)hundreds of thousandsSmall dimension; trivial to model
Core analyst/ML internal userstens to low hundredsSelf-serve > ticket queue (ch. 09)
The 80/20 of this whole guide

~80% of the bytes and ~80% of the infrastructure cost come from one source (telemetry), while ~80% of the questions people ask come from the small relational domains (billing, marketplace, customer). Good platform design treats these two worlds with different tools and never forces the firehose through a row-oriented warehouse. Internalize this asymmetry now.

Who consumes the data

A platform exists for its consumers. GridDP serves five, and chapters 08–13 are largely about serving them well:

  • Product & growth — funnels, retention, marketplace liquidity, pricing experiments. Want self-serve dashboards and a trustworthy metrics layer (ch. 08–09).
  • Finance & execs — GMV, take-rate revenue, margins, payouts. Want one number for each metric, reconciled to the ledger (ch. 08, 11).
  • Supply ops — fleet health, utilization, fill rate, provider economics. Heavy telemetry consumers (ch. 14).
  • Trust & safety / risk — fraud, abuse, disputes. Want low-latency signals and audited access to sensitive data (ch. 11–12).
  • ML & data science — ranking, fraud, churn, capacity forecasting, dynamic pricing. Want features, training data, and offline↔online parity (ch. 12).
  • AI agents & NL interfaces — increasingly, the "user" is an LLM answering questions in Slack. Accuracy depends entirely on the semantic layer (ch. 13).

Reading order

The chapters are grouped into five sections that follow the data's journey:

  • Section A · Orient (01–02) — the application space and the DPE role.
  • Section B · Architecture foundations (03–07) — architectures, ingestion, storage, modeling, transformation. The load-bearing build chapters.
  • Section C · Serving, quality & governance (08–11) — getting trustworthy data to internal users.
  • Section D · AI enablement (12–14) — the platform for ML, AI powering the platform, and performance at scale.
  • Section E · Putting it together (15–16) — the end-to-end reference design and synthesis.

Read in order if you're new to the space. If you're a senior engineer, the recommended deep-dive path is in the guide hub. Next up: the application space — every source system, in detail.