Episode 3 of 20 in the **PPCDN Low-Latency Live Streaming Course* — building a self-hosted, low-latency live-streaming CDN from protocols to global delivery. Originally published on the PPCDN docs site; see the full course index for all episodes.*
| Recap | EP02 "The self-hosted CDN answer: PPCDN architecture overview" ended by naming the principle of content sovereignty and deferring the trade-offs to this episode |
|---|---|
| Next | EP04 "Transport showdown: RTMP / SRT / WHIP" |
0. Goals of this episode
By the end, the viewer should be able to:
- Break "content sovereignty" from a slogan into three concrete, judgeable risks: takedown risk, throttling risk, and data-sovereignty risk.
- State how far self-hosting can respond — not "self-hosting = no censorship" but "decision-making moves from a third party to yourself": two different propositions.
- Honestly list what self-hosting makes you responsible for — this episode is about trade-offs, not a one-sided list of benefits.
1. Opening hook (script notes)
Last episode closed with: "under your control" is a harder moat than any performance number.
That sounds like a slogan, so this episode unpacks it — which three risk classes "content
sovereignty" actually means, which ones self-hosting can and cannot block, and what
responsibility you take on to get that control.
2. Content sovereignty split into three concrete risks
EP01 §2.3 said "handing your lifeline to a third party you can't control". This episode splits
that into three separately judgeable risk points.
2.1 Takedown risk: can your business be shut off unilaterally
When you depend on a third-party live/RTC cloud, whether your business keeps running ultimately
depends on their terms of service, risk-control policy and commercial judgment — any of which can
change without prior negotiation. This isn't alarmism; it's an inherent feature of the contractual
structure of any "platform" service: terms that let the platform suspend or terminate an account
unilaterally are standard across nearly all cloud and content platforms, triggered by content
compliance judgments, payment risk, geopolitical shifts, or purely commercial strategy. Teams using
a third party are effectively transferring the decision "can the business keep running" to a party
whose decision process they can't see and over which they have no say.
2.2 Throttling risk: can your bandwidth/quality be degraded unilaterally
More common and harder to notice than a plain takedown is throttling: a third party can adjust
your bandwidth quota, node priority or service quality without terminating the service — your viewers
feel worse, but you may not even be able to tell immediately whether it's a network issue or the
provider's policy change. When self-hosting, node allocation and priority are entirely your own
scheduling logic — PPCDN's node pools are isolated per app and balance toward the node with the most
free capacity, and that logic is in your own code; there's no opaque "they quietly changed a
parameter" zone.
2.3 Data-sovereignty risk: which jurisdiction your data and nodes physically sit in
This is the most easily overlooked, yet consequential: where servers that store, process and forward
media actually are is an important factor in determining applicable law and cross-border transfer
obligations — but not the only one. The operator's location, where the data controller/processor
and users sit, the markets served, contractual arrangements and extraterritorial application of laws
can all create jurisdictional links; "servers in country X" cannot be simplified into "governed only
by X's law". When using a third-party cloud, also verify the specific region, sub-processors,
backup/log locations and cross-region DR paths — don't rely on the region name in the console alone.
3. How far self-hosting can respond: honest boundaries
3.1 Self-hosting isn't "no censorship", it's "the decision is yours"
This must be stated clearly, or the whole episode is marketing: self-hosting does not exempt you
from the laws of your jurisdiction; self-hosted or third-party, your business still follows the
regulatory requirements of where it's deployed and operated. What self-hosting changes isn't
"whether to comply" but "who makes the compliance decision and at what pace" — with a third party,
their risk-control policy decides for you and you accept it passively; self-hosted, you decide which
regions to deploy in, how long to retain data, and how to respond to regulatory requirements. The
decision comes back to you — and so does the responsibility.
3.2 Concrete mechanisms: regional deployment, node-pool isolation, configurable retention
Architecturally, PPCDN already has capabilities that directly serve "you decide where data lands":
-
Physical deployment location is entirely your own choice, and the isolation boundary is set
by the node pool: Origin/Edge nodes can be deployed at whatever physical location you pick —
each node carries a free-text
Regiontag (ppcenter/internal/models/node.go) so you can categorize it by city or continent for your own bookkeeping. One detail worth being honest about, since it's easy to oversell: ppcenter currently has no built-in "auto-lock by continent" mechanism that forcibly isolates traffic for you. The architecture design doc did plan amacroRegiondata model (Asia / Europe / Americas), but since 2026-09-20 actual Origin/Edge scheduling has worked as "filter by node pool, then balance within the pool toward whichever node has the most free capacity" — it no longer routes by region, andmacroRegionwas never actually implemented in the ppcenter code. In other words: "which regions you put nodes in" is your own physical-siting decision; "whether traffic crosses regions" has to be explicitly carved out by the node pool described next — you cannot assume the system will auto-lock traffic by continent for you. - Node pools are what actually create the scheduling boundary: an app can bind explicitly to its own pool; when not bound, the product policy may use the user's pool or the shared default pool. Scheduling filters by pool first, then balances within the pool toward whichever node has the most free capacity — but binding does not automatically equal physical exclusivity; isolation granularity depends on how the pools are divided. If you want "this app's traffic may only land on European nodes", you have to build a pool containing only European nodes and bind it explicitly — not expect the system to auto-group nodes by continent for you.
- Recording retention is configurable per app (1–90 days) with automatic expiry — how long data is kept is your product/compliance decision, not a provider default.
- A control-plane failure doesn't affect established connections (the decoupling in EP02 §2.2, §4.3): even if your own scheduling center fails, your own team fixes it — there's no extra uncertainty like "waiting for a third-party ticket queue".
3.3 What self-hosting makes you responsible for — it's no free lunch
If this episode covered only benefits, it would betray the theme of trade-offs. Self-hosting moves
all of the following, previously borne by a third party, onto you:
- Ongoing security and compliance operations: no third-party risk team judges content compliance, payment risk and regional regulatory changes for you; you need your own processes.
- 24×7 operations responsibility: node scaling, failure recovery, certificate renewal and version upgrades are your engineering team's job, not "file a ticket and wait". That includes watching your own capacity ceiling — a self-hosted 1 vCPU / 2GB node stayed stable the entire time up to 18 concurrent WHEP viewers (CPU ≤ 53%), but at the 19th viewer, CPU spiked to 88–103% within about 15 seconds and frames started dropping: a steep cliff, not a gentle degradation curve (measured 2026-10-08 at roughly 4ms RTT within the same data center — not representative of real internet paths). You have to measure, watch and set your own scaling thresholds for boundaries like this; there's no third-party cloud SLA backing you up.
- Multi-region legal and compliance knowledge: to truly use regional deployment, you must understand each region's specific requirements — an ongoing investment of knowledge and process.
-
Upfront engineering: on day one, a self-hosted setup is not as complete as a mature third-party
cloud; the capabilities in EP01–EP02 are the result of engineering investment, not automatic. The
good news is that this bar keeps dropping: the latest iteration of self-hosted node registration
(ppcenter v1.0.70) simplified it from "manually distribute and guard each node's own
nodeSecret" down to "register with just a license code", so you no longer have to hand-sync secrets between the console and node configs. But this kind of simplification is the result of ongoing iteration — it doesn't mean self-hosting is as hassle-free as a mature managed service from day one.
In one line: self-hosting takes back control of business continuity and compliance decisions, at
the price of taking back the corresponding responsibility too. For teams that depend heavily on
continuous availability and need fine control over their data/content, the trade is usually worth it;
for short-term, small-scale scenarios or ones without sensitive data, a third party's low barrier
may still be the better starting point.
4. Diagrams
4.1 Third-party dependency vs self-hosting: who holds the decision
[Depending on a third-party cloud]
Your business
│
▼
Third party's terms / risk-control policy / commercial judgment ← the decision lives here; you only accept it
│
▼
Takedown / throttling / data routing — whether and when, you don't decide
[Self-hosted]
Your business
│
▼
Your own deployment policy / compliance process / ops team ← the decision lives here, and so does the responsibility
│
▼
Takedown / throttling / data-routing risks still exist (regulatory requirements don't vanish),
but when and how to respond, and where nodes sit, is your call
4.2 The three layers of content sovereignty
Operational sovereignty Network sovereignty Data sovereignty
───────────────────────── ───────────────────────── ─────────────────────────
Can the business be shut Can bandwidth/quality be Which jurisdiction do data
off unilaterally? Who degraded unilaterally? and nodes physically sit in?
decides?
Third party: not yours Third party: opaque Third party: usually only
an abstract "region" option
Self-hosted: control back, Self-hosted: scheduling Self-hosted: precise choice
responsibility too logic in your own code of region and retention policy
4.3 Regional deployment: you carve the node pools, there's no built-in set of continents
[Business picks its own physical deployment locations
based on compliance/latency needs]
│
┌───────────────────────────┼───────────────────────────┐
│ │ │
[Node pool A: Europe only] [Node pool B: APAC only] [Node pool C: Americas only]
│ │ │
App must bind this pool App must bind this pool App must bind this pool
explicitly to land on explicitly to land on explicitly to land on
its Origin/Edge nodes its Origin/Edge nodes its Origin/Edge nodes
Diagram points (narration cues): these three pools aren't a built-in "continent" option in the
system — you build them yourself based on nodes' physical locations, then bind an app to one
explicitly (§3.2's second point); there is no macroRegion layer in ppcenter's current code that
auto-groups nodes by continent for you. Node pools not being interconnected by default is only part
of media-plane regionalization. To claim data stays in-region, you must also put the control plane,
TURN, relays, telemetry, logs, backups and personnel access into the data-flow diagram and audit;
specific legal obligations should be confirmed by professional advice in the applicable jurisdiction.
5. Wrap-up and next episode (script notes)
This episode split "content sovereignty" into takedown, throttling and data sovereignty, and
explained how far self-hosting responds — not exemption from censorship, but taking back both the
decision and the responsibility. That completes Module 0: the latency paradox, the retiring
protocols, the single-point and sovereignty paradox — all three dilemmas laid out, and PPCDN's
overall architectural response explained.From the next episode we enter Module 1, starting from the most basic transport protocols — how to
choose among RTMP, SRT and WHIP for ingest.
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.