πŸ“š PracticeSeniorVerifiedSystem DesignSystem Design Ready

System Design: MLOps Pipeline with MLflow & Kubeflow

Design an MLOps pipeline with MLflow and Kubeflow. Covers experiment tracking, model registry, 8-step automated pipeline, Kubernetes serving, Redis caching, and Prometheus monitoring.

KubernetesKubeflowMLflowMLOpsSystem DesignProduction MLCI/CD
Updated Dec 20, 2025

Question

System Design: MLOps Pipeline with MLflow & Kubeflow

Difficulty: senior Estimated Time: 120 minutes Tags: Kubernetes, Kubeflow, MLflow, MLOps, System Design, Production ML, CI/CD


Problem Statement

Problem Statement

Business Context

You're a senior ML engineer at a company building an AI-powered sentiment analysis chatbot. The product team wants to:

  • Deploy a sentiment classification model to production
  • Continuously improve the model based on user feedback
  • Ensure high availability (99.9% uptime)
  • Handle traffic spikes during peak hours

Technical Requirements

  1. Model Training Pipeline: Automated, reproducible training
  2. Experiment Tracking: Compare model versions, hyperparameters
  3. Model Registry: Version control for models with staging/production stages
  4. Production Serving: Low-latency inference (<500ms p99)
  5. Monitoring: Track model performance, data drift, system health
  6. Auto-scaling: Handle 100-10,000 requests/minute

Constraints

  • Team of 3 ML engineers
  • Must use existing Kubernetes infrastructure
  • Budget: $5,000/month for ML infrastructure
  • Model must be updated weekly with new training data

High-Level Architecture

High-Level Architecture

Architecture Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Production ML System Architecture                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                  β”‚
β”‚  1. DEVELOPMENT & EXPERIMENTATION                                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
β”‚  β”‚               MLflow Tracking Server                            β”‚             β”‚
β”‚  β”‚  β€’ Experiment tracking                                          β”‚             β”‚
β”‚  β”‚  β€’ Model Registry (Dev β†’ Staging β†’ Production)                  β”‚             β”‚
β”‚  β”‚  β€’ PostgreSQL Backend + S3 Artifacts                            β”‚             β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
β”‚                              β”‚                                                   β”‚
β”‚  2. AUTOMATED ML PIPELINE (Kubeflow)                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
β”‚  β”‚  Step 1: Data Validation β†’ Step 2: Preprocessing                β”‚             β”‚
β”‚  β”‚  Step 3: Training (GPU) β†’ Step 4: Evaluation                    β”‚             β”‚
β”‚  β”‚  Step 5: Registration β†’ Step 6: Staging Deploy                  β”‚             β”‚
β”‚  β”‚  Step 7: Integration Tests β†’ Step 8: Production Deploy          β”‚             β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
β”‚                              β”‚                                                   β”‚
β”‚  3. PRODUCTION SERVING (Kubernetes)                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
β”‚  β”‚  Ingress β†’ LoadBalancer β†’ Pods (2-5 replicas)                   β”‚             β”‚
β”‚  β”‚  HPA: Scale on CPU 70% target                                   β”‚             β”‚
β”‚  β”‚  Each Pod: FastAPI + DistilBERT Model                           β”‚             β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
β”‚                              β”‚                                                   β”‚
β”‚  4. SUPPORTING INFRASTRUCTURE                                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 β”‚
β”‚  β”‚  Redis Cache    β”‚  β”‚  Prometheus     β”‚  β”‚  Grafana        β”‚                 β”‚
β”‚  β”‚  30% hit rate   β”‚  β”‚  Metrics        β”‚  β”‚  Dashboards     β”‚                 β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                 β”‚
β”‚                                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5-Layer Architecture Overview

LayerComponentPurpose
1MLflowExperiment tracking, model versioning, registry
2KubeflowAutomated ML pipelines (8-step process)
3KubernetesProduction serving with auto-scaling
4RedisSemantic caching for repeated queries
5Prometheus + GrafanaMonitoring and observability

Data Flow

  1. Training Data β†’ S3 bucket (raw data)
  2. Kubeflow Pipeline β†’ Validates, preprocesses, trains model
  3. MLflow β†’ Logs experiments, registers model versions
  4. Model Registry β†’ Promotes model through stages (Dev β†’ Staging β†’ Prod)
  5. Kubernetes β†’ Serves model via FastAPI endpoints
  6. Redis β†’ Caches frequent predictions
  7. Prometheus β†’ Collects metrics from all components

