chartletv0.21.0chartlet.casoon.de

← All examples

Course booking: containers

The same course booking system one level down — the containers template: a boundary around its separately running parts, a web app, an API, a queue with its worker, a database and a file store, with the learner and the external systems outside. Sublabels say what each part is, connections how they talk. The description names the API and the queue as the bottlenecks. Illustrative values.

Course booking: containers

examples/booking-containers.json
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Course booking: containers",
  "height": 940,
  "architecture": {
    "boundaries": [
      {
        "id": "system",
        "label": "Course booking (software system)"
      }
    ],
    "components": [
      {
        "id": "learner",
        "label": "Learner",
        "kind": "person"
      },
      {
        "id": "web",
        "label": "Web app",
        "sublabel": "single-page app",
        "kind": "frontend",
        "in": "system"
      },
      {
        "id": "api",
        "label": "Booking API",
        "sublabel": "API application",
        "in": "system"
      },
      {
        "id": "jobs",
        "label": "Job queue",
        "sublabel": "message queue",
        "kind": "queue",
        "in": "system"
      },
      {
        "id": "worker",
        "label": "Worker",
        "sublabel": "background jobs",
        "in": "system"
      },
      {
        "id": "db",
        "label": "Bookings",
        "sublabel": "relational database",
        "kind": "database",
        "in": "system"
      },
      {
        "id": "files",
        "label": "Certificates",
        "sublabel": "file store",
        "kind": "storage",
        "in": "system"
      },
      {
        "id": "payment",
        "label": "Payment provider",
        "kind": "external"
      },
      {
        "id": "mail",
        "label": "E-mail service",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "from": "learner",
        "to": "web",
        "label": "books a course",
        "technology": "HTTPS"
      },
      {
        "from": "web",
        "to": "api",
        "label": "calls",
        "technology": "JSON/HTTPS"
      },
      {
        "from": "api",
        "to": "db",
        "label": "reads, writes",
        "technology": "SQL"
      },
      {
        "from": "api",
        "to": "payment",
        "label": "takes payment",
        "technology": "HTTPS"
      },
      {
        "from": "api",
        "to": "jobs",
        "label": "queues jobs"
      },
      {
        "from": "jobs",
        "to": "worker",
        "label": "delivers"
      },
      {
        "from": "worker",
        "to": "files",
        "label": "stores certificates"
      },
      {
        "from": "worker",
        "to": "mail",
        "label": "sends confirmations",
        "technology": "SMTP"
      }
    ],
    "mainPath": [
      "learner",
      "web",
      "api",
      "db"
    ]
  }
}
Focus
Course booking: containers
Course booking: containersArchitecture diagram with 9 components and 8 connections in 1 boundary. Course booking (software system): Web app, Booking API, Job queue, Worker, Bookings, Certificates. Main path: Learner → Web app → Booking API → Bookings. Most connected: Booking API (4 connections). Nothing leads into Learner. Bottlenecks: Booking API and Job queue; without either the diagram falls apart. Learner (person): connects to Web app (books a course, via HTTPS). Web app (frontend): connects to Booking API (calls, via JSON/HTTPS). Booking API (service): connects to Bookings (reads, writes, via SQL), Payment provider (takes payment, via HTTPS) and Job queue (queues jobs). Job queue (queue): connects to Worker (delivers). Bookings (database): no outgoing connection. Payment provider (external system): no outgoing connection. Worker (service): connects to Certificates (stores certificates) and E-mail service (sends confirmations, via SMTP). Certificates (storage): no outgoing connection. E-mail service (external system): no outgoing connection.Course booking (software system)Learner → Web app: books a course [HTTPS]Web app → Booking API: calls [JSON/HTTPS]Booking API → Bookings: reads, writes [SQL]Booking API → Payment provider: takes payment [HTTPS]Booking API → Job queue: queues jobsJob queue → Worker: deliversWorker → Certificates: stores certificatesWorker → E-mail service: sends confirmations [SMTP]books a course[HTTPS]calls[JSON/HTTPS]reads, writes[SQL]takes payment[HTTPS]queues jobsdeliversstores certificatessends confirmations[SMTP]LearnerLearnerWeb app – single-page appWeb appsingle-page appBooking API – API applicationBooking APIAPI applicationJob queue – message queueJob queuemessage queueWorker – background jobsWorkerbackground jobsBookings – relational databaseBookingsrelational databaseCertificates – file storeCertificatesfile storePayment providerPayment providerE-mail serviceE-mail service
Show chart data
Data for Course booking: containers
ComponentKindBoundaryConnects to
LearnerpersonWeb app (books a course, via HTTPS)
Web appfrontendCourse booking (software system)Booking API (calls, via JSON/HTTPS)
Booking APIserviceCourse booking (software system)Bookings (reads, writes, via SQL), Payment provider (takes payment, via HTTPS), Job queue (queues jobs)
Job queuequeueCourse booking (software system)Worker (delivers)
BookingsdatabaseCourse booking (software system)
Payment providerexternal system
WorkerserviceCourse booking (software system)Certificates (stores certificates), E-mail service (sends confirmations, via SMTP)
CertificatesstorageCourse booking (software system)
E-mail serviceexternal system
  • Containers
  • Show the deployable parts of a system