| Creator Client | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: Verify and probe the committed source before creating rendition jobs. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Resumable Upload API. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “One rendition repeatedly fails” to the external caller. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Creator Client boundary before extracting or scaling it. |
| Resumable Upload API | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Fan out codec/resolution tasks with deterministic output keys and retry-safe jobs. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Creator Client from also owning the contract and failure behavior of Source Object Store. | Put protocol, authentication, quotas, and business transitions in one process. Acceptable at low scale, but it couples external traffic risk to domain releases. Here that simpler choice would couple “Manifest references a missing segment” to Creator Client. | Costs another hop, policy distribution, and a high-blast-radius fleet. Introduce it when many clients or services need one protocol and protection boundary. Measure the latency, saturation, lag, or mismatch at the Resumable Upload API boundary before extracting or scaling it. |
| Source Object Store | Owns authoritative versioned state or immutable evidence. In this design it participates in: Validate duration, keyframes, audio sync, and segment checksums for every rendition. | Defines the source of truth and commit boundary. It prevents Resumable Upload API from also owning the contract and failure behavior of Media Probe. | Let each service persist its own interpretation. That removes one clear commit boundary and makes retries, support, and reconciliation ambiguous. Here that simpler choice would couple “CDN region serves stale authorization” to Resumable Upload API. | Costs schema migration, replication, backup, and shard ownership. Split storage only when access patterns, retention, or compliance boundaries materially differ. Measure the latency, saturation, lag, or mismatch at the Source Object Store boundary before extracting or scaling it. |
| Media Probe | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Atomically publish one manifest version only after the minimum ladder is complete. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Source Object Store from also owning the contract and failure behavior of Workflow Orchestrator. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Upload resumes with conflicting part” to Source Object Store. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Media Probe boundary before extracting or scaling it. |
| Workflow Orchestrator | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Authorize playback, issue short-lived tokens, and let the player adapt from throughput/buffer. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Media Probe from also owning the contract and failure behavior of Transcode Fleet. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Live encoder falls behind wall clock” to Media Probe. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Workflow Orchestrator boundary before extracting or scaling it. |
| Transcode Fleet | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Verify and probe the committed source before creating rendition jobs. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Workflow Orchestrator from also owning the contract and failure behavior of Quality Validator. | Perform the work before acknowledging the caller. This gives simpler consistency but unbounded tail latency and fragile retries. Here that simpler choice would couple “One rendition repeatedly fails” to Workflow Orchestrator. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Transcode Fleet boundary before extracting or scaling it. |
| Quality Validator | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Fan out codec/resolution tasks with deterministic output keys and retry-safe jobs. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Transcode Fleet from also owning the contract and failure behavior of Rendition Store. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Manifest references a missing segment” to Transcode Fleet. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Quality Validator boundary before extracting or scaling it. |
| Rendition Store | Owns authoritative versioned state or immutable evidence. In this design it participates in: Validate duration, keyframes, audio sync, and segment checksums for every rendition. | Defines the source of truth and commit boundary. It prevents Quality Validator from also owning the contract and failure behavior of Manifest Publisher. | Let each service persist its own interpretation. That removes one clear commit boundary and makes retries, support, and reconciliation ambiguous. Here that simpler choice would couple “CDN region serves stale authorization” to Quality Validator. | Costs schema migration, replication, backup, and shard ownership. Split storage only when access patterns, retention, or compliance boundaries materially differ. Measure the latency, saturation, lag, or mismatch at the Rendition Store boundary before extracting or scaling it. |
| Manifest Publisher | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Atomically publish one manifest version only after the minimum ladder is complete. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Rendition Store from also owning the contract and failure behavior of Catalog DB. | Let each service persist its own interpretation. That removes one clear commit boundary and makes retries, support, and reconciliation ambiguous. Here that simpler choice would couple “Upload resumes with conflicting part” to Rendition Store. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Manifest Publisher boundary before extracting or scaling it. |
| Catalog DB | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Authorize playback, issue short-lived tokens, and let the player adapt from throughput/buffer. | Defines the source of truth and commit boundary. It prevents Manifest Publisher from also owning the contract and failure behavior of Playback API. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Live encoder falls behind wall clock” to Manifest Publisher. | Costs eventual consistency, schema evolution, replay tooling, idempotent consumers, and lag operations. Earn it when bursts or downstream failure must not block acknowledgment. Measure the latency, saturation, lag, or mismatch at the Catalog DB boundary before extracting or scaling it. |
| Playback API | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Verify and probe the committed source before creating rendition jobs. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Catalog DB from also owning the contract and failure behavior of Token / DRM Service. | Put protocol, authentication, quotas, and business transitions in one process. Acceptable at low scale, but it couples external traffic risk to domain releases. Here that simpler choice would couple “One rendition repeatedly fails” to Catalog DB. | Costs another hop, policy distribution, and a high-blast-radius fleet. Introduce it when many clients or services need one protocol and protection boundary. Measure the latency, saturation, lag, or mismatch at the Playback API boundary before extracting or scaling it. |
| Token / DRM Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Fan out codec/resolution tasks with deterministic output keys and retry-safe jobs. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Playback API from also owning the contract and failure behavior of Multi-CDN Router. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Manifest references a missing segment” to Playback API. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Token / DRM Service boundary before extracting or scaling it. |
| Multi-CDN Router | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Validate duration, keyframes, audio sync, and segment checksums for every rendition. | Removes repeated work from the latency-critical path. It prevents Token / DRM Service from also owning the contract and failure behavior of Viewer Player. | Read authoritative storage for every request. Simpler initially, but latency and source-of-truth load scale together and a hot key becomes a database incident. Here that simpler choice would couple “CDN region serves stale authorization” to Token / DRM Service. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (1M uploads/day · exabytes served · startup < 2 s) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Multi-CDN Router boundary before extracting or scaling it. |
| Viewer Player | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Atomically publish one manifest version only after the minimum ladder is complete. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Multi-CDN Router from also owning the contract and failure behavior of QoE Event Stream. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Upload resumes with conflicting part” to Multi-CDN Router. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Viewer Player boundary before extracting or scaling it. |
| QoE Event Stream | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Authorize playback, issue short-lived tokens, and let the player adapt from throughput/buffer. | Decouples bursts and failure from user acknowledgment. It prevents Viewer Player from also owning the contract and failure behavior of operators and repair tooling. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Live encoder falls behind wall clock” to Viewer Player. | Costs eventual consistency, schema evolution, replay tooling, idempotent consumers, and lag operations. Earn it when bursts or downstream failure must not block acknowledgment. Measure the latency, saturation, lag, or mismatch at the QoE Event Stream boundary before extracting or scaling it. |