From 87972788624b2af9e8b85c50d179500227f85cf5 Mon Sep 17 00:00:00 2001
From: jan <jan.schnaidt@student.reutlingen-university.de>
Date: Tue, 3 Dec 2024 20:22:54 +0100
Subject: [PATCH] Load balancer

---
 Caddyfile                                          |  8 +++++---
 docker-compose.yml                                 | 11 +++++++----
 .../todo/controller/HealthController.java          | 14 ++++++++++++++
 3 files changed, 26 insertions(+), 7 deletions(-)
 create mode 100644 src/main/java/com/cloudcomputing/todo/controller/HealthController.java

diff --git a/Caddyfile b/Caddyfile
index fad2883..02b8af1 100644
--- a/Caddyfile
+++ b/Caddyfile
@@ -2,8 +2,10 @@
     root * /usr/share/caddy
     file_server
 
-    reverse_proxy /user* {
-        to backend_1:9876 backend_2:9877
-        lb_policy round_robin
+    reverse_proxy /user* backend1:9876 backend2:9877 {
+        lb_policy first
+        health_uri /health
+        health_interval 10s
+        health_timeout 1s
     }
 }
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 042d4a3..eb1e011 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -24,8 +24,8 @@ services:
     networks:
       - todo-network
 
-  # backend stuff
-  backend_1:
+  # backend1
+  backend1:
     # builds backend from root
     build: .
     # the internal network our backend will be using
@@ -46,8 +46,8 @@ services:
     depends_on:
       - mongodb
 
-  # backend stuff
-  backend_2:
+  # backend2
+  backend2:
     # builds backend from root
     build: .
     # the internal network our backend will be using
@@ -79,6 +79,7 @@ services:
     networks:
       - todo-network
 
+
   # caddy for load balancing and reverse proxying
   caddy:
     image: caddy/caddy:alpine
@@ -90,6 +91,8 @@ services:
       - "80:80" # default http port
     networks:
       - todo-network
+    depends_on:
+      - frontend
 
 # were gonna use this network for both our backend and frontend
 networks:
diff --git a/src/main/java/com/cloudcomputing/todo/controller/HealthController.java b/src/main/java/com/cloudcomputing/todo/controller/HealthController.java
new file mode 100644
index 0000000..b519eca
--- /dev/null
+++ b/src/main/java/com/cloudcomputing/todo/controller/HealthController.java
@@ -0,0 +1,14 @@
+package com.cloudcomputing.todo.controller;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HealthController {
+
+    @GetMapping("/health")
+    public ResponseEntity<Boolean> health() {
+        return ResponseEntity.ok(true);
+    }
+}
-- 
GitLab