Add week 8 materials

This commit is contained in:
osukhoroslov committed 2026-11-04 19:23:39 +03:00
1 parent a987b82834
commit 0bf71ed374
38 files changed
+2908

No files matched your search

@@ -0,0 +1,23 @@
services:
nginx:
image: nginx
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- 8000:8000
server1:
image: hello
build:
context: hello-world
command: 8000 "Alice"
ports:
- 8001:8000
server2:
image: hello
build:
context: hello-world
command: 8000 "Bob"
ports:
- 8002:8000
@@ -0,0 +1,8 @@
FROM python:3.9-slim
RUN pip install Flask==2.3.3
WORKDIR /app
COPY . .
ENTRYPOINT ["python3", "main.py"]
@@ -0,0 +1,15 @@
from flask import Flask
import sys
app = Flask(__name__)
if len(sys.argv) < 3:
print('please call with arguments <port> <hostname>')
exit()
@app.route('/')
def index():
return f'Hello from {app.name}\n'
app.name = sys.argv[2]
app.run(host='0.0.0.0', port=int(sys.argv[1]))
@@ -0,0 +1,13 @@
upstream rr_backend {
server server2:8000;
server server1:8000;
}
server {
listen 8000;
server_name _;
location / {
proxy_pass http://rr_backend;
}
}
@@ -0,0 +1,16 @@
# Пример распределения нагрузки с помощью Nginx
В *hello-world/main.py* написан простейший hello-world сервер, который отвечает хостом, указанном при запуске сервера в формате `python3 main.py <HOST>`.
В *nginx.conf* приведен пример конфигурации Nginx, который распределяет нагрузку между двумя инстансами hello-world сервера. Nginx работает как HTTP-прокси: принимает запрос клиента, отправляет его бэкенду и возвращает ответ клиенту. Stateless-логика приложения при этом совместима с TCP-соединениями на обоих участках.
Другие стратегии балансировки: https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
Запуск примера:
```bash
docker compose build
docker compose up
for i in {0..20}; do curl localhost:8000; done
```