sydepsystem design atlas

Video Upload & Transcode (YouTube-style)

Accept large uploads, process asynchronously, notify when ready.

IntermediateMedia
UploaderClientUpload ServiceComputeRaw StorageStorageUpload Complete EventMessagingTranscoding JobComputeRendition StorageStorageNotify UploaderMessaging

Large uploads go straight to object storage via a signed URL, an event triggers async transcoding into playback renditions, and the uploader is notified once processing completes -- keeping the upload path itself simple and fast.

When to use it

  • Users need to upload large files without the API server buffering the whole payload
  • Processing takes long enough that it must happen out-of-band from the upload request

Trade-offs

  • Content is not immediately playable; there is a processing delay after upload
  • Failed transcodes need a retry/notification path so uploads don't silently vanish

Components used

Web AppManaged App ServiceObject StorageEvent StreamBatch / Scheduled JobNotification Service

How it works

  • Large files are uploaded directly to object storage using pre-signed URLs, so bytes never pass through the application servers.
  • Upload completion emits an event that queues transcoding work, which runs asynchronously across a worker fleet.
  • The user is notified when processing finishes; the video is unavailable but the request never blocked.

Used in the wild

  • User-generated video platforms.
  • Podcast and audio processing pipelines.
  • Any large-file ingest where synchronous processing would time out.

Good to know

  • Transcoding is enormously CPU-intensive and is the dominant cost of these platforms, which is why the ladder is tuned per video rather than applied uniformly.
  • Resumable chunked upload matters more than it appears. A 4GB upload failing at 95% on a mobile connection is a user who does not try again.