37
Архитектура и принципы работы типового web-приложения

архитектура и принципы работы типового Web приложения

  • Upload
    -

  • View
    124

  • Download
    10

Embed Size (px)

Citation preview

Page 1: архитектура и принципы работы типового Web приложения

Архитектура и принципы работы типового web-

приложения

Page 2: архитектура и принципы работы типового Web приложения

WEB-приложениеКлиент-серверное приложение, в котором

клиентом выступает браузер, а сервером — web-сервер.

Логика web-приложения распределена между сервером и клиентом.

Хранение данных осуществляется, преимущественно, на сервере.

Обмен информацией происходит по сети.

Page 3: архитектура и принципы работы типового Web приложения

Диаграмма типового web-приложения

Page 4: архитектура и принципы работы типового Web приложения

В web-приложениях существуют две программы, работающие одновременно:Код живущий на сервере и отвечающий на HTTP

запросы;Код живущий в браузере и отвечающий на ввод

данных пользователем.

Page 5: архитектура и принципы работы типового Web приложения

Серверный кодЯзыки программирования/фреймворки:

Javascript(Node.js), Python(Django), PHP, Ruby On Rails, Java, C# etc;

Не виден пользователю;Может отвечать только на HTTP запросы

конкретного URL, а не на любой тип пользовательского ввода;

Page 6: архитектура и принципы работы типового Web приложения

Клиентский кодЯзыки программирования: HTML, CSS, JavaScript;Парсится браузером пользователя;Реагирует на пользовательский ввод;Доступен для просмотра и редактирования

пользователю в полном объеме;Не может читать файлы с сервера на прямую,

должен общаться с сервером через HTTP запросы;

Page 7: архитектура и принципы работы типового Web приложения

Технологический стек1. Операционная система (файловая система).

Чаще всего Linux;2. WEB-сервер (Apache, NGINX, IIS etc.);3. База данных (MySql, MongoDB, MS Sql, Oracle,

PostgreSql, Redis, Cassandra etc.);

Page 8: архитектура и принципы работы типового Web приложения

Технологический стек

Page 9: архитектура и принципы работы типового Web приложения

Путь запроса1. DNS2. HTTP, SPDY3. Front Server (NGINX)4. Back Server ot Application Server (Apache, PHP-

FPM)5. PHP code, opcode6. Response

Page 10: архитектура и принципы работы типового Web приложения

DNSDNS (англ. Domain Name System — система доменных имён) — компьютерная распределённая система для получения информации о доменах. Чаще всего используется для получения IP-адреса по имени хоста (компьютера или устройства), получения информации о маршрутизации почты, обслуживающих узлах для протоколов в домене (SRV-запись).

Page 11: архитектура и принципы работы типового Web приложения

DNSПуть пользовательского запроса начинается с DNS:1. Пользователь обращается к DNS для получения

IP адреса2. DNS отдает пользователю IP адрес3. Пользователь обращается к WEB-приложению

по IP через TCP/IP4. Открывается сетевое соединение (HTTP, SPDY)

Page 12: архитектура и принципы работы типового Web приложения

How web-browser works?

Page 13: архитектура и принципы работы типового Web приложения

How web-browser works?

Page 14: архитектура и принципы работы типового Web приложения

TCP/IPСтек протоколов TCP/IP — набор сетевых протоколов передачи данных, используемых в сетях, включая сеть Интернет. Название TCP/IP происходит из двух наиважнейших протоколов семейства — Transmission Control Protocol (TCP) и Internet Protocol(IP), которые были разработаны и описаны первыми в данном стандарте. Также изредка упоминается как модель DOD в связи с историческим происхождением от сети ARPANET из 1970 годов (под управлением DARPA, Министерства обороны США).

Page 15: архитектура и принципы работы типового Web приложения

TCP/IP

Page 16: архитектура и принципы работы типового Web приложения

TCP/IPIP — протокол, лежащий в основе Интернета, его название так и расшифровывается: Internet Protocol.

В настоящее время используются следующие две версии протокола IP:

IPv6 — сравнительно новая (текущая версия спецификации опубликована в декабре 1998 [1]); IP-адрес имеет разрядность 128 бит и записывается в виде восьми 16-битных полей, с использованием шестнадцатеричной системы счисления и с возможностью сокращения двух и более последовательных нулевых полей до ::; пример: 2001:db8:42::1337:cafe;

IPv4 — «классическая» (1981 г.[2]); IP-адрес имеет разрядность 32 бита и записывается в виде четырех десятичных чисел в диапазоне 0 … 255 через точку; пример: 192.0.2.34.

