Skip to main content

spc--purchase-order--be

Overview​

  • Namespace: spc--purchase-order--be
  • Purpose: Sapoche Purchase Order Management Backend - PRODUCTION
  • Age: 195 days (~6.5 months, since April 2025)
  • Status: Active - Purchase order processing
  • Workloads: 5 deployments (all active)
  • Environment: PRODUCTION - Inventory and procurement management

Architecture​

Purchase order management system handling order creation, bulk uploads, and conversions:

  • Main Application: REST API backend (1 replica)
  • Event Consumers: Bulk upload processing, order conversion (2 deployments)
  • Worker: Batch job publisher (1 deployment)
  • Observability: OpenTelemetry collector for tracing

Auto-Scaling Configuration​

No Auto-Scaling Configured:

  • No HorizontalPodAutoscalers (HPAs)
  • No KEDA scaled objects
  • Fixed replica counts (all at 1 replica)

Workload Categories​

Main Application (1 deployment)​

NameReplicasStatusPurpose
spc--purchase-order--be--app--prod1/1RunningMain purchase order API

Event Consumers (2 deployments)​

NameReplicasStatusPurpose
consumer-bulk-upload-purchase-order1/1RunningBulk purchase order uploads
consumer-convert-purchase-order1/1RunningPurchase order conversions

Workers (1 deployment)​

NameReplicasStatusPurpose
wrk--batch-publisher1/1RunningBatch job publisher

Observability (1 deployment)​

NameReplicasStatusPurpose
spc--purchase-order--be-otel-collector1/1RunningOpenTelemetry trace collector

Services​

NameTypeCluster IPPortsNodePortPurpose
spc--purchase-order--be--app--prodNodePort10.8.19.1328030195Main purchase order API
spc--purchase-order--be-otel-collectorClusterIP10.8.23.2014317, 4318-OTLP trace collection

Access & Management​

View all resources:​

kubectl get all -n spc--purchase-order--be

Check main application:​

kubectl get pods -n spc--purchase-order--be | grep "app--prod"
kubectl logs -f deployment/spc--purchase-order--be--app--prod -n spc--purchase-order--be

Check consumers:​

# All consumers
kubectl get pods -n spc--purchase-order--be | grep consumer

# Bulk upload consumer
kubectl logs -f deployment/spc--purchase-order--be--consumer-bulk-upload-purchase-order--prod -n spc--purchase-order--be

# Convert consumer
kubectl logs -f deployment/spc--purchase-order--be--consumer-convert-purchase-order--prod -n spc--purchase-order--be

Check batch publisher:​

kubectl get pods -n spc--purchase-order--be | grep batch-publisher
kubectl logs -f deployment/spc--purchase-order--be--wrk--batch-publisher--prod -n spc--purchase-order--be

Restart services:​

# Restart main app
kubectl rollout restart deployment/spc--purchase-order--be--app--prod -n spc--purchase-order--be

# Restart specific consumer
kubectl rollout restart deployment/spc--purchase-order--be--consumer-bulk-upload-purchase-order--prod -n spc--purchase-order--be

# Restart all consumers
kubectl get deployments -n spc--purchase-order--be | grep consumer | awk '{print $1}' | xargs -I {} kubectl rollout restart deployment/{} -n spc--purchase-order--be

Monitoring​

Resource usage:​

kubectl top pods -n spc--purchase-order--be --sort-by=memory
kubectl top pods -n spc--purchase-order--be --sort-by=cpu

Events:​

kubectl get events -n spc--purchase-order--be --sort-by='.lastTimestamp' | head -20

Traces (OpenTelemetry):​

# Check OTEL collector
kubectl logs -f deployment/spc--purchase-order--be-otel-collector -n spc--purchase-order--be

# Port forward to access OTEL endpoints
kubectl port-forward -n spc--purchase-order--be deployment/spc--purchase-order--be-otel-collector 4317:4317

Data Flow​

Purchase Order Request
↓
spc--purchase-order--be--app--prod (NodePort 30195)
↓
Main Purchase Order API
↓
Database (external)
↓
Events Published to Message Queue
↓
Consumers Process Events
├─ Bulk Upload → consumer-bulk-upload-purchase-order
└─ Conversions → consumer-convert-purchase-order
↓
Batch Publisher Creates Background Jobs
↓
Purchase order processing, inventory updates

OpenTelemetry Tracing​

Application → OTEL Collector (4317/4318) → Backend (Grafana/Jaeger)

Purchase Order Workflow​

1. Purchase Order API​

  • Create purchase orders
  • Manage supplier orders
  • Track order status
  • Inventory management integration
  • Procurement workflows

