| App SDK / Agent | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: Batch/compress at the agent and spill to bounded disk when collectors fail. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Local Spool. | 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 “Logging storm consumes service disk” 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 App SDK / Agent boundary before extracting or scaling it. |
| Local Spool | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Collectors authenticate tenant, enforce byte/cardinality quotas, and append durably. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents App SDK / Agent from also owning the contract and failure behavior of Regional Collector. | 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 “Parser poison event blocks partition” to App SDK / Agent. | 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 Local Spool boundary before extracting or scaling it. |
| Regional Collector | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Parse against a schema, redact secrets, and route time-partitioned segments to indexers. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Local Spool from also owning the contract and failure behavior of Tenant Quota. | 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 “Tenant query fans across every shard” to Local Spool. | 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 Regional Collector boundary before extracting or scaling it. |
| Tenant Quota | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Serve recent indexed search; federate archived scans asynchronously for old windows. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Regional Collector from also owning the contract and failure behavior of Durable Ingest Log. | 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 “Secret reaches archive before redaction” to Regional Collector. | 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 Tenant Quota boundary before extracting or scaling it. |
| Durable Ingest Log | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Evaluate alert windows from durable offsets and dedupe notifications by incident key. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Tenant Quota from also owning the contract and failure behavior of Parser / Redactor. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Alert evaluator replays and duplicates pages” to Tenant Quota. | 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 Durable Ingest Log boundary before extracting or scaling it. |
| Parser / Redactor | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Batch/compress at the agent and spill to bounded disk when collectors fail. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Durable Ingest Log from also owning the contract and failure behavior of Schema Registry. | 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 “Logging storm consumes service disk” to Durable Ingest Log. | 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 Parser / Redactor boundary before extracting or scaling it. |
| Schema Registry | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Collectors authenticate tenant, enforce byte/cardinality quotas, and append durably. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Parser / Redactor from also owning the contract and failure behavior of Hot Indexer. | 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 “Parser poison event blocks partition” to Parser / Redactor. | 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 Schema Registry boundary before extracting or scaling it. |
| Hot Indexer | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Parse against a schema, redact secrets, and route time-partitioned segments to indexers. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Schema Registry from also owning the contract and failure behavior of Search Shards. | 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 “Tenant query fans across every shard” to Schema Registry. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (20 TB/day · million events/s · seconds-to-search) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Hot Indexer boundary before extracting or scaling it. |
| Search Shards | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Serve recent indexed search; federate archived scans asynchronously for old windows. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Hot Indexer from also owning the contract and failure behavior of Trace Correlator. | 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 “Secret reaches archive before redaction” to Hot Indexer. | 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 Search Shards boundary before extracting or scaling it. |
| Trace Correlator | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Evaluate alert windows from durable offsets and dedupe notifications by incident key. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Search Shards from also owning the contract and failure behavior of Alert Evaluator. | 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 “Alert evaluator replays and duplicates pages” to Search Shards. | 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 Trace Correlator boundary before extracting or scaling it. |
| Alert Evaluator | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Batch/compress at the agent and spill to bounded disk when collectors fail. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Trace Correlator from also owning the contract and failure behavior of Object Archive. | 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 “Logging storm consumes service disk” to Trace Correlator. | 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 Alert Evaluator boundary before extracting or scaling it. |
| Object Archive | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Collectors authenticate tenant, enforce byte/cardinality quotas, and append durably. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Alert Evaluator from also owning the contract and failure behavior of Query 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 “Parser poison event blocks partition” to Alert Evaluator. | 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 Object Archive boundary before extracting or scaling it. |
| Query Gateway | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Parse against a schema, redact secrets, and route time-partitioned segments to indexers. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Object Archive from also owning the contract and failure behavior of Retention Compactor. | 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 “Tenant query fans across every shard” to Object Archive. | 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 Query Gateway boundary before extracting or scaling it. |
| Retention Compactor | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Serve recent indexed search; federate archived scans asynchronously for old windows. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Query Gateway 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 “Secret reaches archive before redaction” to Query 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 Retention Compactor boundary before extracting or scaling it. |