Skip to content

Commit db68a38

Browse files
committed
Add ejem1-jmeter example for scalability (part 5)
1 parent e4ab78b commit db68a38

49 files changed

Lines changed: 3077 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

parte_5/ejem1-jmeter/PostController.java

Whitespace-only changes.
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
services:
2+
mysql-db:
3+
image: mysql:8.0
4+
container_name: mysql-db
5+
environment:
6+
MYSQL_ROOT_PASSWORD: root
7+
MYSQL_DATABASE: post
8+
volumes:
9+
- ./mysql:/var/lib/mysql
10+
- ./initdb:/docker-entrypoint-initdb.d:ro
11+
healthcheck:
12+
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
13+
timeout: 5s
14+
retries: 5
15+
deploy:
16+
resources:
17+
limits:
18+
cpus: '1.0'
19+
memory: 512m
20+
21+
# spring-app:
22+
# build: ./ejem-1
23+
# environment:
24+
# - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/post
25+
# - SPRING_DATASOURCE_PASSWORD=root
26+
# - SPRING_DATASOURCE_USERNAME=root
27+
# ports:
28+
# - "8090:8080"
29+
# depends_on:
30+
# mysql-db:
31+
# condition: service_healthy
32+
# deploy:
33+
# resources:
34+
# limits:
35+
# cpus: '1.0'
36+
# memory: 512m
37+
38+
# spring-app:
39+
# build: ./ejem-2-cache
40+
# environment:
41+
# - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/post
42+
# - SPRING_DATASOURCE_PASSWORD=root
43+
# - SPRING_DATASOURCE_USERNAME=root
44+
# ports:
45+
# - "8090:8080"
46+
# depends_on:
47+
# mysql-db:
48+
# condition: service_healthy
49+
# deploy:
50+
# resources:
51+
# limits:
52+
# cpus: '1.0'
53+
# memory: 512m
54+
55+
# spring-app:
56+
# build: ./ejem-2-cache
57+
# environment:
58+
# - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/post
59+
# - SPRING_DATASOURCE_PASSWORD=root
60+
# - SPRING_DATASOURCE_USERNAME=root
61+
# depends_on:
62+
# mysql-db:
63+
# condition: service_healthy
64+
# deploy:
65+
# replicas: 3 # Con LB
66+
# resources:
67+
# limits:
68+
# cpus: '1.0'
69+
# memory: 512m
70+
71+
spring-app:
72+
build: ./ejem-2-cache-redis
73+
environment:
74+
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/post
75+
- SPRING_DATASOURCE_PASSWORD=root
76+
- SPRING_DATASOURCE_USERNAME=root
77+
- SPRING_REDIS_HOST=redis_t3
78+
- SPRING_REDIS_PORT=6379
79+
depends_on:
80+
mysql-db:
81+
condition: service_healthy
82+
deploy:
83+
replicas: 3 # Con LB
84+
resources:
85+
limits:
86+
cpus: '1.0'
87+
memory: 512m
88+
89+
haproxy:
90+
image: haproxy:latest
91+
container_name: lb_demo
92+
volumes:
93+
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
94+
ports:
95+
- "80:80" # Tráfico de la App
96+
- "8404:8404" # Estadísticas
97+
depends_on:
98+
- spring-app
99+
100+
redis:
101+
image: redis:alpine
102+
container_name: redis_t3
103+
104+
# --- MONITORING (PROMETHEUS & GRAFANA) ---
105+
prometheus:
106+
image: prom/prometheus:latest
107+
container_name: prometheus
108+
volumes:
109+
- ./prometheus.yml:/etc/prometheus/prometheus.yml
110+
ports:
111+
- "9090:9090"
112+
113+
grafana:
114+
image: grafana/grafana:latest
115+
container_name: grafana
116+
ports:
117+
- "3000:3000"
118+
environment:
119+
- GF_SECURITY_ADMIN_PASSWORD=admin
120+
volumes:
121+
- ./grafana/:/etc/grafana/provisioning/
122+
depends_on:
123+
- prometheus
124+
125+
# --- CADVISOR ---
126+
# Si falla con el mensaje "too many open files", hay que aumentar los descriptores de ficheros: `sudo sysctl -w fs.inotify.max_user_instances=8192`
127+
cadvisor:
128+
image: gcr.io/cadvisor/cadvisor:latest
129+
container_name: cadvisor
130+
privileged: true
131+
command: --docker_only --disable_metrics=percpu,process,sched,tcp,udp,disk,diskIO
132+
ports:
133+
- "8088:8080"
134+
volumes:
135+
- /:/rootfs:ro
136+
- /var/run:/var/run:rw
137+
- /sys:/sys:ro
138+
- /var/lib/docker/:/var/lib/docker:ro
139+
restart: always
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
services:
2+
mysql-db:
3+
image: mysql:8.0
4+
container_name: mysql-db
5+
environment:
6+
MYSQL_ROOT_PASSWORD: root
7+
MYSQL_DATABASE: post
8+
volumes:
9+
- ./mysql:/var/lib/mysql
10+
- ./initdb:/docker-entrypoint-initdb.d:ro
11+
healthcheck:
12+
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
13+
timeout: 5s
14+
retries: 5
15+
deploy:
16+
resources:
17+
limits:
18+
cpus: '1.0'
19+
memory: 1G
20+
21+
spring-app:
22+
build: ./bd_ejem11
23+
environment:
24+
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/post
25+
- SPRING_DATASOURCE_PASSWORD=root
26+
- SPRING_DATASOURCE_USERNAME=root
27+
ports:
28+
- "8090:8080"
29+
depends_on:
30+
mysql-db:
31+
condition: service_healthy
32+
deploy:
33+
resources:
34+
limits:
35+
cpus: '1.0'
36+
memory: 1G
37+
38+
# --- MONITORING (PROMETHEUS & GRAFANA) ---
39+
prometheus:
40+
image: prom/prometheus:latest
41+
container_name: prometheus
42+
volumes:
43+
- ./prometheus.yml:/etc/prometheus/prometheus.yml
44+
ports:
45+
- "9090:9090"
46+
47+
grafana:
48+
image: grafana/grafana:latest
49+
container_name: grafana
50+
ports:
51+
- "3000:3000"
52+
environment:
53+
- GF_SECURITY_ADMIN_PASSWORD=admin
54+
volumes:
55+
- ./grafana/:/etc/grafana/provisioning/
56+
depends_on:
57+
- prometheus
58+
59+
# --- CADVISOR ---
60+
# Si falla con el mensaje "too many open files", hay que aumentar los descriptores de ficheros: `sudo sysctl -w fs.inotify.max_user_instances=8192`
61+
cadvisor:
62+
image: gcr.io/cadvisor/cadvisor:latest
63+
container_name: cadvisor
64+
privileged: true
65+
command: --docker_only --disable_metrics=percpu,process,sched,tcp,udp,disk,diskIO
66+
ports:
67+
- "8088:8080"
68+
volumes:
69+
- /:/rootfs:ro
70+
- /var/run:/var/run:rw
71+
- /sys:/sys:ro
72+
- /var/lib/docker/:/var/lib/docker:ro
73+
restart: always
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
services:
2+
mysql-db:
3+
image: mysql:8.0
4+
container_name: mysql-db
5+
environment:
6+
MYSQL_ROOT_PASSWORD: root
7+
MYSQL_DATABASE: post
8+
volumes:
9+
- ./mysql:/var/lib/mysql
10+
- ./initdb:/docker-entrypoint-initdb.d:ro
11+
healthcheck:
12+
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
13+
timeout: 5s
14+
retries: 5
15+
deploy:
16+
resources:
17+
limits:
18+
cpus: '1.0'
19+
memory: 512m
20+
21+
spring-app:
22+
build: ./bd_ejem11
23+
environment:
24+
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/post
25+
- SPRING_DATASOURCE_PASSWORD=root
26+
- SPRING_DATASOURCE_USERNAME=root
27+
ports:
28+
- "8090:8080"
29+
depends_on:
30+
mysql-db:
31+
condition: service_healthy
32+
deploy:
33+
resources:
34+
limits:
35+
cpus: '1.0'
36+
memory: 512m
37+
38+
# --- MONITORING (PROMETHEUS & GRAFANA) ---
39+
prometheus:
40+
image: prom/prometheus:latest
41+
container_name: prometheus
42+
volumes:
43+
- ./prometheus.yml:/etc/prometheus/prometheus.yml
44+
ports:
45+
- "9090:9090"
46+
47+
grafana:
48+
image: grafana/grafana:latest
49+
container_name: grafana
50+
ports:
51+
- "3000:3000"
52+
environment:
53+
- GF_SECURITY_ADMIN_PASSWORD=admin
54+
volumes:
55+
- ./grafana/:/etc/grafana/provisioning/
56+
depends_on:
57+
- prometheus
58+
59+
# --- CADVISOR ---
60+
# Si falla con el mensaje "too many open files", hay que aumentar los descriptores de ficheros: `sudo sysctl -w fs.inotify.max_user_instances=8192`
61+
cadvisor:
62+
image: gcr.io/cadvisor/cadvisor:latest
63+
container_name: cadvisor
64+
privileged: true
65+
command: --docker_only --disable_metrics=percpu,process,sched,tcp,udp,disk,diskIO
66+
ports:
67+
- "8088:8080"
68+
volumes:
69+
- /:/rootfs:ro
70+
- /var/run:/var/run:rw
71+
- /sys:/sys:ro
72+
- /var/lib/docker/:/var/lib/docker:ro
73+
restart: always
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Dockerfile for Spring Boot application
2+
3+
# Build stage
4+
FROM maven:3-eclipse-temurin-21 AS build
5+
WORKDIR /app
6+
COPY pom.xml .
7+
COPY src ./src
8+
RUN mvn package -DskipTests
9+
10+
# Run stage
11+
FROM eclipse-temurin:21-jre
12+
WORKDIR /app
13+
COPY --from=build /app/target/*.jar .
14+
EXPOSE 8080
15+
ENTRYPOINT ["java", "-jar", "bd_ejem11-0.0.1-SNAPSHOT.jar"]

0 commit comments

Comments
 (0)