| System Call API | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Resolve mount and path components through dentry/inode cache with permission checks. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of VFS Layer. | 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 “Power fails during rename” to the external caller. | 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 System Call API boundary before extracting or scaling it. |
| VFS Layer | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Map file offsets to extents and serve reads/writes through page cache. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents System Call API from also owning the contract and failure behavior of Path Resolver. | 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 “Journal commits metadata before file data” to System Call 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 VFS Layer boundary before extracting or scaling it. |
| Path Resolver | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Allocate/free blocks and update inode/directory metadata inside journal transaction. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents VFS Layer from also owning the contract and failure behavior of Mount Table. | 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 “Hard link survives unlink race” to VFS Layer. | 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 Path Resolver boundary before extracting or scaling it. |
| Mount Table | Owns authoritative versioned state or immutable evidence. In this design it participates in: fsync orders data and journal commit according to durability contract. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Path Resolver from also owning the contract and failure behavior of Dentry / Inode 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 “Free-space bitmap diverges” to Path Resolver. | 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 Mount Table boundary before extracting or scaling it. |
| Dentry / Inode Cache | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: On crash replay committed journal, discard incomplete intents, then scrub allocation/checksum state. | Removes repeated work from the latency-critical path. It prevents Mount Table from also owning the contract and failure behavior of Permission Checker. | 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 “Snapshot COW exhausts capacity” to Mount Table. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (Billions files · TB volumes · crash-consistent metadata) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Dentry / Inode Cache boundary before extracting or scaling it. |
| Permission Checker | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Resolve mount and path components through dentry/inode cache with permission checks. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Dentry / Inode Cache from also owning the contract and failure behavior of Directory B-Tree. | 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 “Power fails during rename” to Dentry / Inode Cache. | 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 Permission Checker boundary before extracting or scaling it. |
| Directory B-Tree | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Map file offsets to extents and serve reads/writes through page cache. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Permission Checker from also owning the contract and failure behavior of Inode Table. | 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 “Journal commits metadata before file data” to Permission Checker. | 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 Directory B-Tree boundary before extracting or scaling it. |
| Inode Table | Owns authoritative versioned state or immutable evidence. In this design it participates in: Allocate/free blocks and update inode/directory metadata inside journal transaction. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Directory B-Tree from also owning the contract and failure behavior of Extent Mapper. | 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 “Hard link survives unlink race” to Directory B-Tree. | 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 Inode Table boundary before extracting or scaling it. |
| Extent Mapper | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: fsync orders data and journal commit according to durability contract. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Inode Table from also owning the contract and failure behavior of Block Allocator. | 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 “Free-space bitmap diverges” to Inode Table. | 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 Extent Mapper boundary before extracting or scaling it. |
| Block Allocator | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: On crash replay committed journal, discard incomplete intents, then scrub allocation/checksum state. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Extent Mapper from also owning the contract and failure behavior of Page 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 “Snapshot COW exhausts capacity” to Extent Mapper. | 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 Block Allocator boundary before extracting or scaling it. |
| Page Cache | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Resolve mount and path components through dentry/inode cache with permission checks. | Removes repeated work from the latency-critical path. It prevents Block Allocator from also owning the contract and failure behavior of Writeback Worker. | 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 “Power fails during rename” to Block Allocator. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (Billions files · TB volumes · crash-consistent metadata) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Page Cache boundary before extracting or scaling it. |
| Writeback Worker | Executes idempotent asynchronous work under lease and retry policy. In this design it participates in: Map file offsets to extents and serve reads/writes through page cache. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Page Cache from also owning the contract and failure behavior of Metadata Journal. | Perform the work before acknowledging the caller. This gives simpler consistency but unbounded tail latency and fragile retries. Here that simpler choice would couple “Journal commits metadata before file data” to Page Cache. | 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 Writeback Worker boundary before extracting or scaling it. |
| Metadata Journal | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Allocate/free blocks and update inode/directory metadata inside journal transaction. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Writeback Worker from also owning the contract and failure behavior of Snapshot / COW. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Hard link survives unlink race” to Writeback Worker. | 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 Metadata Journal boundary before extracting or scaling it. |
| Snapshot / COW | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: fsync orders data and journal commit according to durability contract. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Metadata Journal from also owning the contract and failure behavior of Fsck / Scrubber. | 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 “Free-space bitmap diverges” to Metadata Journal. | 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 Snapshot / COW boundary before extracting or scaling it. |
| Fsck / Scrubber | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: On crash replay committed journal, discard incomplete intents, then scrub allocation/checksum state. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Snapshot / COW from also owning the contract and failure behavior of operators and repair tooling. | 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 “Snapshot COW exhausts capacity” to Snapshot / COW. | 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 Fsck / Scrubber boundary before extracting or scaling it. |