Каждый узел может напрямую связаться только с узлами своей сети (например: подключенными к тому же сегменту Ethernet), для определения которых используется адрес сети — часть IP-адреса, определяемая маской сети). Связь с узлами других сетей осуществляется через промежуточные узлы — маршрутизаторы.

Посмотреть, как выглядит маршрут пакета от вашего компьютера к другим узлам, можно с помощью команды traceroute (в Linux) или tracert (в Windows).

Page 17: архитектура и принципы работы типового Web приложения

TCP/IPTCP протокол базируется на IP для доставки пакетов, но добавляет две важные вещи:

установление соединения — это позволяет ему, в отличие от IP, гарантировать доставку пакетов

порты — для обмена пакетами между приложениями, а не просто узлами

Протокол TCP предназначен для обмена данными — это «надежный» протокол, потому что:

1. Обеспечивает надежную доставку данных, так как предусматривает установления логического соединения;

2. Нумерует пакеты и подтверждает их прием квитанцией, а в случае потери организует повторную передачу;

3. Делит передаваемый поток байтов на части — сегменты - и передает их нижнему уровню, на приемной стороне снова собирает их в непрерывный поток байтов.

Page 18: архитектура и принципы работы типового Web приложения

TCP/IPTCP-соединение

Соединение двух узлов начинается с handshake (рукопожатия):

1. Узел A посылает узлу B специальный пакет SYN — приглашение к соединению

2. B отвечает пакетом SYN-ACK — согласием об установлении соединения

3. A посылает пакет ACK — подтверждение, что согласие получено

После этого TCP соединение считается установленным, и приложения, работающие в этих узлах, могут посылать друг другу пакеты с данными.

«Соединение» означает, что узлы помнят друг о друге, нумеруют все пакеты, идущие в обе стороны, посылают подтверждения о получении каждого пакета и перепосылают потерявшиеся по дороге пакеты.

Для узла A это соединение называется исходящим, а для узла B — входящим.

Page 19: архитектура и принципы работы типового Web приложения

HTTP, SPDYHTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — протокол прикладного уровня передачи данных (изначально — в виде гипертекстовых документов в формате «HTML», в настоящий момент используется для передачи произвольных данных).

SPDY (читается как «speedy», «спиди») — протокол прикладного уровня для передачи веб-контента. Протокол разработан корпорацией Google. По замыслу разработчиков, данный протокол позиционируется как замена некоторых частей протокола HTTP — таких, как управление соединениями и форматы передачи данных.

Page 20: архитектура и принципы работы типового Web приложения

HTTP, SPDYКлиент общается с сервером посредством HTTP-сообщенийОбмен сообщениями идёт по обыкновенной схеме «запрос-ответ». :1. Клиент отправляет на сервер запрос2. Сервер генерирует ответ.

Page 21: архитектура и принципы работы типового Web приложения

HTTP/HTTPSСтруктура протокола

Каждое HTTP-сообщение состоит из трёх частей, которые передаются в указанном порядке:

1. Стартовая строка (англ. Starting line) — определяет тип сообщения;

2. Заголовки (англ. Headers) — характеризуют тело сообщения, параметры передачи и прочие сведения;

3. Тело сообщения (англ. Message Body) — непосредственно данные сообщения. Обязательно должно отделяться от заголовков пустой строкой.

Заголовки и тело сообщения могут отсутствовать, но стартовая строка является обязательным элементом, так как указывает на тип запроса/ответа. Исключением является версия 0.9 протокола, у которой сообщение запроса содержит только стартовую строку, а сообщения ответа только тело сообщения.

Для версии протокола 1.1, сообщение запроса обязательно должно содержать заголовок Host.

Page 22: архитектура и принципы работы типового Web приложения

HTTP/HTTPSСтартовая строкаСтартовые строки различаются для запроса и ответа. Строка запроса выглядит так:

GET URI — для версии протокола 0.9;

Метод URI HTTP/Версия — для остальных версий.

Здесь:

Метод (англ. Method) — название запроса, одно слово заглавными буквами. В версии HTTP 0.9 использовался только метод GET, список запросов для версии 1.1 представлен ниже;

URI определяет путь к запрашиваемому документу;

Версия (англ. Version) — пара разделённых точкой цифр. Например: 1.0.

Стартовая строка ответа сервера имеет следующий формат: HTTP/Версия КодСостояния Пояснение, где:

Версия — пара разделённых точкой цифр, как в запросе;

Код состояния (англ. Status Code) — три цифры. По коду состояния определяется дальнейшее содержимое сообщения и поведение клиента;

Пояснение (англ. Reason Phrase) — текстовое короткое пояснение к коду ответа для пользователя. Никак не влияет на сообщение и является необязательным.

