Skip to main content

Architecture Overview

This document provides a comprehensive overview of the FeelyFeely CDN architecture, including system design, components, data flow, and scalability considerations.

High-Level Architecture

graph TB
subgraph "Client Layer"
CA[Client Applications]
WA[Web Applications]
MA[Mobile Apps]
end

subgraph "CDN Layer"
LB[Load Balancer]
API[Flask API Server]
GU[Gunicorn Workers]
end

subgraph "Processing Layer"
UC[Uploadcare Service]
WM[Watermark Processor]
CV[OpenCV Engine]
end

subgraph "Storage Layer"
DS[DigitalOcean Spaces]
UAS[User Asset Storage]
MDS[Mobile Device Storage]
VPS[Vehicle Photo Storage]
end

subgraph "Database Layer"
MY[MySQL Database]
MG[MongoDB Instance]
KC[Keycloak Auth]
end

CA --> LB
WA --> LB
MA --> LB
LB --> API
API --> GU
API --> UC
API --> WM
WM --> CV
API --> DS
DS --> UAS
DS --> MDS
DS --> VPS
API --> MY
API --> MG
API --> KC

System Components

1. Application Layer

Flask Application (app.py)

  • Role: Core application factory
  • Features: CORS enabled, modular blueprint registration
  • Configuration: Development and production modes

Server Module (server.py)

  • Role: Main entry point and route definitions
  • Features: Default endpoints, blueprint registration
  • Endpoints: Health check, service information

WSGI Gateway (wsgi.py)

  • Role: Production server interface
  • Features: Gunicorn compatibility, worker process management

2. Database Layer

MySQL Database (db_config.py, dbutils/mysql.py)

  • Primary Database: Main application data
  • Business Database: Business-specific data
  • Features:
    • Connection pooling
    • Dictionary cursor support
    • Multi-database architecture
    • SQLAlchemy integration

MongoDB (dbutils/mongodb.py)

  • Role: Document storage and flexible data models
  • Features:
    • SSL/TLS encrypted connections
    • Aggregation pipeline support
    • Upsert operations
    • Join operations across collections
    • Error handling and logging

3. Storage Layer

DigitalOcean Spaces (models/digitalocean/spaces.py)

  • Architecture: S3-compatible object storage
  • Buckets:
    • ff.user.assets: User-uploaded content
    • ff.organization.assets: Organization assets
    • ff.mobiledevice.photos: Mobile device photos
    • ff.vehicle.photos: Vehicle images

Features:

  • Presigned URL generation
  • File existence checking
  • Multi-region support
  • Automatic retry mechanisms

4. Image Processing Pipeline

Uploadcare Integration (models/image/uploadcare/)

  • Primary Processor: Cloud-based image processing
  • Features:
    • File upload and storage
    • Real-time transformations
    • Format optimization
    • Quality adjustment
    • CDN distribution

Watermark Engine (models/image/watermark/watermark_embed.py)

  • Technology: OpenCV + Pillow
  • Intelligence: Brightness-based logo selection
  • Features:
    • Critical area detection (faces, text, edges)
    • Optimal positioning algorithm
    • Real-time processing
    • Multiple logo support

Data Flow Architecture

1. Image Request Flow

sequenceDiagram
participant C as Client
participant API as Flask API
participant DO as DigitalOcean Spaces
participant UC as Uploadcare
participant WM as Watermark Engine

C->>API: GET /image/{bucket}/{uuid}/{operation}/{file}
API->>DO: Check if processed image exists

alt Image exists
DO->>API: Return processed image
API->>WM: Apply watermark
WM->>API: Return watermarked image
API->>C: Return final image
else Image doesn't exist
API->>DO: Fetch original image
DO->>API: Return original image
API->>UC: Upload for processing
UC->>UC: Apply transformations
UC->>API: Return processed image
API->>DO: Store processed image
API->>WM: Apply watermark
WM->>API: Return watermarked image
API->>C: Return final image
end

2. Database Operations Flow

graph LR
subgraph "Application Logic"
AL[API Endpoints]
end

subgraph "Database Abstraction"
MYSQL[MySQL Utils]
MONGO[MongoDB Utils]
end

subgraph "Database Connections"
MYC[MySQL Connection]
MGC[MongoDB Connection]
end

subgraph "Data Storage"
MYD[(MySQL Databases)]
MGD[(MongoDB Collections)]
end

AL --> MYSQL
AL --> MONGO
MYSQL --> MYC
MONGO --> MGC
MYC --> MYD
MGC --> MGD

Scalability Architecture

1. Horizontal Scaling

Worker Process Scaling

# gunicorn_config.py
workers = (2 * cpu_count()) + 1
worker_class = 'gevent'
worker_connections = 1000

Database Scaling

  • MySQL: Master-slave replication support
  • MongoDB: Replica set configuration
  • Connection Pooling: Efficient resource utilization

2. Vertical Scaling

