Skip to content

Commit

Permalink
feature: include initial architecture diagram for a conference monoli…
Browse files Browse the repository at this point in the history
…th backend application
  • Loading branch information
anyulled committed Apr 3, 2024
1 parent cbbb89e commit 4f79368
Show file tree
Hide file tree
Showing 14 changed files with 551 additions and 1,702 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ System design for [Conference Kata](https://nealford.com/katas/kata?id=AllStuffN
Execute this command to run a Docker container with a structurizr lite image.

```bash
docker run --name structurizr --env=PORT=8080 --volume=$(pwd)/workspace:/usr/local/structurizr -p 8888:8080 -d structurizr/lite:latest
docker run --name spring-io-workshop-architecture --env=PORT=8080 --volume=$(pwd)/workspace:/usr/local/structurizr -p 8888:8080 -d structurizr/lite:latest
```

## Links
Expand Down
Binary file modified workspace/.structurizr/images/Component-001-thumbnail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified workspace/.structurizr/images/Component-002-thumbnail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified workspace/.structurizr/images/Container-001-thumbnail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified workspace/.structurizr/images/SystemContext-001-thumbnail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified workspace/.structurizr/images/softwareSystem-thumbnail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified workspace/.structurizr/images/thumbnail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added workspace/.structurizr/index/_0.cfe
Binary file not shown.
Binary file added workspace/.structurizr/index/_0.cfs
Binary file not shown.
Binary file added workspace/.structurizr/index/_0.si
Binary file not shown.
Binary file added workspace/.structurizr/index/segments_1
Binary file not shown.
Empty file.
271 changes: 43 additions & 228 deletions workspace/workspace.dsl
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
workspace {
name "Conference Kata"
description "The software architecture of the Software Crafters' Conference Kata."
description "The software architecture of Neal Ford's Conference Kata."

!adrs adrs
!docs docs
Expand All @@ -19,259 +19,86 @@ workspace {

softwareSystem = softwareSystem "Conference System" "System desgin for Conference Management" {

webapp = container "Web Application" "Conference Web Application" website {
wepapp = container "Website" "Single page application" "React"{
tags "website"
website = component "Website" "Shows conference information such as speakers, talks and schedule" "React SPA"
}

website = component "Website" "React SPA - Shows conference information such as speakers, talks and schedule" {
tags "website"
}
attendee = component "Attendee System" "System to manage attendee information, such as talks evaluation and access to slides"
voting = component "Voting system" "Send and receives evaluation via web, email, SMS or phone calls"
branding = component "Branding system" "Allow customization for several conference brands"
confapp = container "Conference Application" "Conference Backend Application" Java {
attendee = component "Attendee System" "System to manage attendee information, such as talks evaluation and access to slides" "Java"
voting = component "Voting system" "Send and receives evaluation via web, email, SMS or phone calls" "Java"
branding = component "Branding system" "Allow customization for several conference brands" "Java"
ticket = component "Ticketing System" "Manages tickets sales and reservations" "Java"
cfp = component "CFP" "Call for papers administration" "Java"
crm = component "CRM" "Customer Relationship Management for sponsors" "Java"

website -> branding "Pull branding information from" "gRPC" gRPC
website -> attendee "Reads and writes information from " "gRPC" gRPC
website -> voting "Sends requests and displays aggregation from" "gRPC" gRPC
user -> website "Visits"
organizer -> branding "Customizes branding"
}
// Person interactions
user -> website "Visits website"
organizer -> website "Customizes branding"
speaker -> website "Sends CFP"
crm -> sponsor "Send emails to" "Email"
crm -> user "Send notifications to" "Email, sms"

// Website interactions
website -> branding "Pull branding information from" "Http rest API"
website -> attendee "Reads and writes information from " "Http rest API"
website -> voting "Sends requests and displays aggregation from" "Http rest API"
website -> cfp "Reads data from" "Http rest API"
website -> ticket "Reads ticket information from" "Http rest API"
website -> crm "Reads Sponsor info from" "Http rest API"
}

database = container "Database" "" "Relational database schema" {
tags Database
attendeeDB = component "Attendee DB" "Relational DB for attendee" {
attendeeDB = component "Attendee DB" "Relational DB for attendee" "Postgresql" {
tags Database
}
websiteDb = component "Website DB" "Relational Database" {
websiteDb = component "Website DB" "Stores Website information" "Postgresql"{
tags Database
}
brandingDB = component "Branding DB" "Stores information about branding" {
brandingDB = component "Branding DB" "Stores information about branding" "Postgresql"{
tags Database
}

website -> websiteDb "Reads from and writes to" "JDBC"
ticketDb = component "Ticket DB" "Manages Tickets information" "Postgresql"{
tags Database
}
cfpDB = component "CFP DB" "Stores speaker & talks information" "Postgresql"{
tags Database
}

cfp -> cfpDB "Reads from and writes to" "JDBC"
ticket -> ticketDb "Reads and writes tickets info to" "JDBC"
branding -> brandingDB "Reads and writes to" "JDBC"
attendee -> attendeeDB "Reads and writes to" "JDBC"
voting -> websiteDb "Reads from and writes to" "JDBC"
}

}

group "Third-party" {

authSystem = softwareSystem "Authentication" "Authentication Service - SaaS" {
tags external
authContainer = container "Authentication Service" "Third-party service" {
authAPI = component "Auth API""https"

}
softwareSystem -> this "Authenticates user to"
webapp -> authContainer "Authenticates user to" "Third-party service"
website -> authContainer "Authenticates user to" "Third-party service"

}

cfpSystem = softwareSystem "CFP" "Call for Papers" {
tags external
cfpContainer = container "CFP System" "Call For Papers System - Full management of speakers, talks, and schedule" {
cfp = component "CFP"
cfpDB = component "CFP DB" "Relational Database" {
tags Database
}
cfpStorage = component "storage"

cfp -> cfpStorage "Saves slides to"
cfp -> cfpDB "Reads from and writes to"
cfp -> speaker "Send CFP info to"
speaker -> cfp "Applies to"
website -> cfp "Reads data from" "Https"
}
}

crmSystem = softwareSystem "CRM" "Customer relationship manager" {
tags external
crmContainer = container "CRM System" "Customer Relationship Management - sponsor management and notification system" {
crm = component "CRM"
}

sponsor -> crm "Interacts with"
crm -> sponsor "Send emails to" "Email"
crm -> user "Send notifications to" "Email, sms"
website -> crm "Reads Sponsor info from" "Https"
}

ticketSystem = softwareSystem "Ticket" "Ticket management" {
tags external
ticketContainer = container "Ticket System" "Ticketing System" {
ticket = component "Ticketing System"
ticketDb = component "Ticket DB" "Relational Database" {
tags Database
}
}

user -> ticket "Buys from"
ticket -> ticketDb "Reads and writes tickets info to"
}

}

prod = deploymentEnvironment "Production Deployment" {
deploymentNode "Amazon Web Services" {
tags "Amazon Web Services - Cloud Map "

region = deploymentNode "EU-East-1" {
description "AWS - Europe Zone"
technology "AWS"
tags "Amazon Web Services - Region"

route53 = infrastructureNode "Route 53" {
tags "Amazon Web Services - Route 53"
}
elb = infrastructureNode "Elastic Load Balancer" {
description "Automatically distributes incoming application traffic."
tags "Amazon Web Services - Elastic Load Balancing"
}
cdn = infrastructureNode "AWS CDN" "Amazon CloudFront" {
tags "Amazon Web Services - CloudFront"
}
s3 = infrastructureNode "Storage" "AWS - S3" {
tags "Amazon Web Services - Simple Storage Service"
}

deploymentNode "Amazon - Auto Scaling Groups" "Manages elastic EC2 configuration" {
tags "Amazon Web Services - Application Auto Scaling"

deploymentNode "Amazon Web Services - EC2" "This EC2 instance is part of an Auto Scaling Group" {
tags "Amazon Web Services - EC2"
softwareSystemInstance softwareSystem
webApplicationInstance = containerInstance webapp
}
}
deploymentNode "Amazon EC2 - CRM" {
tags "Amazon Web Services - EC2"

deploymentNode "Ubuntu Server - CRM App" {
tags "Ubuntu"
softwareSystemInstance crmSystem
crmApplicationInstance = containerInstance crmContainer
}
}
deploymentNode "Amazon EC2 - Tickets" {
tags "Amazon Web Services - EC2"

deploymentNode "Ubuntu Server - Ticket App" {
tags "Ubuntu"
softwareSystemInstance ticketSystem
ticketApplicationInstance = containerInstance ticketContainer
}
elb -> this "Forwards requests to" "HTTPS"
}
deploymentNode "Amazon EC2 - CFP" {
tags "Amazon Web Services - EC2"
deploymentNode "Ubuntu Server - CFP App" {
tags "Ubuntu"
softwareSystemInstance cfpSystem
cfpApplicationInstance = containerInstance cfpContainer
}
this -> s3 "Storages slides"
cfpApplicationInstance -> s3 "Storages slides"
}
deploymentNode "Amazon EC2 - Auth" {
tags "Amazon Web Services - EC2"
deploymentNode "Ubuntu Server - Auth App" {
tags "Ubuntu"
softwareSystemInstance authSystem
authApplicationInstance = containerInstance authContainer
}
//webApplicationInstance -> authApplicationInstance "Send Authentication requests to""HTTPS"

}
deploymentNode "Amazon RDS" {
tags "Amazon Web Services - RDS"

deploymentNode "MySQL" {
tags "Amazon Web Services - RDS MySQL instance"
databaseApplicationInstance = containerInstance database
}
}

}

route53 -> elb "Forwards requests to" "HTTPS"
elb -> ticketApplicationInstance "Forwards requests to" "HTTPS"
elb -> authApplicationInstance "Forwards requests to" "HTTPS"
elb -> crmApplicationInstance "Forwards requests to" "HTTPS"
elb -> cfpApplicationInstance "Forwards traffic to" "HTTPS"
elb -> webApplicationInstance "Forwards requests to" "HTTPS"
elb -> cdn "Forwards request to" "HTTPS"

cfpApplicationInstance -> s3 "Storages slides to"
cdn -> s3 "Enables access to slides"
}
}
}

views {
systemLandscape softwareSystem {
title "Conference System Landscape"
include *

animation {
softwareSystem
user
sponsor
speaker
}
}

systemContext softwareSystem {
title "Conference System Context"
include *

}

container softwareSystem {
title "Container view of software system"
include *

}

component database {
title "Container view of Database"
include *
}

component webapp {
title "Component view of web application"
include *
animation {
user
website
branding
database
}
}

deployment softwareSystem prod "Production" {
title "Deployment in production"
component confapp {
title "Component view of Conference application"
include *

animation {
route53
elb
webApplicationInstance
databaseApplicationInstance
}
}

styles {
element "Group:Third-party" {
border dotted
color #AA0000
background #BB0000
opacity 75
}
element "external" {
shape component
background #000088
}

element "Database" {
color #FFFFFF
background #00aa00
Expand All @@ -295,21 +122,9 @@ workspace {
element "website" {
shape WebBrowser
}
element "Ubuntu" {
color #E95420
background #E95420
stroke #E95420
icon "images/ubuntu-logo.jpeg"
}
relationship "gRPC" {
color #000088
style dotted
}
}

theme default
themes https://static.structurizr.com/themes/amazon-web-services-2023.01.31/theme.json
themes https://static.structurizr.com/themes/amazon-web-services-2020.04.30/theme.json
}

}
1,980 changes: 507 additions & 1,473 deletions workspace/workspace.json

Large diffs are not rendered by default.

0 comments on commit 4f79368

Please sign in to comment.