Например, стартовая строка ответа сервера на предыдущий запрос может выглядеть так:

HTTP/1.0 200 OK

Page 23: архитектура и принципы работы типового Web приложения

HTTP/HTTPSМетоды

Метод HTTP (англ. HTTP Method) — последовательность из любых символов, кроме управляющих и разделителей, указывающая на основную операцию над ресурсом.

Каждый сервер обязан поддерживать как минимум методы GET и HEAD. Если сервер не распознал указанный клиентом метод, то он должен вернуть статус 501 (Not Implemented). Если серверу метод известен, но он неприменим к конкретному ресурсу, то возвращается сообщение с кодом 405 (Method Not Allowed).

Кроме методов GET и HEAD, часто применяется метод POST.

Page 24: архитектура и принципы работы типового Web приложения

Front WEB-serverПервое звено в инфраструктуре, которое обслуживает запрос

пользователя

Может быть много, один за одним (могут решать разные задачи)

Задача front web-сервера - обработать входящий запрос и решить, что с

ним делать дальше

На front web-сервер обычно ставяться быстрые web-сервера (максимально

быстрые) и универсальные (NGINX, lighttpd)

Page 25: архитектура и принципы работы типового Web приложения

Front WEB-serverОбщается с пользователем (решает проблему

медленных пользователей)Способен сам отдавать статику из файловой

системы (картинки, css, js и т.д.) без участия какого либо дополнительного кода

Page 26: архитектура и принципы работы типового Web приложения

Application ServerСервер на котором работает наше приложениеВзаимодействует с: front web-сервером базой данных кешом внешними API файловой системой

Page 27: архитектура и принципы работы типового Web приложения

Application ServerВключает в себя:WEB-сервер (Apache) или Fast CGI (PHP-FPM)Интерпретатор языка (наш код работает внутри

сервера)Application (Динамика(PHP code, other code,

binaries))Компоненты Application сервера работают в

связке, в рамках единого процесса

Page 28: архитектура и принципы работы типового Web приложения

Application (PHP-code)Реализует какую-то логикуВзаимодействует с :

Базой данныхВнешними APIКешомСтатическими файлами

Формирует ответ (html, json, pdf etc.)

Page 29: архитектура и принципы работы типового Web приложения

Response (ответ)1. Application возвращает ответ back серверу2. Back сервер отдает ответ front серверу (по

протоколу HTTP либо Fastcgi)3. Front сервер, по тому же соединению, по

протоколу HTTP либо SPDY отдает ответ клиенту

4. Клиент получает ответ и рендерит его в браузере

Page 30: архитектура и принципы работы типового Web приложения

Архитектура PHP приложения

Page 31: архитектура и принципы работы типового Web приложения

Уровни абстракцииКод выполняющий какую-то одну операцию

должен находиться на одном уровне абстракции

Приложение должно разделяться на уровни, более высокие уровни должны опираться на более низкие

Каждый уровень выполняет свою задачу и предоставляет сервис для более высокого уровня

Page 32: архитектура и принципы работы типового Web приложения

Компонентный подходПриложение должно быть модульным

Разделять на модули необходимо в зависимости от реализации логики, (например модуль работы с хранилищем данных, модуль бизнес-логики)

Модули должны в рамках всего приложения (back-end application, front-end application, storage, API Access Application)

Модули должны быть автономными

Модули должны взаимодействовать через API

Необходимо абстрагировать способ взаимодействия между компонентами от самих компонентов (интерфейсы между компонентами)

Page 33: архитектура и принципы работы типового Web приложения

Front-endЭто часть приложенияЭто сайтЭто один из способов доступа к back-end`у

Page 34: архитектура и принципы работы типового Web приложения

Back-endЭто ядро приложения (логика приложения)

Интерфейсом beck-end`а может выступать:

API CLI (command line interface) - в данном случае front-end вообще не нужен

API Access Interface - реализуется доступ к бизнес логики для front-end`а либо API Access Application

Page 35: архитектура и принципы работы типового Web приложения

Business logicЭто основная задача приложения:

Обработка данных

Логические преобразования

Алгоритмические вычисления

etc.

Сосредоточена в back-end application

Для реализации чаще всего используются MVC фреймворки

Page 36: архитектура и принципы работы типового Web приложения

Persistence LogicРеализация логики хранения информации CRUD+ (Create, Read, Update, Delete +

расширенные возможности)Что нужно сохранить, куда, когда и в каком виде

Page 37: архитектура и принципы работы типового Web приложения

ORM, DBALИнструменты работы с хранилищем данныхЗапись/чтение из конкретной сущности

конкретного хранилищаАбстракция над хранилищемЛогика преобразования объектов в данные

которые воспринимает хранилище