Component Deep-Dives

Component Deep-Dives

Layer 1: MLflow Tracking Server

Purpose: Central hub for experiment tracking and model versioning

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 MLflow Architecture                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚
β”‚  β”‚  Tracking   β”‚    β”‚   Model     β”‚                β”‚
β”‚  β”‚   Server    β”‚    β”‚  Registry   β”‚                β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜                β”‚
β”‚         β”‚                  β”‚                        β”‚
β”‚         β–Ό                  β–Ό                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚
β”‚  β”‚         PostgreSQL DB            β”‚               β”‚
β”‚  β”‚  β€’ Experiment metadata           β”‚               β”‚
β”‚  β”‚  β€’ Run parameters/metrics        β”‚               β”‚
β”‚  β”‚  β€’ Model versions                β”‚               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚         β”‚                                           β”‚
β”‚         β–Ό                                           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚
β”‚  β”‚         S3 Artifact Store        β”‚               β”‚
β”‚  β”‚  β€’ Model binaries                β”‚               β”‚
β”‚  β”‚  β€’ Training artifacts            β”‚               β”‚
β”‚  β”‚  β€’ Evaluation reports            β”‚               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚                                                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Model Registry Stages:

  • None β†’ Initial upload
  • Staging β†’ Passed automated tests
  • Production β†’ Approved for live traffic
  • Archived β†’ Deprecated versions

Layer 2: Kubeflow 8-Step Pipeline

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Kubeflow Pipeline (8 Steps)                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
β”‚  β”‚  Step 1 │──▢│  Step 2 │──▢│  Step 3 │──▢│  Step 4 β”‚              β”‚
β”‚  β”‚  Data   β”‚   β”‚  Pre-   β”‚   β”‚Training β”‚   β”‚  Eval   β”‚              β”‚
β”‚  β”‚  Valid  β”‚   β”‚ process β”‚   β”‚  (GPU)  β”‚   β”‚         β”‚              β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜              β”‚
β”‚                                                  β”‚                    β”‚
β”‚                                                  β–Ό                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
β”‚  β”‚  Step 8 │◀──│  Step 7 │◀──│  Step 6 │◀──│  Step 5 β”‚              β”‚
β”‚  β”‚  Prod   β”‚   β”‚  Integ  β”‚   β”‚ Staging β”‚   β”‚Register β”‚              β”‚
β”‚  β”‚ Deploy  β”‚   β”‚  Tests  β”‚   β”‚ Deploy  β”‚   β”‚         β”‚              β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
β”‚                                                                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
StepNamePurposeDuration
1Data ValidationSchema checks, null detection2 min
2PreprocessingTokenization, train/test split5 min
3TrainingFine-tune DistilBERT (GPU)45 min
4EvaluationCalculate accuracy, F1, confusion matrix3 min
5RegistrationRegister model in MLflow if metrics pass1 min
6Staging DeployDeploy to staging environment5 min
7Integration TestsRun E2E tests against staging10 min
8Production DeployBlue-green deployment to prod5 min

Total Pipeline Duration: ~76 minutes


Layer 3: Kubernetes Production Serving

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  Kubernetes Serving Architecture                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                   β”‚
β”‚  Internet β†’ Ingress β†’ LoadBalancer                               β”‚
β”‚                          β”‚                                        β”‚
β”‚                          β–Ό                                        β”‚
β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                             β”‚
β”‚              β”‚    Service (L4)     β”‚                             β”‚
β”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                             β”‚
β”‚                         β”‚                                         β”‚
β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                        β”‚
β”‚         β–Ό               β–Ό               β–Ό                         β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚    β”‚  Pod 1  β”‚    β”‚  Pod 2  β”‚    β”‚  Pod 3  β”‚                    β”‚
β”‚    β”‚ FastAPI β”‚    β”‚ FastAPI β”‚    β”‚ FastAPI β”‚                    β”‚
β”‚    β”‚DistilBERTβ”‚   β”‚DistilBERTβ”‚   β”‚DistilBERTβ”‚                   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β”‚         β”‚               β”‚               β”‚                         β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                        β”‚
β”‚                         β–Ό                                         β”‚
β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                             β”‚
β”‚              β”‚  HorizontalPodAuto  β”‚                             β”‚
β”‚              β”‚  scaler (HPA)       β”‚                             β”‚
β”‚              β”‚  Min: 2, Max: 5     β”‚                             β”‚
β”‚              β”‚  Target CPU: 70%    β”‚                             β”‚
β”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                             β”‚
β”‚                                                                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pod Specifications:

  • CPU: 2 cores (request), 4 cores (limit)
  • Memory: 4GB (request), 8GB (limit)
  • Model: DistilBERT (~250MB)
  • Framework: FastAPI + Uvicorn

