docs: clarify default data flow
This commit is contained in:
@@ -154,6 +154,8 @@ source of truth for historical queries.
|
|||||||
|
|
||||||
## Data Flow
|
## Data Flow
|
||||||
|
|
||||||
|
Default production flow:
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
vehicle["Vehicles / Platforms"] --> ingest["Protocol apps"]
|
vehicle["Vehicles / Platforms"] --> ingest["Protocol apps"]
|
||||||
@@ -161,12 +163,14 @@ flowchart LR
|
|||||||
ingest --> kafka["Kafka<br/>event + raw envelopes"]
|
ingest --> kafka["Kafka<br/>event + raw envelopes"]
|
||||||
kafka --> history["vehicle-history-app"]
|
kafka --> history["vehicle-history-app"]
|
||||||
kafka --> analytics["vehicle-analytics-app"]
|
kafka --> analytics["vehicle-analytics-app"]
|
||||||
kafka --> state["vehicle-state-service"]
|
|
||||||
history --> tdengine["TDengine<br/>raw_frames + locations"]
|
history --> tdengine["TDengine<br/>raw_frames + locations"]
|
||||||
analytics --> mysql["MySQL<br/>vehicle_stat_metric"]
|
analytics --> mysql["MySQL<br/>vehicle_stat_metric"]
|
||||||
state --> redisState["Redis<br/>latest state"]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Optional latest-state flow, enabled only with `-Poptional-latest-state`, consumes
|
||||||
|
the same Kafka envelopes and rebuilds Redis snapshots outside the default
|
||||||
|
production deployment.
|
||||||
|
|
||||||
## Failure Handling
|
## Failure Handling
|
||||||
|
|
||||||
- Protocol apps continue accepting traffic when history, analytics, or Redis
|
- Protocol apps continue accepting traffic when history, analytics, or Redis
|
||||||
|
|||||||
@@ -494,6 +494,7 @@ class MavenModuleProfileTest {
|
|||||||
@Test
|
@Test
|
||||||
void productionDocsMatchCompactHistoryAndJt808OnlyAnalyticsSurface() throws Exception {
|
void productionDocsMatchCompactHistoryAndJt808OnlyAnalyticsSurface() throws Exception {
|
||||||
String moduleDataFlow = Files.readString(repositoryRoot().resolve("docs/module-data-flow.html"));
|
String moduleDataFlow = Files.readString(repositoryRoot().resolve("docs/module-data-flow.html"));
|
||||||
|
String targetArchitecture = Files.readString(repositoryRoot().resolve("docs/target-architecture.md"));
|
||||||
String tdengineVerification = Files.readString(repositoryRoot()
|
String tdengineVerification = Files.readString(repositoryRoot()
|
||||||
.resolve("docs/operations/vehicle-ingest-tdengine-verification.md"));
|
.resolve("docs/operations/vehicle-ingest-tdengine-verification.md"));
|
||||||
String runbook = Files.readString(repositoryRoot()
|
String runbook = Files.readString(repositoryRoot()
|
||||||
@@ -511,6 +512,10 @@ class MavenModuleProfileTest {
|
|||||||
.contains("| `vehicle.event.gb32960.v1` | `gb32960-ingest-app` | `vehicle-history-app` |")
|
.contains("| `vehicle.event.gb32960.v1` | `gb32960-ingest-app` | `vehicle-history-app` |")
|
||||||
.contains("| `vehicle.event.jt808.v1` | `jt808-ingest-app` | `vehicle-history-app`, `vehicle-analytics-app` |")
|
.contains("| `vehicle.event.jt808.v1` | `jt808-ingest-app` | `vehicle-history-app`, `vehicle-analytics-app` |")
|
||||||
.doesNotContain("| `vehicle.event.gb32960.v1` | `gb32960-ingest-app` | `vehicle-history-app`, `vehicle-analytics-app` |");
|
.doesNotContain("| `vehicle.event.gb32960.v1` | `gb32960-ingest-app` | `vehicle-history-app`, `vehicle-analytics-app` |");
|
||||||
|
assertThat(targetArchitecture)
|
||||||
|
.contains("vehicle-state-service is absent from the default Maven reactor")
|
||||||
|
.doesNotContain("kafka --> state[\"vehicle-state-service\"]")
|
||||||
|
.doesNotContain("state --> redisState[\"Redis<br/>latest state\"]");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user