Create big architecture diagram
This commit is contained in:
@@ -29,3 +29,4 @@ to a PDF which you can view with your favorite PDF viewer (which hopefully liste
|
||||
./watch.sh
|
||||
```
|
||||
|
||||
(you should specify the `$pdf_previewer` configuration variable in an appropriate `.latexmkrc` file)
|
||||
|
||||
13
src/diagrams/arch1.tex
Normal file
13
src/diagrams/arch1.tex
Normal file
@@ -0,0 +1,13 @@
|
||||
\input{lib/preamble.tex}
|
||||
|
||||
\begin{document}
|
||||
\begin{tikzpicture}
|
||||
\node (Device) at (4,1) [component,external] { Gerät };
|
||||
\node (WSM) at (4,4) [component, inner sep=12px] { WSM };
|
||||
\node (Backend) at (4,7) [component,external] { Backend };
|
||||
\draw[very thick, rounded corners=6px] (0,2) rectangle (8,6) ++(0, 0.1) node [label, anchor=south east] { \large Heimdall };
|
||||
\draw (Device) edge [<->] (WSM);
|
||||
\draw (WSM) edge [->, bend left=10] (Backend) (Backend) edge [->, response, bend left=10] (WSM);
|
||||
\node at (5.5,4.5) [stickynote, callout absolute pointer=(WSM.20), anchor=south west] { Web Socket\\Manager };
|
||||
\end{tikzpicture}
|
||||
\end{document}
|
||||
19
src/diagrams/arch2.tex
Normal file
19
src/diagrams/arch2.tex
Normal file
@@ -0,0 +1,19 @@
|
||||
\input{lib/preamble.tex}
|
||||
|
||||
\begin{document}
|
||||
\begin{tikzpicture}
|
||||
\node (dev1) at (3,1) [component,external] { Gerät 1 };
|
||||
\node (dev2) at (6,1) [component,external] { Gerät 2 };
|
||||
\fill[color=black!10] (2,4) rectangle (10,6);
|
||||
\node (WSM1) at (3,5) [component, inner sep=12px] { WSM\\ \small Pod 1 };
|
||||
\node (WSM2) at (6,5) [component, inner sep=12px] { WSM\\ \small Pod 2 };
|
||||
\node (WSMX) at (9,5) [component, inner sep=12px] { WSM\\ \small Pod \dots };
|
||||
\node (Backend) at (6,8) [component,external] { Backend };
|
||||
\draw[very thick, rounded corners=6px] (1,2) rectangle (11,7) ++(0, 0.1) node [label, anchor=south east] { \large Heimdall };
|
||||
\draw[rounded corners, pattern=crosshatch, pattern color=scandiored!20, draw=scandiored]
|
||||
(2,2.5) rectangle (10,3.5)
|
||||
node [label, anchor=south east, text=scandiored] { \scriptsize Load Balancer };
|
||||
\draw (dev1) edge [<->] (WSM1) (dev2) edge [<->] (WSM2);
|
||||
\draw (WSM1) edge [->, bend left=10] (Backend) (Backend) edge [->, response, bend left=10] (WSM1);
|
||||
\end{tikzpicture}
|
||||
\end{document}
|
||||
33
src/diagrams/arch3.tex
Normal file
33
src/diagrams/arch3.tex
Normal file
@@ -0,0 +1,33 @@
|
||||
\input{lib/preamble.tex}
|
||||
|
||||
\begin{document}
|
||||
\begin{tikzpicture}
|
||||
\node (dev1) at (3,1) [component,external] { Gerät 1 };
|
||||
\node (dev2) at (6,1) [component,external] { Gerät 2 };
|
||||
\fill[color=black!10] (2,3) rectangle (10,5);
|
||||
\node (WSM1) at (3,4) [component, inner sep=12px] { WSM\\ \small Pod 1 };
|
||||
\node (WSM2) at (6,4) [component, inner sep=12px] { WSM\\ \small Pod 2 };
|
||||
\node (WSMX) at (9,4) [component, inner sep=12px] { WSM\\ \small Pod \dots };
|
||||
\node (WSM1 port) at (WSM1.30) [port] {};
|
||||
\node at (WSM1 port) [label, below right=3px] { \scriptsize addr1 };
|
||||
\node (WSM2 port) at (WSM2.30) [port] {};
|
||||
\node at (WSM2 port) [label, below right=3px] { \scriptsize addr2 };
|
||||
\node (FORS) at (7,7) [component, inner sep=12px] { FORS };
|
||||
\node at (8.5,7.5) [stickynote, callout absolute pointer=(FORS.20), anchor=south west] { Forwarding\\Service };
|
||||
\node (AddrDB) at (9.5,6) [database] {};
|
||||
\node at (AddrDB.north) [label, above=3px] { \small Address\\ \small DB };
|
||||
\node (Backend) at (6,10.5) [component,external] { Backend };
|
||||
|
||||
\draw[very thick, rounded corners=6px] (1,2) rectangle (11,9) ++(0, 0.1) node [label, anchor=south east] { \large Heimdall };
|
||||
\draw (dev1) edge [<->] (WSM1) (dev2) edge [<->] (WSM2);
|
||||
\draw (WSM1.north) edge [->] (Backend);
|
||||
\draw (Backend) edge [->,response] (FORS);
|
||||
\draw (FORS.0) edge [->, bend left=10] node [auto, sloped] { \scriptsize 1 } (AddrDB)
|
||||
(AddrDB) edge [->, response, bend left=10] node [auto, sloped, swap] { \scriptsize addr1 } (FORS.340);
|
||||
\draw (FORS) edge [->, response] (WSM1 port);
|
||||
|
||||
\draw[->] (WSM1.340) .. controls +(2, 0) and +(-6, 0) .. (AddrDB.200) node [pos=0.85, above, sloped] { \scriptsize 1: addr1 };
|
||||
\draw[->] (WSM2.70) -- (AddrDB.220) node [midway, above, sloped] { \scriptsize 2: addr2 };
|
||||
\draw[->] (WSMX) -- (AddrDB);
|
||||
\end{tikzpicture}
|
||||
\end{document}
|
||||
28
src/diagrams/arch4.tex
Normal file
28
src/diagrams/arch4.tex
Normal file
@@ -0,0 +1,28 @@
|
||||
\input{lib/preamble.tex}
|
||||
|
||||
\begin{document}
|
||||
\begin{tikzpicture}
|
||||
\node (Device) at (5,1) [component,external] { Gerät };
|
||||
\node (WSM) at (5,4) [component, inner sep=12px] { WSM };
|
||||
\node (FORS) at (7,7) [component, inner sep=12px] { FORS };
|
||||
\node (Message Mapping) at (2.5,6) [database] {};
|
||||
\node at (Message Mapping.north) [label, above=3px] { \small Message\\ \small Mapping };
|
||||
\node (AddrDB) at (9.5,6) [database] {};
|
||||
\node at (AddrDB.north) [label, above=3px] { \small Address\\ \small DB };
|
||||
\node (Backend1) at (3,10.5) [component,external] { Backend 1 };
|
||||
\node (Backend2) at (6,10.5) [component,external] { Backend 2 };
|
||||
\node (BackendX) at (9,10.5) [component,external] { Backend \dots };
|
||||
|
||||
\draw[very thick, rounded corners=6px] (1,2) rectangle (11,9) ++(0, 0.1) node [label, anchor=south east] { \large Heimdall };
|
||||
\draw (Device) edge [<->] (WSM);
|
||||
|
||||
\draw (WSM) edge [->, bend left=10] node [auto, sloped, swap] { \scriptsize /foo/config;v1 } (Message Mapping.325)
|
||||
(Message Mapping.0) edge [->, response, bend left=10] node [auto, sloped] { \scriptsize Backend 2 } (WSM);
|
||||
|
||||
\draw (WSM) edge [->] (Backend1);
|
||||
\draw (Backend1) edge [->,response] (FORS);
|
||||
\draw (FORS) edge (AddrDB);
|
||||
\draw (FORS) edge [->, response] (WSM);
|
||||
\draw[->] (WSM) -- (AddrDB);
|
||||
\end{tikzpicture}
|
||||
\end{document}
|
||||
28
src/diagrams/arch5.tex
Normal file
28
src/diagrams/arch5.tex
Normal file
@@ -0,0 +1,28 @@
|
||||
\input{lib/preamble.tex}
|
||||
|
||||
\begin{document}
|
||||
\begin{tikzpicture}
|
||||
\node (Device) at (5,0) [component,external] { Gerät };
|
||||
\node (WSM) at (5,4) [component, inner sep=12px] { WSM };
|
||||
|
||||
\node (Blocked) at (3,6) [database] {};
|
||||
\node at (Blocked.north) [label, above=3px] { \small Blocked\\ \small Certificates };
|
||||
\node (Quarantine) at (7,6) [database] {};
|
||||
\node at (Quarantine.north) [label, above=3px] { \small Quarantine\\ \small Database };
|
||||
|
||||
\draw[very thick, rounded corners=6px] (1,1) rectangle (9,8) ++(0, 0.1) node [label, anchor=south east] { \large Heimdall };
|
||||
|
||||
\draw (WSM) edge (Blocked.south) (WSM) edge (Quarantine.south);
|
||||
|
||||
\draw ($ (Device.north) + (-0.6,0) $) edge [<->, bend left=20]
|
||||
node [auto, sloped, align=center] { \scriptsize TLS\\[-4px] \scriptsize handshake }
|
||||
($ (WSM.south) + (-0.6,0) $);
|
||||
\draw (Device.north) edge [<->]
|
||||
node [auto, sloped] { \scriptsize WebSocket }
|
||||
node [auto, sloped, swap] { \scriptsize upgrade }
|
||||
(WSM.south);
|
||||
\draw ($ (Device.north) + (0.6,0) $) edge [<->, bend right=20]
|
||||
node [auto, sloped, swap, align=center] { \scriptsize Corporate\\[-4px] \scriptsize Handshake }
|
||||
($ (WSM.south) + (0.6,0) $);
|
||||
\end{tikzpicture}
|
||||
\end{document}
|
||||
49
src/diagrams/arch6.tex
Normal file
49
src/diagrams/arch6.tex
Normal file
@@ -0,0 +1,49 @@
|
||||
\input{lib/preamble.tex}
|
||||
|
||||
\begin{document}
|
||||
\begin{tikzpicture}
|
||||
\node (dev1) at (3,0.5) [component,external] { Gerät 1 };
|
||||
\node (dev2) at (6,0.5) [component,external] { Gerät 2 };
|
||||
\node (devX) at (9,0.5) [component,external] { Gerät \dots };
|
||||
\draw[very thick, rounded corners=6px] (0,2) rectangle (11,8.5) ++(0, 0.1) node [label, anchor=south east] { \large Heimdall };
|
||||
\fill[color=black!10] (2,3) rectangle (10,5);
|
||||
\node (WSM1) at (3,4) [component] { WSM\\ \small Pod 1 };
|
||||
\node (WSM2) at (6,4) [component] { WSM\\ \small Pod 2 };
|
||||
\node (WSMX) at (9,4) [component] { WSM\\ \small Pod \dots };
|
||||
\node (WSM1 port) at (WSM1.30) [port] {};
|
||||
\node at (WSM1 port) [label, below right=3px] { \scriptsize addr1 };
|
||||
\node (WSM2 port) at (WSM2.30) [port] {};
|
||||
\node at (WSM2 port) [label, below right=3px] { \scriptsize addr2 };
|
||||
\node (FORS) at (7,7) [component, inner sep=12px] { FORS };
|
||||
\node (DB1) at (1,3.25) [database] {};
|
||||
\node (DB2) at (1,4.75) [database] {};
|
||||
\node (Message Mapping) at (1.5,6.75) [database] {};
|
||||
\node at (Message Mapping.north) [label, above=3px] { \small Message\\ \small Mapping };
|
||||
\node (AddrDB) at (9.5,6) [database] {};
|
||||
\node at (AddrDB.north) [label, above=3px] { \small Address\\ \small DB };
|
||||
\node (backend1) at (3, 10) [component,external] { Backend 1 };
|
||||
\node (backend2) at (6, 10) [component,external] { Backend 2 };
|
||||
\node (backendX) at (9, 10) [component,external] { Backend \dots };
|
||||
|
||||
\draw (dev1) edge [<->] (WSM1)
|
||||
(dev2) edge [<->] (WSM2)
|
||||
(devX) edge [<->] (WSMX);
|
||||
|
||||
\draw (WSM1) edge (DB1) (WSM1) edge (DB2);
|
||||
|
||||
\draw (WSM1) edge [->, bend left=10] node [auto, sloped, swap] { \scriptsize /foo/config;v1 } (Message Mapping)
|
||||
(Message Mapping) edge [->, response, bend left=10] node [auto, sloped] { \scriptsize Backend 2 } (WSM1);
|
||||
|
||||
\draw (WSM1) edge [->, bend left=10] (backend2)
|
||||
(backend2) edge [->, response, bend left=10] (WSM1);
|
||||
|
||||
\draw (backend2) edge [->, response] (FORS);
|
||||
\draw (FORS.0) edge [->, bend left=10] node [auto, sloped] { \scriptsize 1 } (AddrDB)
|
||||
(AddrDB) edge [->, response, bend left=10] node [auto, sloped, swap] { \scriptsize addr1 } (FORS.340);
|
||||
\draw (FORS) edge [->, response] (WSM1 port);
|
||||
|
||||
\draw[->] (WSM1.340) .. controls +(3, 0) and +(-6, 0) .. (AddrDB.200) node [pos=0.85, above, sloped] { \scriptsize 1: addr1 };
|
||||
\draw[->] (WSM2.70) -- (AddrDB.220) node [midway, above, sloped] { \scriptsize 2: addr2 };
|
||||
\draw[->] (WSMX) -- (AddrDB);
|
||||
\end{tikzpicture}
|
||||
\end{document}
|
||||
@@ -6,11 +6,11 @@ latexmk -dvilua *.tex
|
||||
|
||||
for dvi in *.dvi
|
||||
do
|
||||
dvisvgm --font-format=woff business_context.dvi
|
||||
dvisvgm --font-format=woff $dvi
|
||||
done
|
||||
|
||||
latexmk -C
|
||||
|
||||
mkdir -p ../../public/diagrams
|
||||
mv *.svg ../../public/diagrams/
|
||||
|
||||
latexmk -C
|
||||
|
||||
|
||||
@@ -1,45 +1,27 @@
|
||||
\documentclass[tikz]{standalone}
|
||||
\usepackage{fontspec}
|
||||
\setmainfont{Roboto Light}
|
||||
|
||||
\usetikzlibrary{arrows.meta,graphs,positioning,shapes.misc}
|
||||
|
||||
\definecolor{scandioblue}{RGB}{66, 212, 251}
|
||||
\definecolor{scandiored}{RGB}{210, 21, 21}
|
||||
\input{lib/preamble.tex}
|
||||
|
||||
\begin{document}
|
||||
\begin{tikzpicture}[
|
||||
>={Stealth[round]},
|
||||
every node/.style={
|
||||
rectangle,
|
||||
thick,
|
||||
draw=black,
|
||||
rounded corners=3px
|
||||
},
|
||||
external/.style={
|
||||
fill=scandioblue,
|
||||
inner sep=6px
|
||||
},
|
||||
heimdall/.style={
|
||||
inner xsep=30px,
|
||||
inner ysep=18px,
|
||||
font=\Large
|
||||
}
|
||||
]
|
||||
\node (dev2) [external] {Device 2};
|
||||
\node (dev1) [external, left=of dev2] {Device 1};
|
||||
\node (devX) [external, right=of dev2] {Device \dots};
|
||||
\node (heimdall) [heimdall, above=of dev2] {Heimdall};
|
||||
\node (back2) [external, above=of heimdall] {Backend 2};
|
||||
\node (back1) [external, left=of back2] {Backend 1};
|
||||
\node (backX) [external, right=of back2] {Backend \dots};
|
||||
\node (dev2) [component, external] {Gerät 2};
|
||||
\node (dev1) [component, external, left=of dev2] {Gerät 1};
|
||||
\node (devX) [component, external, right=of dev2] {Gerät \dots};
|
||||
\node (heimdall) [component, heimdall, above=of dev2] {Heimdall};
|
||||
\node (back2) [component, external, above=of heimdall] {Backend 2};
|
||||
\node (back1) [component, external, left=of back2] {Backend 1};
|
||||
\node (backX) [component, external, right=of back2] {Backend \dots};
|
||||
|
||||
\path (dev1) edge[<->] (heimdall);
|
||||
\path (dev2) edge[<->] (heimdall);
|
||||
\path (devX) edge[<->] (heimdall);
|
||||
|
||||
\path (heimdall) edge[->, bend left=10] (back1) (back1) edge [->, bend left=10] (heimdall);
|
||||
\path (heimdall) edge[->, bend left=10] (back2) (back2) edge [->, bend left=10] (heimdall);
|
||||
\path (heimdall) edge[->, bend left=10] (backX) (backX) edge [->, bend left=10] (heimdall);
|
||||
\path (heimdall.154) edge[->, bend left=10] (back1) (back1) edge [->, response, bend left=10] (heimdall.150);
|
||||
\path (heimdall.96) edge[->, bend left=10] (back2) (back2) edge [->, response, bend left=10] (heimdall.84);
|
||||
\path (heimdall.30) edge[->, bend left=10] (backX) (backX) edge [->, response, bend left=10] (heimdall.26);
|
||||
\end{tikzpicture}
|
||||
\end{document}
|
||||
|
||||
61
src/diagrams/lib/preamble.tex
Normal file
61
src/diagrams/lib/preamble.tex
Normal file
@@ -0,0 +1,61 @@
|
||||
\documentclass[tikz]{standalone}
|
||||
\usepackage{fontspec}
|
||||
\setmainfont{Roboto Light}
|
||||
|
||||
\usetikzlibrary{arrows.meta,calc,graphs,patterns,positioning,shapes.callouts,shapes.geometric,shapes.misc}
|
||||
|
||||
\definecolor{scandioblue}{RGB}{66, 212, 251}
|
||||
\definecolor{scandiored}{RGB}{210, 21, 21}
|
||||
|
||||
\makeatletter
|
||||
\tikzset{
|
||||
>={Stealth[round]},
|
||||
component/.style={
|
||||
rectangle,
|
||||
thick,
|
||||
draw=black,
|
||||
fill=white,
|
||||
rounded corners=3px,
|
||||
inner sep=6px,
|
||||
align=center
|
||||
},
|
||||
external/.style={
|
||||
fill=scandioblue
|
||||
},
|
||||
response/.style={
|
||||
dashed
|
||||
},
|
||||
port/.style={
|
||||
circle,
|
||||
inner sep=2px,
|
||||
fill=black
|
||||
},
|
||||
label/.style={
|
||||
inner sep=1px,
|
||||
fill=white,
|
||||
align=center
|
||||
},
|
||||
database/.style={
|
||||
path picture={
|
||||
\draw (0, 1.5*\database@segmentheight) circle [x radius=\database@radius,y radius=\database@aspectratio*\database@radius];
|
||||
\draw (-\database@radius, 0.5*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius];
|
||||
\draw (-\database@radius,-0.5*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius];
|
||||
\draw (-\database@radius,1.5*\database@segmentheight) -- ++(0,-3*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius] -- ++(0,3*\database@segmentheight);
|
||||
},
|
||||
minimum width=2*\database@radius + \pgflinewidth,
|
||||
minimum height=3*\database@segmentheight + 2*\database@aspectratio*\database@radius + \pgflinewidth,
|
||||
},
|
||||
database segment height/.store in=\database@segmentheight,
|
||||
database radius/.store in=\database@radius,
|
||||
database aspect ratio/.store in=\database@aspectratio,
|
||||
database segment height=0.2cm,
|
||||
database radius=0.4cm,
|
||||
database aspect ratio=0.35,
|
||||
stickynote/.style={
|
||||
shape=rectangle callout,
|
||||
draw,
|
||||
fill=scandiored!20,
|
||||
align=center
|
||||
}
|
||||
}
|
||||
\makeatother
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
filename="$1"
|
||||
latexmk -lualatex -pvc $filename -view=none
|
||||
|
||||
latexmk -lualatex -pvc $filename -view=pdf
|
||||
latexmk -C
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import Reveal from 'reveal.js';
|
||||
|
||||
let deck = new Reveal({
|
||||
transition: 'fade'
|
||||
transition: 'fade',
|
||||
|
||||
width: 960,
|
||||
height: 700
|
||||
});
|
||||
deck.initialize();
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<!--
|
||||
<section class="sc-left-and-right" data-background-image="/backgrounds/title.svg">
|
||||
<div class="sc-right">
|
||||
<img src="/logo_scandio.svg" style="width: 50%;">
|
||||
@@ -42,8 +43,10 @@
|
||||
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
|
||||
<h2>Qualitätsanforderungen</h2>
|
||||
<ul>
|
||||
<li class="fragment"></li>
|
||||
<li class="fragment"></li>
|
||||
<li class="fragment">Vermeidung von Verbindungsabbrüchen</li>
|
||||
<li class="fragment">Wenige Neuverbindungen zur gleichen Zeit</li>
|
||||
<li class="fragment">Keine Validierung oder Modifikation von Nachrichteninhalten</li>
|
||||
<li class="fragment">Verbindungsdetails transparent gegenüber Backends</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
@@ -52,13 +55,46 @@
|
||||
</section>
|
||||
|
||||
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
|
||||
<h2>Systemupdate</h2>
|
||||
<ul>
|
||||
<li class="fragment">Updates an der Logik und Konfiguration von Heimdall</li>
|
||||
<li class="fragment">Vermeidung von Neuverbindungen in den meisten Fällen</li>
|
||||
<li class="fragment">Kontrollierte Neuverbindungen, falls Verbindungsabbrüche notwendig</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section data-background-color="black">
|
||||
Lösungen
|
||||
</section>
|
||||
-->
|
||||
|
||||
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
|
||||
<h3>Softwarearchitektur Heimdall</h3>
|
||||
<center class="r-stack">
|
||||
<img class="diagram fragment fade-out" data-fragment-index="1" src="/diagrams/arch1.svg">
|
||||
<img class="diagram fragment fade-in-then-out" data-fragment-index="1" src="/diagrams/arch2.svg">
|
||||
<img class="diagram fragment fade-in-then-out" src="/diagrams/arch3.svg">
|
||||
<img class="diagram fragment fade-in-then-out" src="/diagrams/arch4.svg">
|
||||
<img class="diagram fragment fade-in-then-out" src="/diagrams/arch5.svg">
|
||||
</center>
|
||||
</section>
|
||||
|
||||
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
|
||||
<img class="r-stretch" src="/diagrams/arch6.svg">
|
||||
</section>
|
||||
|
||||
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
|
||||
<h3>Deploymentstrategie</h3>
|
||||
<center class="r-stack">
|
||||
<img class="diagram fragment fade-out" data-fragment-index="1" src="/diagrams/deployment1.svg">
|
||||
<img class="diagram fragment fade-in-then-out" data-fragment-index="1" src="/diagrams/deployment2.svg">
|
||||
<img class="diagram fragment fade-in-then-out" src="/diagrams/deployment3.svg">
|
||||
<img class="diagram fragment fade-in-then-out" src="/diagrams/deployment4.svg">
|
||||
</center>
|
||||
</section>
|
||||
|
||||
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
|
||||
<h3>Ideen zur Verbesserung</h3>
|
||||
</section>
|
||||
|
||||
<section class="sc-left-and-right" data-background-color="black">
|
||||
|
||||
Reference in New Issue
Block a user