Resource Optimization

  • Memory: Efficient image processing buffering
  • CPU: Multi-threaded image operations
  • I/O: Asynchronous file operations

3. Caching Strategy

Multi-Level Caching

graph TD
subgraph "Caching Layers"
CDN[CDN Edge Cache]
APP[Application Cache]
DB[Database Cache]
FS[File System Cache]
end

CLIENT[Client Request] --> CDN
CDN --> APP
APP --> DB
DB --> FS
FS --> STORAGE[Storage Backend]

Security Architecture

1. Authentication & Authorization

Keycloak Integration

  • Single Sign-On: Centralized authentication
  • JWT Tokens: Stateless authentication
  • Role-Based Access: Fine-grained permissions
graph LR
CLIENT[Client App] --> KC[Keycloak Server]
KC --> JWT[JWT Token]
JWT --> API[CDN API]
API --> AUTHZ[Authorization Check]
AUTHZ --> RESOURCE[Protected Resource]

2. Data Protection

Transport Security

  • HTTPS/TLS: All communications encrypted
  • Certificate Management: Automated cert renewal
  • MongoDB SSL: Database connections secured

Storage Security

  • Bucket Policies: Restricted access controls
  • Presigned URLs: Time-limited access
  • Encrypted Storage: Data at rest encryption

3. Input Validation

Request Sanitization

# Example from validation utilities
class Validation:
def sanitize_filename(self, filename):
# Remove dangerous characters
# Validate file extensions
# Check file size limits

Performance Architecture

1. Image Processing Optimization

Processing Pipeline

  • Lazy Loading: Process images on-demand
  • Caching: Store processed versions
  • Format Optimization: Automatic format selection
  • Quality Adjustment: Dynamic quality levels

2. Database Optimization

Query Optimization

  • Indexed Queries: Optimized database indexes
  • Connection Pooling: Efficient resource usage
  • Query Caching: Reduce database load

3. Network Optimization

Content Delivery

  • Edge Caching: Global content distribution
  • Compression: Automatic image compression
  • HTTP/2: Multiplexed connections

Monitoring & Observability

1. Application Monitoring

Health Checks

@app.route('/health')
def health_check():
return {
"status": "healthy",
"services": {
"mysql": check_mysql_connection(),
"mongodb": check_mongodb_connection(),
"spaces": check_spaces_connection()
}
}

2. Performance Metrics

Key Performance Indicators

  • Response Time: API endpoint latency
  • Throughput: Requests per second
  • Error Rate: Failed request percentage
  • Cache Hit Ratio: Caching efficiency

3. Logging Strategy

Structured Logging

import logging

logging.basicConfig(level=logging.ERROR)
logger = logging.getLogger(__name__)

# Error tracking with context
logger.error("Image processing failed", extra={
"uuid": image_uuid,
"operation": operation,
"error_type": type(e).__name__
})

Deployment Architecture

1. Environment Configuration

Multi-Environment Support

  • Development: Local development setup
  • Staging: Pre-production testing
  • Production: High-availability deployment

2. Infrastructure as Code

Container Strategy

# Multi-stage Docker build
FROM python:3.11-slim as base
# System dependencies installation
# Application setup and optimization

3. CI/CD Pipeline

Deployment Flow

graph LR
DEV[Development] --> TEST[Testing]
TEST --> BUILD[Build Image]
BUILD --> DEPLOY[Deploy to Staging]
DEPLOY --> VALIDATE[Validation Tests]
VALIDATE --> PROD[Production Deploy]

Configuration Management

1. Environment Variables

Configuration Categories

  • Database: Connection strings and credentials
  • Storage: DigitalOcean Spaces configuration
  • Processing: Uploadcare API keys
  • Authentication: Keycloak settings

2. Secrets Management

Security Best Practices

  • Environment Separation: Different keys per environment
  • Key Rotation: Regular credential updates
  • Access Control: Limited secret access

Error Handling & Recovery

1. Fault Tolerance

Resilience Patterns

  • Circuit Breakers: Prevent cascade failures
  • Retry Logic: Automatic retry with backoff
  • Graceful Degradation: Fallback mechanisms

2. Disaster Recovery

Backup Strategy

  • Database Backups: Automated daily backups
  • Storage Replication: Cross-region redundancy
  • Configuration Backups: Infrastructure state preservation

Future Architecture Considerations

1. Scalability Enhancements

Microservices Migration

  • Service Decomposition: Separate processing services
  • API Gateway: Centralized routing and authentication
  • Event-Driven Architecture: Asynchronous processing

2. Performance Improvements

Advanced Caching

  • Redis Integration: Distributed caching layer
  • Edge Computing: Closer processing to users
  • ML-Based Optimization: Intelligent image processing

3. Technology Upgrades

Modern Stack Integration

  • Kubernetes: Container orchestration
  • Service Mesh: Advanced networking
  • Observability Tools: Enhanced monitoring