Examples
Here are some more examples.
Grouped Workers on AWS
ELB("loadbalancer") >> [EC2("worker1"),
EC2("worker2"),
EC2("worker3"),
EC2("worker4"),
EC2("worker5")] >> awsRDS("events")
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
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
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
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")
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")
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
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
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")