Layer 4: Redis Semantic Caching

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 Redis Caching Strategy                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                         β”‚
β”‚  Request: "This product is amazing!"                   β”‚
β”‚                  β”‚                                      β”‚
β”‚                  β–Ό                                      β”‚
β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                              β”‚
β”‚         β”‚  Hash Query   β”‚                              β”‚
β”‚         β”‚  (SHA256)     β”‚                              β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜                              β”‚
β”‚                 β”‚                                       β”‚
β”‚                 β–Ό                                       β”‚
β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                              β”‚
β”‚         β”‚  Redis Lookup β”‚                              β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜                              β”‚
β”‚                 β”‚                                       β”‚
β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”                              β”‚
β”‚         β”‚               β”‚                               β”‚
β”‚    Cache Hit       Cache Miss                           β”‚
β”‚    (30%)           (70%)                                β”‚
β”‚         β”‚               β”‚                               β”‚
β”‚         β–Ό               β–Ό                               β”‚
β”‚    Return          Run Model                            β”‚
β”‚    Cached          Inference                            β”‚
β”‚    (5ms)           (400ms)                              β”‚
β”‚                         β”‚                               β”‚
β”‚                         β–Ό                               β”‚
β”‚                  Store in Cache                         β”‚
β”‚                  (TTL: 1 hour)                          β”‚
β”‚                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Cache Statistics:

  • Hit Rate: ~30%
  • Latency (cached): 5ms
  • Latency (uncached): 400ms
  • Average Latency: ~280ms
  • TTL: 1 hour
  • Max Cache Size: 10,000 entries

Integration Patterns & Code

Integration Patterns & Code Examples

CI/CD Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        CI/CD Pipeline Flow                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                      β”‚
β”‚  Developer Push                                                      β”‚
β”‚       β”‚                                                              β”‚
β”‚       β–Ό                                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                        β”‚
β”‚  β”‚ GitHub  │──────────────────────────────────────┐                 β”‚
β”‚  β”‚ Actions β”‚                                       β”‚                 β”‚
β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                                       β”‚                 β”‚
β”‚       β”‚                                            β”‚                 β”‚
β”‚       β–Ό                                            β–Ό                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”‚
β”‚  β”‚  Lint   │───▢│  Test   │───▢│  Build  │───▢│ Trigger β”‚           β”‚
β”‚  β”‚  Code   β”‚    β”‚  Unit   β”‚    β”‚  Docker β”‚   β”‚Kubeflow β”‚           β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜           β”‚
β”‚                                                    β”‚                 β”‚
β”‚                                                    β–Ό                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
β”‚  β”‚                 Kubeflow Pipeline                         β”‚      β”‚
β”‚  β”‚  Data Val β†’ Preprocess β†’ Train β†’ Eval β†’ Register         β”‚      β”‚
β”‚  β”‚  β†’ Staging β†’ Integration Tests β†’ Production              β”‚      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β”‚                                                                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Integration Points

  1. GitHub Actions β†’ Kubeflow: Trigger pipeline on code push
  2. Kubeflow β†’ MLflow: Log experiments, register models
  3. MLflow β†’ Kubernetes: Deploy registered models
  4. Kubernetes β†’ Prometheus: Export metrics
  5. Prometheus β†’ Grafana: Visualize dashboards

Environment Configuration

EnvironmentPurposeTrafficModel Version
DevelopmentTesting0%Latest
StagingPre-production validation0%Staging
ProductionLive users100%Production

Scaling & Production Considerations

