Namespace Configuration and Client Request Flow
Note: This RFC is consolidated into RFC-056: Unified Configuration Model, which provides the complete configuration story with standardized terminology. This document remains as a detailed reference for user-facing namespace configuration.
Abstract
This RFC specifies how application owners request and configure namespaces in Prism from a client perspective. It defines the limited configuration surface area available to clients, explains how client requirements map to the three-layer architecture (Client API → Patterns → Backends), and clarifies the separation of concerns between client-controlled and platform-controlled configuration.
Motivation
Problem Statement
Application teams need to use Prism data access services, but the current documentation is spread across multiple RFCs and ADRs (RFC-001, RFC-014, ADR-006, RFC-003). Teams have questions:
- "How do I request a namespace?" - What's the process for getting started?
- "What can I configure?" - What options are under my control vs platform control?
- "How do patterns get selected?" - How do my requirements translate to implementation?
- "What's the three-layer architecture?" - How does Client API → Patterns → Backends work from my perspective?
Goals
- Clear Client Perspective: Document namespace configuration from application owner's viewpoint
- Limited Configuration Surface: Define exactly what clients can configure (prevents misconfiguration)
- Self-Service Enablement: Teams can request namespaces without platform team intervention
- Pattern Selection Transparency: Explain how requirements map to patterns and backends
- Three-Layer Clarity: Show how client concerns map to architecture layers
Non-Goals
- Platform Configuration: Internal backend connection strings, resource pools (platform-controlled)
- Pattern Implementation: How patterns work internally (see RFC-014)
- Backend Selection Logic: Algorithm for choosing backends (platform-controlled)
- Multi-Cluster Management: Cross-region namespace configuration (see RFC-012)
Three-Layer Architecture Recap
Before diving into client configuration, let's establish the architecture model:
┌────────────────────────────────────┐
│ Pattern Type (What) │ ← Application declares what they need
│ KeyValue | PubSub | Queue │ "I need a queue pattern for messages"
└────────────────────────────────────┘
↓
┌────────────────────────────────────┐
│ Pattern Implementations (How) │ ← Prism selects how to implement it
│ Outbox | CDC | Claim Check │ "Use Outbox + WAL patterns"
└────────────────────────────────────┘
↓
┌────────────────────────────────────┐
│ Backends (Where) │ ← Prism provisions where to store data
│ Kafka | Postgres | Redis | NATS │ "Provision Kafka topic + Postgres table"
└────────────────────────────────────┘
Key Principle: Clients declare what they need (Pattern type + functional needs). Prism decides how to implement it (Pattern implementations) and where to store data (Backends).
Terminology Note: Per RFC-056, we use "pattern" (not "client_api") and "needs" (not "requirements") for consistency across all documentation.
Client Configuration Surface
What Clients Control
Clients have a limited, safe configuration surface to declare their needs:
- Pattern Type (required):
keyvalue,pubsub,queue,reader,transact - Functional Requirements (needs): Durability, message size, retention, consistency
- Capacity Estimates (needs): RPS, data size, concurrent connections
- Access Control (ownership): Team ownership, consumer services
- Compliance (policies): Retention, PII handling, audit requirements
What Platform Controls
Platform team controls implementation details (clients never see these):
- Pattern Selection: Which patterns to apply (Outbox, CDC, Claim Check)
- Backend Selection: Which backend to use (Kafka vs NATS, Postgres vs DynamoDB)
- Resource Provisioning: Topic partitions, connection pools, replica counts
- Network Configuration: VPC settings, service mesh configuration
- Observability: Metrics, tracing, alerting infrastructure