@startuml
!define RECTANGLE class
!define PACKAGE package
!define INTERFACE interface
PACKAGE "Kubernetes Cluster" {
RECTANGLE [Producer Service]
RECTANGLE [RabbitMQ Service]
RECTANGLE [Consumer Service]
RECTANGLE [Decision Service]
RECTANGLE [Kubernetes Service]
[Producer Service]
[RabbitMQ Service]
[Decision Service]
[Kubernetes Service]
}
PACKAGE "Microservice Layer" {
RECTANGLE [Producer Service]
RECTANGLE [RabbitMQ Service]
RECTANGLE [Consumer Service]
RECTANGLE [Decision Service]
}
PACKAGE "Infrastructure Layer" {
RECTANGLE [Kubernetes Service]
}
PACKAGE "Frontend Layer" {
RECTANGLE [Grafana]
RECTANGLE [Prometheus]
[Grafana]
}
note right of [Producer Service] : Sends messages\nto RabbitMQ\n(Microservice)
note right of [RabbitMQ Service] : Stores messages\nin a queue\n(Uses queue data structure)\n(Microservice)
note right of [Consumer Service] : Pulls messages\nas per capacity\n(Microservice)
note right of [Decision Service] : Makes decisions\nbased on events\n(Microservice)
note right of [Kubernetes Service] : Scales pods\nbased on decisions\n(Infrastructure)
note right of [Grafana] : Frontend for\nvisualization\nof metrics
note right of [Prometheus] : Collects and\nstores metrics\n(Microservice)
@enduml