08 - web-технологии. Архитектура frontend-backend
TRANSCRIPT
![Page 1: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/1.jpg)
Frontend иBackend
![Page 2: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/2.jpg)
Общая архитектура
2
![Page 3: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/3.jpg)
Задачи Frontend (web) сервера
• отдача статических документов
• проксирование (reverse proxy)
• балансировка нагрузки
• кеширование
• сборка SSI
• авторизация, SSL, нарезка картинок, gzip
3
![Page 4: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/4.jpg)
Reverse proxy
• frontend (медленно) читает запрос от клиента
• frontend (быстро) передает запрос свободному backend
• backend генерирует страницу
• backend (быстро) возвращает ответ frontend серверу
• frontend (медленно) возвращает ответ клиенту
Результат: backend занят минимально возможное время.
4
![Page 5: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/5.jpg)
Настройкапроксированияв nginx
![Page 6: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/6.jpg)
Настройка проксирования в nginx
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; location / { proxy_pass http://backend; } location /partner/ { proxy_pass http://www.partner.com; } location ~ \.\w\w\w?\w?$ { root /www/static; }
6
![Page 7: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/7.jpg)
Настройка upstream в nginx
upstream backend { server back1.example.com:8080 weight=1 max_fails=3; server back2.example.com:8080 weight=2; server unix:/tmp/backend.sock; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; }
7
![Page 8: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/8.jpg)
Applicationсервер
![Page 9: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/9.jpg)
Backend (application) сервер
Роль application сервера заключается в исполнении бизнес-логики
приложения и генерации динамических документов.
На каждый HTTP запрос application сервер запускает некоторый
обработчик в приложении. Это может быть функция, класс или
программа, в зависимости от технологии.
9
![Page 10: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/10.jpg)
Протоколы запуска приложения
• Servlets и др. специализированные API
• mod_perl, mod_python, mod_php
• CGI
• FastCGI
• SCGI
• PSGI, WSGI, Rack
10
![Page 11: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/11.jpg)
CGI
![Page 12: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/12.jpg)
CGI - Common Gateway Interface
• Метод, QueryString, заголовки запроса - через переменные
окружения
• Тело запроса передается через STDIN
• Заголовки и тело ответа возвращаются через STDOUT
• HTTP код ответа передается через псевдозаголовок Status
• Поток ошибок STDERR направляется в лог ошибок сервера
12
![Page 13: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/13.jpg)
13
![Page 14: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/14.jpg)
Переменные окружения CGI
• REQUEST_METHOD - метод запроса
• PATH_INFO - путь из URL
• QUERY_STRING - фрагмент URL после ?
• REMOTE_ADDR - IP адрес пользователя
• CONTENT_LENGTH - длина тела запроса
• HTTP_COOKIE - Заголовок Cookie
• HTTP_ANY_HEADER_NAME - любой другой HTTP заголовок
14
![Page 15: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/15.jpg)
FastCGI и SCGI
![Page 16: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/16.jpg)
FastCGI и SCGI
Основная проблема CGI - низкая производительность. Протоколы
FastCGI и SCGI призваны решить эту проблему путем демонизации
приложения. Иногда это возможно сделать даже без изменения
кода CGI приложения.
16
![Page 17: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/17.jpg)
17
![Page 18: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/18.jpg)
WSGI
![Page 19: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/19.jpg)
WSGI - актуальный протокол
WSGI, PSGI, Rack - протоколы вызова функции обработчика из
application сервера. Сам application server при этом может
выполняться в отдельном процессе или совпадать с web сервером.
Как правило, при использовании этих протоколов в качестве
application сервера выступает отдельный легковесный процесс.
19
![Page 20: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/20.jpg)
WSGI - обработчик
def wsgi_application(environ, start_response): # бизнес-логика status = '200 OK' headers = [ ('Content-Type', 'text/plain') ] body = 'Hello, world!' start_response(status, headers ) return [ body ]
20
![Page 21: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/21.jpg)
Web Server Gateway Interface
• Обработчик - функция или класс (callable)
• Метод, QueryString, заголовки запроса - через аргумент environ
• Тело запроса передается через file-handle wsgi.input
• HTTP код ответа и заголовки ответа передаются через вызов
функции start_response
• Тело ответа возвращается в виде списка (iterable) из обработчика
• Поток ошибок должен быть направлен в file-handle wsgi.stderr
21
![Page 22: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/22.jpg)
Переменные environ
• CGI-like переменные: REQUEST_URI , ...
• wsgi.version - версия WSGI протокола
• wsgi.url_scheme - схема текущего URL: https или http
• wsgi.input - file-handle для чтения тела запроса
• wsgi.errors - file-handle для вывода ошибок
• wsgi.multithreaded - ...
• wsgi.multiprocess - ...
22
![Page 23: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/23.jpg)
Развертывание WSGI
23
![Page 24: 08 - Web-технологии. Архитектура frontend-backend](https://reader034.vdocuments.site/reader034/viewer/2022042600/58a771d01a28ab99238b5d63/html5/thumbnails/24.jpg)
Что ложится на приложение ?
• Анализ PATH_INFO и выбор конкретного обработчика
• Разбор конкретных заголовков, например Cookie
• Разбор QUERY_STRING
• Разбор тела запроса:
• x-www-form-urlencoded
• multipart/form-data
• Вывод правильных заголовков ответа
24