Skip to content

Architecture

This page explains how requests flow and why long-running requests cause RAM pressure.

Request Flow (High Level)

mermaid
flowchart LR
  U[User Browser] --> CF[Cloudflare Edge]
  CF --> NG[Nginx]
  NG --> FPM[PHP-FPM Worker]
  FPM --> APP[Laravel App]
  APP --> NG
  NG --> CF
  CF --> U

What matters

  • Cloudflare CF-Ray shows Edge location, not server location.
  • PHP-FPM handles one request per worker.
  • Memory used by a worker is held until request completes.

Memory Pressure Model

mermaid
flowchart TD
  A[Request arrives] --> B[PHP-FPM worker allocated]
  B --> C[Worker holds RAM during execution]
  C --> D{Request completes in time?}
  D -- Yes --> E[Response sent, worker reused]
  D -- No --> F[Timeout or OOM risk increases]
  F --> G[Linux OOM-killer may kill php-fpm]
  G --> H[Nginx sees: Connection reset by peer]

Key Formula

! Memory Pressure = (Avg RAM per request) × (Concurrency) × (Time held)

Where Heavy Work Belongs

mermaid
sequenceDiagram
  participant User
  participant Web as Web Request
  participant Q as Queue
  participant Worker as Worker

  User->>Web: HTTP request
  Web->>Q: Dispatch Job
  Web-->>User: 202 Accepted / "Processing"
  Worker->>Q: Pick Job
  Worker->>Worker: Heavy processing
  Worker-->>Q: Done