From 39d9dfbac6d90fa4cf41e7596ed92a58d5b982d6 Mon Sep 17 00:00:00 2001 From: igorsatsyuk Date: Sun, 31 May 2026 15:59:40 +0300 Subject: [PATCH 1/2] docs: improve architecture diagrams readability Replace the README Mermaid diagram with a rendered context diagram and add dedicated PlantUML context/sequence diagrams under docs/diagrams with docs/architecture.md as an index. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- README.md | 20 +++------- docs/architecture.md | 21 ++++++++++ docs/diagrams/context-autocomplete-system.png | Bin 0 -> 30861 bytes .../diagrams/context-autocomplete-system.puml | 36 ++++++++++++++++++ docs/diagrams/sequence-autocomplete-query.png | Bin 0 -> 21861 bytes .../diagrams/sequence-autocomplete-query.puml | 20 ++++++++++ docs/diagrams/sequence-search-ingestion.png | Bin 0 -> 43407 bytes docs/diagrams/sequence-search-ingestion.puml | 31 +++++++++++++++ 8 files changed, 113 insertions(+), 15 deletions(-) create mode 100644 docs/architecture.md create mode 100644 docs/diagrams/context-autocomplete-system.png create mode 100644 docs/diagrams/context-autocomplete-system.puml create mode 100644 docs/diagrams/sequence-autocomplete-query.png create mode 100644 docs/diagrams/sequence-autocomplete-query.puml create mode 100644 docs/diagrams/sequence-search-ingestion.png create mode 100644 docs/diagrams/sequence-search-ingestion.puml diff --git a/README.md b/README.md index 13527bf..020b1eb 100644 --- a/README.md +++ b/README.md @@ -38,21 +38,11 @@ Production‑grade event‑driven autocomplete system built with Kafka Streams, ## Architecture Flow -```mermaid -flowchart LR - UI[Frontend] -->|GET /api/search?q=java| SC[SearchController] - SC --> SEP[SearchEventProducer] - SEP -->|search-events| K[(Kafka)] - K --> SST[SearchStatsTopology] - SST --> PG[(PostgreSQL search_stats)] - PG -->|CDC| DBZ[Debezium Connect] - DBZ -->|db-changes.public.search_stats| DC[DebeziumConsumer] - DC --> RSU[RedisSearchUpdater] - RSU --> R[(Redis keys autocomplete:*)] - UI -->|GET /api/complete?q=ja| AC[AutocompleteController] - AC --> AQS[AutocompleteQueryService] - AQS --> R -``` +![Autocomplete system context diagram](docs/diagrams/context-autocomplete-system.png) + +Source: `docs/diagrams/context-autocomplete-system.puml` + +Detailed sequence diagrams: [`docs/architecture.md`](docs/architecture.md) Core behavior: diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..d42dc98 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,21 @@ +# Architecture + +Diagrams are stored in `docs/diagrams/` as PlantUML source and exported PNG files. + +## Context: Event-driven autocomplete pipeline + +![Autocomplete system context diagram](./diagrams/context-autocomplete-system.png) + +Source: `docs/diagrams/context-autocomplete-system.puml` + +## Sequence: search ingestion and indexing + +![Search ingestion and indexing sequence](./diagrams/sequence-search-ingestion.png) + +Source: `docs/diagrams/sequence-search-ingestion.puml` + +## Sequence: autocomplete query flow + +![Autocomplete query flow sequence](./diagrams/sequence-autocomplete-query.png) + +Source: `docs/diagrams/sequence-autocomplete-query.puml` diff --git a/docs/diagrams/context-autocomplete-system.png b/docs/diagrams/context-autocomplete-system.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1f2b9e3c7e184eeb2873ad271f02a65feed7e1 GIT binary patch literal 30861 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" as redis +rectangle "Debezium Connect\n(:8083)" as debezium + +user --> frontend : Submit query / request suggestions +frontend --> search : GET /api/search?q=... +search --> kafka : Publish search-events +kafka --> search : Kafka Streams aggregate +search --> postgres : Upsert query frequency +postgres --> debezium : WAL CDC +debezium --> kafka : Emit db-changes.public.search_stats +kafka --> cdc : Consume Debezium envelope +cdc --> redis : Update prefix sorted sets +frontend --> autocomplete : GET /api/complete?q=...&limit=... +autocomplete --> redis : Read top suggestions +autocomplete --> frontend : Ranked suggestions + +@enduml diff --git a/docs/diagrams/sequence-autocomplete-query.png b/docs/diagrams/sequence-autocomplete-query.png new file mode 100644 index 0000000000000000000000000000000000000000..4fcce2cc3a1c3e9618eb7d1bea3b7428aba88cba GIT binary patch literal 21861 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" as Redis + +User -> Frontend: Type prefix "ja" +Frontend -> Controller: GET /api/complete?q=ja&limit=10 +Controller -> QueryService: getSuggestions("ja", 10) +QueryService -> QueryService: trim + lowercase validation +QueryService -> Redis: ZREVRANGE autocomplete:ja 0 9 +Redis --> QueryService: ["java", "javascript", ...] +QueryService --> Controller: Suggestion list +Controller --> Frontend: 200 OK + JSON array +Frontend --> User: Render ranked suggestions + +@enduml diff --git a/docs/diagrams/sequence-search-ingestion.png b/docs/diagrams/sequence-search-ingestion.png new file mode 100644 index 0000000000000000000000000000000000000000..3c71dda3a4d4c25265f825d8dcd3ebdefbd4620d GIT binary patch literal 43407 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" as Redis + +User -> Frontend: Type search query +Frontend -> SearchController: GET /api/search?q=java +SearchController -> Producer: sendSearchEvent("java") +Producer -> SearchEvents: Produce search event +SearchEvents -> Topology: Consume event +Topology -> Topology: trim + lowercase + count +Topology -> Postgres: Upsert query frequency +Postgres -> Debezium: Capture row change (CDC) +Debezium -> DbChanges: Publish payload.after event +DbChanges -> Consumer: Consume CDC record +Consumer -> Updater: updateFromAfter(query, frequency) +Updater -> Updater: Generate prefixes (j, ja, jav, java) +Updater -> Redis: ZADD autocomplete: query score + +@enduml From 3b585592496bde0adacf45af7b6c891059fa555c Mon Sep 17 00:00:00 2001 From: igorsatsyuk Date: Sun, 31 May 2026 16:10:11 +0300 Subject: [PATCH 2/2] docs: show search-stats publish in context diagram Address Copilot review feedback by explicitly showing SearchStatsTopology output to the search-stats Kafka topic in the context diagram. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/diagrams/context-autocomplete-system.png | Bin 30861 -> 32483 bytes .../diagrams/context-autocomplete-system.puml | 1 + 2 files changed, 1 insertion(+) diff --git a/docs/diagrams/context-autocomplete-system.png b/docs/diagrams/context-autocomplete-system.png index ed1f2b9e3c7e184eeb2873ad271f02a65feed7e1..d03b0f06740c9767fcd627b80445ef099b559b04 100644 GIT binary patch literal 32483 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

b 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 search : GET /api/search?q=... search --> kafka : Publish search-events kafka --> search : Kafka Streams aggregate search --> postgres : Upsert query frequency +search --> kafka : Publish search-stats postgres --> debezium : WAL CDC debezium --> kafka : Emit db-changes.public.search_stats kafka --> cdc : Consume Debezium envelope