Scaling & Production Considerations

Blue-Green Deployment Strategy

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Blue-Green Deployment                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                      β”‚
β”‚  Before Deployment:                                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                β”‚
β”‚  β”‚  LoadBalancer                    β”‚                                β”‚
β”‚  β”‚         β”‚                        β”‚                                β”‚
β”‚  β”‚         β–Ό                        β”‚                                β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚                               β”‚
β”‚  β”‚  β”‚ BLUE (v1.0) β”‚  β”‚ GREEN (v1.0)β”‚β”‚                               β”‚
β”‚  β”‚  β”‚  Active     β”‚  β”‚  Standby    β”‚β”‚                               β”‚
β”‚  β”‚  β”‚  100%       β”‚  β”‚  0%         β”‚β”‚                               β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚                               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                β”‚
β”‚                                                                      β”‚
β”‚  After Deployment:                                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                β”‚
β”‚  β”‚  LoadBalancer                    β”‚                                β”‚
β”‚  β”‚         β”‚                        β”‚                                β”‚
β”‚  β”‚         β–Ό                        β”‚                                β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚                               β”‚
β”‚  β”‚  β”‚ BLUE (v1.0) β”‚  β”‚ GREEN (v1.1)β”‚β”‚                               β”‚
β”‚  β”‚  β”‚  Standby    β”‚  β”‚  Active     β”‚β”‚                               β”‚
β”‚  β”‚  β”‚  0%         β”‚  β”‚  100%       β”‚β”‚                               β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚                               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                β”‚
β”‚                                                                      β”‚
β”‚  Rollback: Switch traffic back to BLUE if issues detected           β”‚
β”‚                                                                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Auto-Scaling Configuration

MetricTargetMin PodsMax Pods
CPU Utilization70%25
Memory Utilization80%25
Request Latency<500ms p9925

Performance Metrics

MetricValue
Model Latency (p50)350ms
Model Latency (p99)450ms
Cache Hit Rate30%
Cached Response Time5ms
Throughput100-500 RPS
Model Accuracy94%
Uptime SLA99.9%

Cost Breakdown (Monthly)

ComponentCost
Kubernetes (3-5 pods)$1,500
GPU Training (spot)$500
S3 Storage$100
Redis Cache$200
Monitoring Stack$100
MLflow Server$200
Total~$2,600

Trade-offs & Alternatives

Trade-offs & Alternatives

Why These Technology Choices?

Kubeflow vs Alternatives

FeatureKubeflowAirflowJenkins
ML-NativeYesNoNo
Kubernetes IntegrationNativeAdd-onAdd-on
Experiment TrackingBuilt-inExternalExternal
GPU SupportNativeManualManual
Learning CurveMediumLowLow
Best ForML PipelinesData PipelinesCI/CD

Decision: Kubeflow chosen for native ML support and Kubernetes integration.


MLflow vs Alternatives

FeatureMLflowWeights & BiasesNeptune
Open SourceYesNoNo
Self-HostedYesNoNo
CostFree$$$$$$$
Model RegistryYesYesYes
UI QualityGoodExcellentGood
Best ForCost-SensitiveEnterpriseResearch

Decision: MLflow chosen for cost ($0) and self-hosting capability.


DistilBERT vs Alternatives

ModelLatencyAccuracySize
BERT-base800ms96%440MB
DistilBERT400ms94%250MB
BERT-tiny100ms88%17MB

Decision: DistilBERT balances latency and accuracy for production.


Architecture Trade-offs

DecisionProsCons
Blue-Green (vs Canary)Simple rollback, no traffic splitting2x resources during deploy
Redis Cache (vs in-memory)Shared across pods, persistentNetwork hop latency
PostgreSQL for MLflowReliability, ACIDOperational overhead
Kubernetes HPA (vs custom)Built-in, well-testedLimited to CPU/memory metrics

Future Improvements

  1. Canary Deployments: Gradual rollout (10% β†’ 50% β†’ 100%)
  2. Feature Store: Feast for feature management
  3. A/B Testing: Model comparison in production
  4. Multi-Model Serving: Triton Inference Server
  5. Advanced Caching: Semantic similarity-based cache lookup

Your Solution

python
Auto-saves every 30s

Try solving the problem first before viewing the solution

0:00time spent