惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
F
Fortinet All Blogs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
爱范儿
爱范儿
美团技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
有赞技术团队
有赞技术团队
博客园_首页
T
The Blog of Author Tim Ferriss
T
Tailwind CSS Blog
V
Visual Studio Blog
Jina AI
Jina AI
博客园 - Franky
量子位
MongoDB | Blog
MongoDB | Blog
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
aimingoo的专栏
aimingoo的专栏
M
MIT News - Artificial intelligence

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
How I Split My Livestream Archive at Shiftbloom Studio
Zimtzimt · 2026-06-03 · via DEV Community

With shiftbloom studio. I build tools and projects about a variety of experimental approaches to real-world problems.

The issue for such use-case often was how most small media systems start out: one big always-on recorder that keeps costing money even when nothing is happening.

For live capture you obviously need to stay ready at all times — sometimes you can’t risk losing the first minutes. But for everything else it’s complete overkill.


The Core Problem

Backfills, VOD downloads, clip imports, repairs and re-encodes are queue work. They can wait a few seconds, run on burst capacity, or even on a regular VPS or laptop. They don’t need the same always-hot infrastructure as the live recorder.

That’s why I split the system.

Instead of one large monolith, I deployed:

  • Observer cells — only for live streams (time-critical)
  • Harvest cells — for all queue processing (can be delayed)

The Three Roles

1. Mothership

A small control-plane cron job. It checks queue sizes, currently live channels and running observer tasks, then decides:

  • how many harvest cells should exist right now
  • which channels need an observer cell

It’s intentionally simple. The database remains the single source of truth.

2. Observer Cells

Each observer cell records exactly one live channel. It receives its assignment through environment variables:

+++env
OBSERVER_VOD_ID
OBSERVER_CHANNEL_ID
OBSERVER_CHANNEL_LOGIN
OBSERVER_CHANNEL_NAME
+++

It starts recording immediately, writes HLS segments to object storage, sends heartbeats, and waits a short standby window after the stream goes offline. This window is important because streams sometimes drop and reconnect quickly. Without it you end up with many small broken VOD fragments.

3. Harvest Cells

These handle all background work: downloading VODs, re-encoding, recovering broken files, etc. They can run anywhere Docker is available — AWS tasks, a small VPS, or even a spare laptop. They only need outbound access to Postgres and object storage.


What Changed

Previously I treated live recording and backlog processing as the same infrastructure problem. They are not. One is assignment-based, the other is throughput-based.

After the split I ran a large historical migration and ingested 15.5 TB of backfill data in just 36 hours — without dropping a single frame from live streams.

Situation Before After
No live channels Full recorder still running No observer cells
Empty queue Capacity still provisioned No harvest cells
Large backlog Everything slowed down Scale harvest cells instantly
Old archives Mixed with active data Easy to move to cold storage

The architecture actually became smaller and easier to reason about.


The Main Lesson

The biggest improvement wasn’t switching to a particular tool or platform. It was drawing a clear line between work that has to happen right now and work that only has to happen eventually.

Most VOD archive systems have both types of work. Once you treat them as separate patterns instead of forcing everything into one monolith, the system becomes much more natural. Like a small colony of specialized components that only spin up when they’re actually needed.

I built this at Shiftbloom Studio (which I’m currently running on my own) because VOD archives can sometimes record in weird ways and you need flexible, low-overhead infrastructure to deal with that.

Would love to hear if this approach helps anyone else facing similar issues.