1 from diagrams import Cluster, Diagram
2 from diagrams.onprem.analytics import Spark
3 from diagrams.onprem.compute import Server
4 from diagrams.onprem.database import PostgreSQL
5 from diagrams.onprem.inmemory import Redis
6 from diagrams.onprem.aggregator import Fluentd
7 from diagrams.onprem.monitoring import Grafana, Prometheus
8 from diagrams.onprem.network import Nginx
9 from diagrams.onprem.queue import Kafka
10
11 with Diagram("Advanced Web Service with On-Premise", show=False):
12 ingress = Nginx("ingress")
13
14 metrics = Prometheus("metric")
15 metrics << Grafana("monitoring")
16
17 with Cluster("Service Cluster"):
18 grpcsvc = [
19 Server("grpc1"),
20 Server("grpc2"),
21 Server("grpc3")]
22
23 with Cluster("Sessions HA"):
24 primary = Redis("session")
25 primary - Redis("replica") << metrics
26 grpcsvc >> primary
27
28 with Cluster("Database HA"):
29 primary = PostgreSQL("users")
30 primary - PostgreSQL("replica") << metrics
31 grpcsvc >> primary
32
33 aggregator = Fluentd("logging")
34 aggregator >> Kafka("stream") >> Spark("analytics")
35
36 ingress >> grpcsvc >> aggregator