A comprehensive SaaS platform for managing agricultural field trials.
The system follows a microservices architecture with these components:
flowchart TD
%% Define styling
classDef sourceNode fill:#D1FFEC,stroke:#16B073,stroke-width:2px,color:#333,font-weight:bold
classDef speedNode fill:#DFEAFC,stroke:#3366CC,stroke-width:2px,color:#333,font-weight:bold
classDef batchNode fill:#E1F5FE,stroke:#0288D1,stroke-width:2px,color:#333,font-weight:bold
classDef dataLakeNode fill:#FFF8E1,stroke:#FFC107,stroke-width:2px,color:#333,font-weight:bold
classDef servingNode fill:#FCE1E1,stroke:#D94A38,stroke-width:2px,color:#333,font-weight:bold
classDef queryNode fill:#E8F5E9,stroke:#43A047,stroke-width:2px,color:#333,font-weight:bold
%% Data Sources Section
subgraph DataSources["Agricultural Data Sources"]
direction LR
IoT["IoT Sensors"]
Trials["Field Trials"]
Satellite["Satellite Imagery"]
Climate["Climate Data"]
end
%% Data Lake
subgraph DataLake["S3 Data Lake"]
direction LR
BronzeZone["Bronze Zone\nRaw, Immutable Data"]
SilverZone["Silver Zone\nCleansed & Validated Data"]
GoldZone["Gold Zone\nAnalytics-Ready Data"]
end
%% Lambda Architecture - Speed Layer
subgraph SpeedLayer["Speed Layer (Real-time Processing)"]
direction TB
IoTCore["AWS IoT Core\nDevice Management"]
KDS["Kinesis Data Streams\nReal-time Buffer"]
KDA["Kinesis Data Analytics\nStream Processing"]
RTProcess["Real-time Processing\n- 5-min window aggregation\n- Anomaly detection\n- Alert generation"]
RTServing["Real-time Serving Layer\n(DynamoDB)"]
end
%% Lambda Architecture - Batch Layer
subgraph BatchLayer["Batch Layer (Comprehensive Processing)"]
direction TB
GlueCDC["AWS Glue CDC\nChange Data Capture"]
GlueCatalog["AWS Glue Data Catalog\nMetadata Repository"]
GlueTriggers["AWS Glue Triggers\nScheduled & Event-based"]
GlueETL["AWS Glue ETL Jobs\nPySpark Processing"]
BatchProcess["Batch Processing\n- Historical analysis\n- Cross-source correlation\n- Treatment effectiveness"]
BatchServing["Batch Serving Layer\n(Redshift)"]
end
%% Query Layer
subgraph QueryLayer["Query Layer (Analytics)"]
direction TB
Athena["Amazon Athena\nAd-hoc SQL Queries"]
Redshift["Amazon Redshift\nAnalytical Queries"]
SageMaker["Amazon SageMaker\nML Models"]
end
%% Serving Layer
subgraph ServingLayer["Serving Layer (Visualization)"]
direction TB
APIGateway["API Gateway\nRESTful Endpoints"]
Analytics["Analytics Service\nFastAPI Backend"]
QuickSight["Amazon QuickSight\nDashboards"]
WebApp["Web Application\nReact.js Frontend"]
end
%% Connect data sources
IoT --> IoTCore
IoT & Trials & Satellite & Climate --> BronzeZone
%% Speed Layer Path
IoTCore --> KDS
KDS --> KDA
KDA --> RTProcess
RTProcess --> RTServing
RTProcess --> SilverZone
%% Batch Layer Path
BronzeZone --> GlueCDC
BronzeZone --> GlueCatalog
GlueCatalog --> GlueTriggers
GlueTriggers --> GlueETL
GlueETL --> BatchProcess
BatchProcess --> SilverZone & GoldZone
BatchProcess --> BatchServing
%% Data Lake Connections
BronzeZone --> SilverZone
SilverZone --> GoldZone
%% Query Layer
GlueCatalog --> Athena
BronzeZone & SilverZone & GoldZone --> Athena
GoldZone --> Redshift
GoldZone --> SageMaker
BatchServing --> Redshift
%% Serving Layer Connections
RTServing --> APIGateway
BatchServing --> APIGateway
Athena & Redshift & SageMaker --> QuickSight
APIGateway --> Analytics
Analytics --> WebApp
QuickSight --> WebApp
%% Apply styles
class IoT,Trials,Satellite,Climate sourceNode
class IoTCore,KDS,KDA,RTProcess,RTServing speedNode
class GlueCDC,GlueCatalog,GlueETL,BatchProcess,BatchServing,GlueTriggers batchNode
class BronzeZone,SilverZone,GoldZone dataLakeNode
class APIGateway,Analytics,QuickSight,WebApp servingNode
class Athena,Redshift,SageMaker queryNode