<!-- obsidian slides : ctrl+p > start presentation -->

#### Architektur und Designentscheidungen - 5 Min

|                                                                                          |                                                  |
| ---------------------------------------------------------------------------------------- | ------------------------------------------------ |
| **MERN**<br>- mongodb > server<br>- express.js > server<br>- react > client<br>- node.js | <br>![[00 Präsentation pOST-2026-05.png\|400]] - |

---

**mehr Libraries/Dependencies**

> [!size-small]
>
> - Redux für State > JWT access token, Refresh Token ist in Cookie gespeichert
> - Material UI für Theme
> - Vite für Kompilierung/Build/dev
> - Nginx
>   - reverse-proxy API requests zum server > könnte auch mit kubernetes ingress gelöst werden
>   - statische build Dateien auf client zur Verfügung stellen

---

**Deployment mit Kubernetes und Dockerfile für client und server**

- 2 client replicas
- 3 server replicas
- 1 mongodb

---

![[00 Präsentation pOST-2026-05-1.png|500]]

<!--

**Ports (default)**
- Server lokal: 3001
- Client lokal: 3000
- Mongodb: 27017
Ports kubernetes
-->

---

#### Demo - App mit Failover - 5 Min

```shell
# 3 shells:
make deploy
make public
# ----
make context # kubernetes context
kubectl get pods
kubectl delete pod ...
# ----
watch kubectl get pods -n mern-distributed
```

---

**Zusatz - hey tests**

---

Kubernetes:

```
Summary:
  Total:        0.3139 secs
  Slowest:      0.3048 secs
  Fastest:      0.0016 secs
  Average:      0.1147 secs
  Requests/sec: 3185.9822

  Total data:   1424000 bytes
  Size/request: 1424 bytes
```

---

dev setup (client + server + podman mongodb)

```
Summary:
  Total:	2.4805 secs
  Slowest:	2.4510 secs
  Fastest:	0.0090 secs
  Average:	0.6717 secs
  Requests/sec:	403.1421

  Total data:	1598000 bytes
  Size/request:	1598 bytes
```

---

```shell
TOKEN=..
make hey-public
```

---

##### Q&A - 5 Min
