mirror of https://github.com/mingrammer/diagrams
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
3.3 KiB
130 lines
3.3 KiB
5 years ago
|
---
|
||
|
id: examples
|
||
|
title: Examples
|
||
|
---
|
||
|
|
||
|
Here are some more examples.
|
||
|
|
||
|
## Grouped Workers
|
||
|
|
||
|
```python
|
||
|
from diagrams import Diagram
|
||
|
from diagrams.aws.compute import EC2
|
||
|
from diagrams.aws.database import RDS
|
||
|
from diagrams.aws.network import ELB
|
||
|
|
||
|
with Diagram("Grouped Workers", show=False, direction="TB"):
|
||
|
ELB("lb") >> [EC2("worker1"),
|
||
|
EC2("worker2"),
|
||
|
EC2("worker3"),
|
||
|
EC2("worker4"),
|
||
|
EC2("worker5")] >> RDS("events")
|
||
|
|
||
|
```
|
||
|
|
||
|
![grouped workers diagram](/img/grouped_workers_diagram.png)
|
||
|
|
||
|
## Clustered Web Services
|
||
|
|
||
|
```python
|
||
|
from diagrams import Cluster, Diagram
|
||
|
from diagrams.aws.compute import ECS
|
||
|
from diagrams.aws.database import ElastiCache, RDS
|
||
|
from diagrams.aws.network import ELB
|
||
|
from diagrams.aws.network import Route53
|
||
|
|
||
|
with Diagram("Clustered Web Services", show=False):
|
||
|
dns = Route53("dns")
|
||
|
lb = ELB("lb")
|
||
|
|
||
|
with Cluster("Services"):
|
||
|
svc_group = [ECS("web1"),
|
||
|
ECS("web2"),
|
||
|
ECS("web3")]
|
||
|
|
||
|
with Cluster("DB Cluster"):
|
||
|
db_master = RDS("userdb")
|
||
|
db_master - [RDS("userdb ro")]
|
||
|
|
||
|
memcached = ElastiCache("memcached")
|
||
|
|
||
|
dns >> lb >> svc_group
|
||
|
svc_group >> db_master
|
||
|
svc_group >> memcached
|
||
|
```
|
||
|
|
||
|
![clustered web services diagram](/img/clustered_web_services_diagram.png)
|
||
|
|
||
|
## Event Processing
|
||
|
|
||
|
```python
|
||
|
from diagrams import Cluster, Diagram
|
||
|
from diagrams.aws.compute import ECS, EKS, Lambda
|
||
|
from diagrams.aws.database import Redshift
|
||
|
from diagrams.aws.integration import SQS
|
||
|
from diagrams.aws.storage import S3
|
||
|
|
||
|
with Diagram("Event Processing", show=False):
|
||
|
source = EKS("k8s source")
|
||
|
|
||
|
with Cluster("Event Flows"):
|
||
|
with Cluster("Event Workers"):
|
||
|
workers = [ECS("worker1"),
|
||
|
ECS("worker2"),
|
||
|
ECS("worker3")]
|
||
|
|
||
|
queue = SQS("event queue")
|
||
|
|
||
|
with Cluster("Processing"):
|
||
|
handlers = [Lambda("proc1"),
|
||
|
Lambda("proc2"),
|
||
|
Lambda("proc3")]
|
||
|
|
||
|
store = S3("events store")
|
||
|
dw = Redshift("analytics")
|
||
|
|
||
|
source >> workers >> queue >> handlers
|
||
|
handlers >> store
|
||
|
handlers >> dw
|
||
|
```
|
||
|
|
||
|
![event processing diagram](/img/event_processing_diagram.png)
|
||
|
|
||
|
## Message Collecting System
|
||
|
|
||
|
```python
|
||
|
from diagrams import Cluster, Diagram
|
||
|
from diagrams.gcp.analytics import BigQuery, Dataflow, PubSub
|
||
|
from diagrams.gcp.compute import AppEngine, Functions
|
||
|
from diagrams.gcp.database import BigTable
|
||
|
from diagrams.gcp.iot import IotCore
|
||
|
from diagrams.gcp.storage import GCS
|
||
|
|
||
|
with Diagram("Message Collecting", show=False):
|
||
|
pubsub = PubSub("pubsub")
|
||
|
|
||
|
with Cluster("Source of Data"):
|
||
|
[IotCore("core1"),
|
||
|
IotCore("core2"),
|
||
|
IotCore("core3")] >> pubsub
|
||
|
|
||
|
with Cluster("Targets"):
|
||
|
with Cluster("Data Flow"):
|
||
|
flow = Dataflow("data flow")
|
||
|
|
||
|
with Cluster("Data Lake"):
|
||
|
flow >> [BigQuery("bq"),
|
||
|
GCS("storage")]
|
||
|
|
||
|
with Cluster("Event Driven"):
|
||
|
with Cluster("Processing"):
|
||
|
flow >> AppEngine("engine") >> BigTable("bigtable")
|
||
|
|
||
|
with Cluster("Serverless"):
|
||
|
flow >> Functions("func") >> AppEngine("appengine")
|
||
|
|
||
|
pubsub >> flow
|
||
|
```
|
||
|
|
||
|
![message collecting diagram](/img/message_collecting_diagram.png)
|