2. Bulk Upload Processing​

  • Bulk purchase order uploads from Excel/CSV
  • consumer-bulk-upload-purchase-order processes upload events
  • Validation and data transformation
  • Batch order creation

3. Order Conversion​

  • Convert between order types
  • consumer-convert-purchase-order processes conversion events
  • Order format transformations
  • System integration conversions

4. Batch Publisher​

  • Creates background jobs for async processing
  • Handles large-scale order operations
  • Scheduled processing tasks

5. OpenTelemetry Tracing​

  • Distributed tracing for API requests
  • Performance monitoring
  • Request flow analysis

Production Considerations​

High Availability​

x Single Points of Failure:

  • Main API: 1 replica (no HA)
  • All consumers: 1 replica each
  • Batch publisher: 1 replica
  • OTEL collector: 1 replica

Recommendations​

  1. Main API Resilience:

    • Currently 1 replica (single point of failure)
    • Increase to 2+ replicas or add HPA
    • Critical for purchase order operations
  2. Add Auto-Scaling:

    • Consider HPA for main API
    • Add KEDA for consumers based on queue depth:
      • consumer-bulk-upload-purchase-order (bulk operations)
      • consumer-convert-purchase-order
  3. Consumer Resilience:

    • All consumers at 1 replica
    • Consider 2 replicas for:
      • consumer-bulk-upload-purchase-order (critical for bulk ops)
      • consumer-convert-purchase-order
  4. Recent Updates:

    • Very recent deployment: 20 hours ago
    • Active development/updates
    • Monitor stability after recent changes
  5. Monitoring Priorities:

    • API response times
    • Bulk upload processing success rates
    • Order conversion success rates
    • Consumer lag monitoring

Troubleshooting​

Main API issues:​

# Check API pod
kubectl get pods -n spc--purchase-order--be | grep "app--prod"

# Check logs
kubectl logs -f deployment/spc--purchase-order--be--app--prod -n spc--purchase-order--be --tail=100

# Test API endpoint
kubectl port-forward -n spc--purchase-order--be service/spc--purchase-order--be--app--prod 8080:80
# Access http://localhost:8080

Bulk upload issues:​

# Check bulk upload consumer
kubectl logs -f deployment/spc--purchase-order--be--consumer-bulk-upload-purchase-order--prod -n spc--purchase-order--be

# Check for upload errors
kubectl logs deployment/spc--purchase-order--be--consumer-bulk-upload-purchase-order--prod -n spc--purchase-order--be --tail=100 | grep -i "error\|fail\|upload"

# Restart consumer
kubectl rollout restart deployment/spc--purchase-order--be--consumer-bulk-upload-purchase-order--prod -n spc--purchase-order--be

Order conversion issues:​

# Check convert consumer
kubectl logs -f deployment/spc--purchase-order--be--consumer-convert-purchase-order--prod -n spc--purchase-order--be

# Check for conversion errors
kubectl logs deployment/spc--purchase-order--be--consumer-convert-purchase-order--prod -n spc--purchase-order--be --tail=100 | grep -i "error\|convert\|fail"

# Restart consumer
kubectl rollout restart deployment/spc--purchase-order--be--consumer-convert-purchase-order--prod -n spc--purchase-order--be

Batch publisher issues:​

# Check batch publisher
kubectl logs -f deployment/spc--purchase-order--be--wrk--batch-publisher--prod -n spc--purchase-order--be

# Check for job publishing errors
kubectl logs deployment/spc--purchase-order--be--wrk--batch-publisher--prod -n spc--purchase-order--be --tail=100 | grep -i "error\|batch\|publish"

# Restart batch publisher
kubectl rollout restart deployment/spc--purchase-order--be--wrk--batch-publisher--prod -n spc--purchase-order--be

Tracing issues:​

# Check OTEL collector
kubectl logs -f deployment/spc--purchase-order--be-otel-collector -n spc--purchase-order--be

# Check collector metrics
kubectl port-forward -n spc--purchase-order--be deployment/spc--purchase-order--be-otel-collector 8888:8888
# Access http://localhost:8888/metrics

Performance Metrics​

Current Scale​

  • Main API: 1 replica (no HA)
  • Consumers: 2 consumers at 1 replica each
  • Worker: 1 batch publisher
  • OTEL Collector: 1 replica
  • Total Active Pods: ~5 pods

Stability​

  • Namespace Age: 195 days (~6.5 months) - relatively new
  • Recent Updates: 20 hours ago (very active development)
  • All Single Replicas: No redundancy configured