iggy
iggy copied to clipboard
Mental Model for Iggy New Contributors
Can we have something like below in the contributor document for faster onboarding :
Module Architecture
graph LR
CORE[core/]
SERVER[server/]
STREAMING[streaming/]
BINARY[binary_protocol/]
SDK[sdk/]
COMMON[common/]
CLI[cli/]
QUIC[quic/]
TCP[tcp/]
HTTP[http/]
BENCH[benchmark/]
STATE[state/]
MODELS[models/]
STORAGE[storage/]
CACHE[cache/]
USERS[users/]
PAT[tokens/]
SYSTEM[system/]
CODEC[codec/]
SERVER_P[server/]
CLIENT_P[client/]
CLIENT[client/]
UTILS[utils/]
BASE64[base64/]
COMP[compression/]
CRYPTO[crypto/]
VALID[validation/]
%% Core structure - left to right hierarchy
CORE --> SERVER
CORE --> STREAMING
CORE --> BINARY
CORE --> SDK
CORE --> COMMON
CORE --> CLI
%% Server modules
SERVER --> QUIC
SERVER --> TCP
SERVER --> HTTP
SERVER --> BENCH
SERVER --> STATE
%% Streaming modules
STREAMING --> MODELS
STREAMING --> STORAGE
STREAMING --> CACHE
STREAMING --> USERS
STREAMING --> PAT
STREAMING --> SYSTEM
%% Binary protocol
BINARY --> CODEC
BINARY --> SERVER_P
BINARY --> CLIENT_P
%% SDK
SDK --> CLIENT
SDK --> UTILS
%% Common
COMMON --> BASE64
COMMON --> COMP
COMMON --> CRYPTO
COMMON --> VALID
Mermaid 1
flowchart TD
IGGY_SERVER[IGGY SERVER]
QUIC[QUIC Server<br/>Port 8080]
TCP[TCP Server<br/>Port 8090]
HTTP[HTTP Server<br/>Port 3000]
MESSAGE_PROCESSOR[MESSAGE PROCESSOR CORE]
AUTH[Auth & Permissions]
RATE_LIMIT[Rate Limit Manager]
VALIDATOR[Message Validator]
STREAMING_ENGINE[STREAMING ENGINE]
STREAM_MGR[Stream Manager]
PARTITION_MGR[Partition Manager]
SEGMENT_MGR[Segment Manager]
STORAGE_LAYER[STORAGE LAYER]
MESSAGE_LOG[Message Log]
INDEX_FILES[Index Files]
CACHE_MGR[Cache Manager]
RUST_SDK[Rust SDK]
CSHARP_SDK[C#/.NET SDK]
JAVA_SDK[Java SDK]
PYTHON_SDK[Python SDK]
NODE_SDK[Node.js SDK]
GO_SDK[Go SDK]
%% Client Connections
RUST_SDK --> QUIC
CSHARP_SDK --> TCP
JAVA_SDK --> HTTP
PYTHON_SDK --> QUIC
NODE_SDK --> TCP
GO_SDK --> HTTP
%% Server Flow
QUIC --> MESSAGE_PROCESSOR
TCP --> MESSAGE_PROCESSOR
HTTP --> MESSAGE_PROCESSOR
MESSAGE_PROCESSOR --> AUTH
MESSAGE_PROCESSOR --> RATE_LIMIT
MESSAGE_PROCESSOR --> VALIDATOR
MESSAGE_PROCESSOR --> STREAMING_ENGINE
STREAMING_ENGINE --> STREAM_MGR
STREAMING_ENGINE --> PARTITION_MGR
STREAMING_ENGINE --> SEGMENT_MGR
STREAMING_ENGINE --> STORAGE_LAYER
STORAGE_LAYER --> MESSAGE_LOG
STORAGE_LAYER --> INDEX_FILES
STORAGE_LAYER --> CACHE_MGR
mermaid 2
flowchart TD
%% Client Request Flow - Horizontal
subgraph CLIENT_REQUEST_FLOW[Client Request Flow]
direction LR
CLIENT[Client] --> PROTO_HANDLER[Protocol Handler]
PROTO_HANDLER --> MSG_PROCESSOR[Message Processor]
MSG_PROCESSOR --> AUTH_FLOW[Auth & Permissions]
MSG_PROCESSOR --> STREAM_ENGINE[Streaming Engine]
AUTH_FLOW --> RATE_LIMIT_FLOW[Rate Limit Manager]
STREAM_ENGINE --> STORAGE_FLOW[Storage Layer]
STORAGE_FLOW --> DISK_STORAGE[Disk Storage]
end
%% Message Write Flow - Horizontal
subgraph MESSAGE_WRITE_FLOW[Message Write Flow]
direction LR
PRODUCER[Producer] --> PROTO_HANDLER_W[Protocol Handler]
PROTO_HANDLER_W --> VALIDATOR_W[Message Validator]
VALIDATOR_W --> PARTITION_MGR_W[Partition Manager]
PARTITION_MGR_W --> SEGMENT_MGR_W[Segment Manager]
SEGMENT_MGR_W --> MESSAGE_LOG_W[Message Log<br/>Append-only]
end
%% Message Read Flow - Horizontal
subgraph MESSAGE_READ_FLOW[Message Read Flow]
direction LR
CONSUMER[Consumer] --> PROTO_HANDLER_R[Protocol Handler]
PROTO_HANDLER_R --> OFFSET_RESOLVER[Offset Resolver]
OFFSET_RESOLVER --> SEGMENT_MGR_R[Segment Manager]
SEGMENT_MGR_R --> CACHE_READ[Message Cache & Index Files]
CACHE_READ --> MESSAGE_LOG_R[Message Log<br/>Sequential]
end
%% Stack the horizontal flows vertically
CLIENT_REQUEST_FLOW --> MESSAGE_WRITE_FLOW
MESSAGE_WRITE_FLOW --> MESSAGE_READ_FLOW
mermaid 3
flowchart TB
subgraph PROTOCOL_ARCH[Protocol Architecture]
PROTOCOL_LAYER[Protocol Layer]
QUIC_PROTO[QUIC<br/>Modern, UDP]
TCP_PROTO[TCP<br/>Binary, Fast]
HTTP_PROTO[HTTP<br/>REST, Web UI]
BINARY_CORE[Binary Protocol Core]
COMMANDS[Commands Ops]
RESPONSES[Responses Results]
FRAMES[Message Frames<br/>Data Transfer]
SERIALIZATION[Serialization Layer]
BINCODE[Bincode Primary]
POSTCARD[Postcard Fallback]
SIMD_JSON[SIMD-JSON HTTP only]
PROTOCOL_LAYER --> QUIC_PROTO
PROTOCOL_LAYER --> TCP_PROTO
PROTOCOL_LAYER --> HTTP_PROTO
QUIC_PROTO --> BINARY_CORE
TCP_PROTO --> BINARY_CORE
HTTP_PROTO --> BINARY_CORE
BINARY_CORE --> COMMANDS
BINARY_CORE --> RESPONSES
BINARY_CORE --> FRAMES
BINARY_CORE --> SERIALIZATION
SERIALIZATION --> BINCODE
SERIALIZATION --> POSTCARD
SERIALIZATION --> SIMD_JSON
end
subgraph STORAGE_ARCH[Storage Architecture]
STREAM[Stream<br/>Tenant/Use Case]
TOPIC[Topic<br/>Message Category]
PARTITION1[Partition 1<br/>Parallel Processing]
PARTITION2[Partition 2]
PARTITION3[Partition 3]
STREAM_DIR[Stream Directory<br/>/data/streams/stream_id/topics/topic_id/partitions/]
PARTITION_DIR[partition_1/]
SEGMENT_LOG[segment_1.log<br/>Message data]
SEGMENT_IDX[segment_1.idx<br/>Index file]
SEGMENT_TMS[segment_1.tms<br/>Timestamp index]
STREAM --> TOPIC
TOPIC --> PARTITION1
TOPIC --> PARTITION2
TOPIC --> PARTITION3
STREAM_DIR --> PARTITION_DIR
PARTITION_DIR --> SEGMENT_LOG
PARTITION_DIR --> SEGMENT_IDX
PARTITION_DIR --> SEGMENT_TMS
end
subgraph SEGMENT_STRUCTURE[Segment Structure]
SEGMENT_FILE[Segment File]
MSG1[Message 1 + Headers]
MSG2[Message 2 + Headers]
MSG3[Message 3 + Headers]
SEGMENT_FILE --> MSG1
SEGMENT_FILE --> MSG2
SEGMENT_FILE --> MSG3
end