| SDK / CLI | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Authorize bucket/key and create a version-scoped multipart upload. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Global Front Door. | 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 publishes before fragment durability” 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 SDK / CLI boundary before extracting or scaling it. |
| Global Front Door | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Checksum parts, erasure-code chunks, and place fragments across failure domains. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents SDK / CLI from also owning the contract and failure behavior of Auth / Bucket Policy. | 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 “Rack loss removes too many fragments” to SDK / CLI. | 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 Global Front Door boundary before extracting or scaling it. |
| Auth / Bucket Policy | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: At complete, validate ordered parts and atomically publish an immutable manifest/version. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Global Front Door from also owning the contract and failure behavior of Metadata Partition. | Embed policy in every caller. Rules then drift by deployment version and emergency changes require fleet-wide redeployment. Here that simpler choice would couple “Multipart complete races abort” to Global Front Door. | 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 Auth / Bucket Policy boundary before extracting or scaling it. |
| Metadata Partition | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Range reads map bytes to chunks, fetch sufficient fragments, verify, and optionally cache. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Auth / Bucket Policy from also owning the contract and failure behavior of Multipart Coordinator. | 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 “Corrupt fragment passes disk read” to Auth / Bucket Policy. | 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 Metadata Partition boundary before extracting or scaling it. |
| Multipart Coordinator | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Scrub continuously, repair under-replicated fragments, and tier versions by lifecycle policy. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Metadata Partition from also owning the contract and failure behavior of Placement Service. | 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 “Delete marker conflicts with versioned read” to Metadata Partition. | 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 Multipart Coordinator boundary before extracting or scaling it. |
| Placement Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Authorize bucket/key and create a version-scoped multipart upload. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Multipart Coordinator from also owning the contract and failure behavior of Chunk Gateway. | 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 publishes before fragment durability” to Multipart Coordinator. | 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 Placement Service boundary before extracting or scaling it. |
| Chunk Gateway | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Checksum parts, erasure-code chunks, and place fragments across failure domains. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Placement Service from also owning the contract and failure behavior of Storage Nodes. | 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 “Rack loss removes too many fragments” to Placement Service. | 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 Chunk Gateway boundary before extracting or scaling it. |
| Storage Nodes | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: At complete, validate ordered parts and atomically publish an immutable manifest/version. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Chunk Gateway from also owning the contract and failure behavior of Erasure Encoder. | 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 “Multipart complete races abort” to Chunk Gateway. | 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 Storage Nodes boundary before extracting or scaling it. |
| Erasure Encoder | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Range reads map bytes to chunks, fetch sufficient fragments, verify, and optionally cache. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Storage Nodes from also owning the contract and failure behavior of Manifest 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 “Corrupt fragment passes disk read” to Storage Nodes. | 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 Erasure Encoder boundary before extracting or scaling it. |
| Manifest Store | Owns authoritative versioned state or immutable evidence. In this design it participates in: Scrub continuously, repair under-replicated fragments, and tier versions by lifecycle policy. | Defines the source of truth and commit boundary. It prevents Erasure Encoder from also owning the contract and failure behavior of Replication / Repair. | 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 “Delete marker conflicts with versioned read” to Erasure Encoder. | 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 Manifest Store boundary before extracting or scaling it. |
| Replication / Repair | Executes idempotent asynchronous work under lease and retry policy. In this design it participates in: Authorize bucket/key and create a version-scoped multipart upload. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Manifest Store from also owning the contract and failure behavior of Integrity Scrubber. | Perform the work before acknowledging the caller. This gives simpler consistency but unbounded tail latency and fragile retries. Here that simpler choice would couple “Manifest publishes before fragment durability” to Manifest Store. | Costs leases, checkpoints, retries, DLQs, and lag operations. Separate once execution time or burstiness no longer fits the request deadline. Measure the latency, saturation, lag, or mismatch at the Replication / Repair boundary before extracting or scaling it. |
| Integrity Scrubber | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Checksum parts, erasure-code chunks, and place fragments across failure domains. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Replication / Repair from also owning the contract and failure behavior of Lifecycle Tiering. | 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 “Rack loss removes too many fragments” to Replication / Repair. | 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 Integrity Scrubber boundary before extracting or scaling it. |
| Lifecycle Tiering | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: At complete, validate ordered parts and atomically publish an immutable manifest/version. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Integrity Scrubber from also owning the contract and failure behavior of Event Notifications. | 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 “Multipart complete races abort” to Integrity Scrubber. | 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 Lifecycle Tiering boundary before extracting or scaling it. |
| Event Notifications | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Range reads map bytes to chunks, fetch sufficient fragments, verify, and optionally cache. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Lifecycle Tiering from also owning the contract and failure behavior of Range Read Cache. | 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 “Corrupt fragment passes disk read” to Lifecycle Tiering. | 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 Event Notifications boundary before extracting or scaling it. |
| Range Read Cache | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Scrub continuously, repair under-replicated fragments, and tier versions by lifecycle policy. | Removes repeated work from the latency-critical path. It prevents Event Notifications from also owning the contract and failure behavior of operators and repair tooling. | 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 “Delete marker conflicts with versioned read” to Event Notifications. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (Exabytes · 11 nines durability · objects up to TBs) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Range Read Cache boundary before extracting or scaling it. |