Как правильно понять трехзвенную архитектуру?
У меня есть вот такая архитектура программы ( я это пока плохо понимаю). Я использую следующие технологии:
- c# (WPF)
- Nginx
- Django (запускаю через gunicorn)
- s3 хранилище (для получение фильмов)
вот конфиг nginx:
server {
listen 8080;
server_name 1.2.3.4;
client_max_body_size 5G;
location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /media/ {
alias /var/media/films/;
location ~* \.png$ {
try_files $uri $uri.jpg =404;
}
expires 30d;
sendfile on;
tcp_nopush on;
}
location /static/ {
alias /home/user/mybackend/static/;
expires 30d;
}
}
}
В начале C# (WPF) приложение делает запрос на ip:8080/api/movies, потом как я понимаю запрос почему-то идёт на nginx (наверное потому-что в кфг у nginx на vps прописано слушать 8080 порт). Далее nginx проверят через свой location куда именно ему идти дальше, /media и /static даёт файлы в C# напрямую из /media или /static, без Django. А location /получается летит черезproxy_pass http://127.0.0.1:8888;` на моё локальный сервер внутри vps получается прямо в Django. А Django потом идёт на БД для получение данных превращает их JSON и обратно отдаёт Nginx, а Nginx уже в C# приложение.
Вот так я себе это плюс минус представляю, можете пожалуйста объяснить где я не прав, где может прав. И так же почему это называю трёхзвенной архитектурой, а не просто клиент-сервер ? И нужен ли Nginx в данной схеме и почем и как он обеспечивает скорость и безопасность? А вот на счет gunicorn это то что внутри vps запускает локально Django ?
Трёхзвенная архитектура - это разделение приложения на три составные части, каждая из которых может выполняться на отдельном сервере/компьютере. Каждая из частей выполняет определенную функцию, то есть отвечает за обработку информации независимо от остальных частей.
Эта архитектура включает в себя: клиентскую (уровень презентации), серверную (бизнес логика), и хранилище данных (базы данных).
Для каждой из частей использоваться свой стэк технологий. Так на роль клиентском уровне может использоваться:
Для веб-приложений: React, Vue.js, Angular, HTML/CSS.
Для мобильных приложений: Swift, Kotlin, React Native.
Для настольных (Desktop) приложений: Java, C#, C++.
Серверная часть может быть написана на: Node.js, Python (Django, FastAPI), Java (Spring), PHP (Laravel), C# (.NET).
Уровень данных представляет из себя:
- Реляционные СУБД (SQL): PostgreSQL, MySQL, Oracle.
- Нереляционные базы данных (NoSQL): MongoDB, Redis, Cassandra.
Nginx - это прокси сервер, его можно ставить на втором уровне, то есть он непосредственно принимает запросы от первого (клиентского) уровня.
Gunicorn - это HTTP-сервер с поддержкой ASGI для Python, его часто ставят в связке с Nginx, c которого он и принимает запросы.
В реальной жизни (продакшн) требуется защита от входящих запросов клиента, которую и обеспечивает nginx, а далее запросы передаются на Gunicorn, который их обрабатывает и посылает на сервер приложений Django в вашем случае.