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