Задать вопрос
@AslanPAPA

Как правильно понять трехзвенную архитектуру?

Привет! У меня есть такая архитектура (я пока это плохо понимаю), есть десктоп-клиент на C# он обращается (ip:8080/api/movies) к nginx, далее nginx идет к Django, потом Django обращается к БД (SQL Server) для получение данных, после этого Django через сериализацию превращает python данные в JSON и отдаёт их обратно nginx, а nginx уже отдаёт их C#. Так же c# клиент берёт данные, чтобы получить фильмы из s3 хранилище.

Пока я это так понял, и вот момент когда C# обращается к nginx, а не к Django напрямую связан с тем что nginx быстрый т.к на С написан и безопасный, а Django медленный т.к на Python написан ? Это и есть причина почему nginx используется как посредник ? Ещё говорят что nginx это обратный прокси, в этом случае я его использую как прокси ?
  • Вопрос задан
  • 193 просмотра
Подписаться 1 Средний 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Django: создание backend-приложений
    7 недель
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Python и Django: бэкенд-разработка
    3 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 2
@rPman
Формально, в данной схеме можно исключить nginx.

Еще , если хорошенько подумать, можно было бы избавиться и от django (чем занимается django если по факту нужно обслуживать api для приложения, но разработчикам бакэнда виднее).

Главная причина, почему 'обычно' именно так делают, это вопросы безопасности и простоты разработки.
* nginx (или apache), обычно используют как сервер
- который обслуживает ssl шифрование (сертификаты для https), обслуживание простых логов (сбор статистики например) и защита от одного типа ддос (уже редкий случай).
spoiler
держит воркеров на случай, когда злоумышленник открывает соединение но ничего в него не пишет и не читает (если бы не было nginx сервера, то бакэнд тратил бы кучу ресурсов на обслуживание таких зомби-соединений), к сожалению если правильно слать нужные запросы и забирать хотя бы байт ответа, то нагрузка на бакэнд все же пролезет.

- очень эффективная отдача статичных файлов с диска
Веб сервера вылизаны на столько, что написать реализацию простой отдачи файлов лучше наверное уже не возможно, поэтому для статических файлов (картинки, стили, видеофайлы) выгоднее и проще отдавать это на откуп nginx (в некоторых случаях можно вообще обойтись только веб сервером, тупой пример basic http auth + отдача статики)

- у веб серверов обычно есть продвинутый функционал с помощью расширений, этим редко пользуются (хотя, все уже привыкли к .httaccess у apache, а ведь это его расширение) но часть функционала можно очень эффективно и просто перенести на nginx/apache

* и саму базу данных наружу не открывают, из-за того что в ней нет механизмов защиты от ddos, практически никакой... плюс лишняя защита от брутфорса паролей или глупых админов, делающих пароли простыми.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Понял правильно, nginx здесь — обратный прокси.

Скоростью объясняется лишь отчасти. Django запускают через gunicorn или uwsgi с N воркерами, каждый держит одно соединение до конца ответа. Nginx event-driven: он буферит медленного клиента сам, потом разом отдаёт запрос целиком в Django. Воркер не простаивает. Ещё nginx отдаёт статику (js, css, картинки) без Django вообще, терминирует SSL, и при нужде балансирует между несколькими инстансами.

p.s. «Три звена»: клиент (C#), бизнес-логика (Django), данные (SQL Server + S3). Nginx тут часть инфраструктуры второго звена.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы