Examples

Here are some more examples.

Grouped Workers on AWS

ELB("loadbalancer") >> [EC2("worker1"),
                  EC2("worker2"),
                  EC2("worker3"),
                  EC2("worker4"),
                  EC2("worker5")] >> awsRDS("events")

Diagram1

Clustered Web Services

dns = Route53("domainNameService")
lb = ELB("loadbalancer")

Bundle("Services"):
    svc_group = [awsECS("web1"), awsECS("web2"), awsECS("web3")]

Bundle("Database Cluster"):
    db_primary = awsRDS("userdatabase")
    db_primary - [awsRDS("userdb ro")]

memcached = ElastiCache("memcached")

dns >> lb >> svc_group
svc_group >> db_primary
svc_group >> memcached

Diagram2

Event Processing on AWS

source = EKS("k8s source")

Bundle("Event Flows"):
    Bundle("Event Workers"):
        workers = [awsECS("worker1"), awsECS("worker2"), awsECS("worker3")]

    queue = SQS("event queue")

    Bundle("Processing"):
        handlers = [Lambda("process1"), Lambda("process2"), Lambda("process3")]

store = S3("events store")
dw = awsRedshift("analytics")

source >> workers >> queue >> handlers
handlers >> store
handlers >> dw

Diagram3

Message Collecting System on GCP

pubsub = PubSub("pubsub")

Bundle("Source of Data"):
    [gcpIotCore("core1"), gcpIotCore("core2"), gcpIotCore("core3")] >> pubsub

Bundle("Targets"):
    Bundle("Data Flow"):
        flow = Dataflow("data flow")

    Bundle("Data Lake"):
        flow >> [BigQuery("bigquery"), GCS("storage")]

    Bundle("Event Driven"):
        Bundle("Processing"):
            flow >> AppEngine("engine") >> BigTable("bigtable")

        Bundle("Serverless"):
            flow >> gcpFunctions("functions") >> AppEngine("appengine")

pubsub >> flow

Diagram4

Exposed Pod with 3 Replicas on Kubernetes

net = Ingress("domain.com") >> Service("service")
net >> [Pod("pod1"), Pod("pod2"), Pod("pod3")] << ReplicaSet("replicaset") << Deployment("deployment") << HPA("hpa")

Diagram5

Stateful Architecture on Kubernetes

Bundle("Apps"):
    svc = Service("service")
    sts = StatefulSet("statefulset")

    apps = []
    for _ in range(3):
        pod = Pod("pod")
        pvc = PVC("pvc")
        pod - sts - pvc
        apps.append(svc >> pod >> pvc)

apps << PV("pv") << StorageClass("storageClass")

Diagram6

Advanced Web Service with On-Premise

ingress = Nginx("ingress")

metrics = Prometheus("metric")
metrics << Grafana("monitoring")

Bundle("Service Cluster"):
    grpcsvc = [Server("groupc1"), Server("groupc2"), Server("groupc3")]

Bundle("Sessions HA"):
    primary = Redis("session")
    primary - Redis("replica") << metrics
    grpcsvc >> primary

Bundle("Database HA"):
    primary = PostgreSQL("users")
    primary - PostgreSQL("replica") << metrics
    grpcsvc >> primary

aggregator = Fluentd("logging")
aggregator >> Kafka("stream") >> Spark("analytics")

ingress >> grpcsvc >> aggregator

Diagram7

Advanced Web Service with On-Premise (with colors and labels)

ingress = Nginx("ingress")

metrics = Prometheus("metric")
metrics << Edge(color="firebrick", style="dashed") << Grafana("monitoring")

Bundle("Service Cluster"):
    grpcsvc = [Server("groupc1"), Server("groupc2"), Server("groupc3")]

Bundle("Sessions HA"):
    primary = Redis("session")
    primary - Edge(color="brown", style="dashed") - Redis("replica") << Edge(label="collect") << metrics
    grpcsvc >> Edge(color="brown") >> primary

Bundle("Database HA"):
    primary = PostgreSQL("users")
    primary - Edge(color="brown", style="dotted") - PostgreSQL("replica") << Edge(label="collect") << metrics
    grpcsvc >> Edge(color="black") >> primary

aggregator = Fluentd("logging")
aggregator >> Edge(label="parse") >> Kafka("stream") >> Edge(color="black", style="bold") >> Spark("analytics")

ingress >> Edge(color="darkgreen") << grpcsvc >> Edge(color="darkorange") >> aggregator

Diagram8

RabbitMQ Consumers with Custom Nodes

# Download an image to be used into a Custom Node class
rabbitmq_url = "https://jpadilla.github.io/rabbitmqapp/assets/img/icon.png"; rabbitmq_icon = "rabbitmq.png"; urlretrieve(rabbitmq_url, rabbitmq_icon)
DIAGRAM_NAME= "DIAGRAM"
ORIENTATION="LR"  #TB,BT,LR,RL

ingress = Nginx("ingress")

Bundle("Consumers"):
    consumers = [Pod("worker"), Pod("worker"), Pod("worker")]

queue = Custom("Message queue", rabbitmq_icon)

queue >> consumers >> Aurora("Database")

Diagram9