Traffic scaling economics · July 18, 2026
Egress, images, CDNs, and queues: the expensive shape of growing traffic
Traffic does not turn into infrastructure cost at one fixed rate. Payload size, cache hit ratio, image variants, upload bursts, worker throughput, and object-store operations decide whether a launch costs dollars or creates a backlog and a four-figure transfer bill.
Method
What this comparison measures
- Model public transfer separately from storage, request operations, image transformations, and application compute.
- Use four explicit traffic points and a 3 MB average uncached response; change either assumption to critique the result.
- Use published Supabase and Cloudflare rates checked July 18, 2026; taxes, regional exceptions, and enterprise discounts are excluded.
- Treat queue charts as deterministic capacity models, not measurements from a particular customer application.
Payload size is a traffic multiplier
One million page views at 3 MB each transfer roughly 3 TB before protocol overhead and repeat downloads. Reducing the average response to 1 MB removes about 2 TB without changing CPU, database, or user count. For content products, byte budgeting can dominate server tuning.
Supabase currently documents $0.09 per GB of uncached egress and $0.03 per GB of cached egress beyond separate 250 GB Pro allowances. Cloudflare R2 documents no Internet egress charge, but storage and Class A or B operations still bill, and connecting another metered service can add its own charge.[1][2]
The graph isolates transfer only. It assumes 3 MB per visit, a paid Supabase organization, and no compression change as traffic grows. R2's zero line does not mean a zero storage system bill.
An image pipeline is a capacity system
Responsive markup prevents a phone from downloading a desktop hero. Modern formats and quality settings reduce bytes further. Visual content, browser support, and the quality target change the result, so measure production images instead of assuming one compression ratio.[4][5]
Cloudflare Images counts unique transformations, stored images, and delivered images differently. Its Free plan currently includes 5,000 unique transformations; new transformations return an error after the limit while cached variants continue. Paid delivery counts every image requested by the browser.[3]
The chart uses one illustrative 2.4 MB source photo. It is not a benchmark of codecs. Its purpose is to show why resizing to display dimensions is usually a larger first win than switching formats while preserving an oversized canvas.
Uploads should not hold the web request hostage
A server that proxies a 500 MB upload consumes inbound bandwidth, an application connection, memory buffers, and often outbound bandwidth to object storage. A time-limited presigned URL lets the client upload directly to a specific object without receiving general storage credentials.[6]
Image decoding, virus scanning, transcription, and derivative generation are bounded worker tasks. The web request should validate intent and enqueue work; workers should pull at a controlled rate. This is not a Sharp-specific recommendation—Sharp is one possible image worker, while queue admission and concurrency are system properties.
A queue absorbs a burst only when its drain rate eventually exceeds the arrival rate. If work arrives at 5,000 jobs per minute and workers complete 1,000, the backlog grows by 4,000 each minute. Adding a queue without a capacity and expiry policy merely delays the outage.
Measure the cache and queue as product behavior
A high cache hit ratio can move traffic away from the origin, but stale or uncacheable personalized responses still reach compute. Record response bytes, cache status, origin bytes, transformation count, object operations, and user-visible freshness together.
For asynchronous work, publish accepted, started, completed, failed, retried, expired, and dead-letter counts. A fast HTTP 202 with a twelve-hour backlog is not a fast product.
Amazon's Builders' Library recommends admission control before a queue becomes impossible to drain. Prioritization, load shedding, and bounded retries belong in the launch plan too.[7][8]
- Set a byte budget for each page and API operation alongside the request-rate target.
- Track cache hit ratio by object class and count origin bytes after CDN caching.
- Pre-generate common image variants; bound arbitrary transformation dimensions.
- Upload large objects directly to storage with short-lived, narrowly scoped credentials.
- Set queue age and completion-time SLAs alongside HTTP latency.
- Load test burst arrival, sustained drain, retries, and poison jobs in an isolated contour.
Source register
Specifications and prices change. The links make this snapshot auditable.
Sources and commercial facts were checked on 2026-07-18. Prices exclude tax unless the source says otherwise.
- Manage Egress usage ↗Supabase · billing
- Cloudflare R2 pricing ↗Cloudflare · pricing
- Cloudflare Images pricing ↗Cloudflare · pricing
- Image performance ↗web.dev · product
- Responsive images ↗web.dev · product
- Uploading objects with presigned URLs ↗Amazon Web Services · product
- Avoiding insurmountable queue backlogs ↗Amazon Web Services · product
- Avoiding overload in distributed systems ↗Amazon Web Services · product