forked from course/hse-2026
Add week 8 materials
This commit is contained in:
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
|
||||
```
|
||||
Reference in new issue
Block a user