Архитектура современных информационных систем. Введение

Содержание

Слайд 2

О чем думает мир

Как обрабатывать все запросы?
Где и как хранить данные?
Сколько это

О чем думает мир Как обрабатывать все запросы? Где и как хранить
будет стоить?

Слайд 3

Как решить проблему высокой нагрузки?

Как решить проблему высокой нагрузки?

Слайд 4

Бизнес и разработка

Стремится минимизировать издержки
Полагается на разработчиков в части выбора технологии
Хочет все

Бизнес и разработка Стремится минимизировать издержки Полагается на разработчиков в части выбора
быстро, качественно и недорого

Одно не может без другого

Стремится облегчить себе сам процесс
Не любит изобретать «велосипеды»
Сложно нормировать время
Творческий процесс

Бизнес

Разработка

Слайд 5

Robert Martin, «Clean Architecture»

«Чтобы создать систему, дизайн и архитектура которой способствуют уменьшению

Robert Martin, «Clean Architecture» «Чтобы создать систему, дизайн и архитектура которой способствуют
трудозатрат и увеличению продуктивности, нужно знать, какие элементы архитектуры ведут к этому»

Слайд 6

Что такое архитектура?

Бизнес-задача
Потребители
Доступный бюджет

Что определяет архитектуру приложения?

Что такое архитектура? Бизнес-задача Потребители Доступный бюджет Что определяет архитектуру приложения?

Слайд 7

В чем выражается архитектура?

Трудозатраты при разработке и доработке
Красиво выглядящие схемы приложения (в

В чем выражается архитектура? Трудозатраты при разработке и доработке Красиво выглядящие схемы
хорошей архитектуре она даже схематично выглядит красиво)
Скорость, отзывчивость, безопасность, отказоустойчивость
Количество матов разработчиков при доработке (меньше - лучше)

Хорошая или плохая?

Слайд 8

Современный мир

Разнообразный стек языков программирования под любые задачи (C#, Java, C++, Go,

Современный мир Разнообразный стек языков программирования под любые задачи (C#, Java, C++,
JS)
Разнообразный стек технологий под эти языки программирования (ASP.Net, Spring, React и т.д.)
Разнообразное ПО для ускорения доставки и развертывания (CI/CD) (Jenkins, Kubernetes)
Разнообразное ПО для хранения и передачи данных (Apache Kafka, RabbitMQ, PostgreSQL, MongoDB)

Что есть для реализации?

Слайд 9

Архитектура информационных систем

Архитектура, клиент-сервер

Архитектура информационных систем Архитектура, клиент-сервер

Слайд 10

Виды архитектуры и виды ПО

Как может выглядеть ваше приложение?

Только клиент

Клиент-сервер

Виды архитектуры и виды ПО Как может выглядеть ваше приложение? Только клиент Клиент-сервер

Слайд 11

Для чего нужен клиент?

Ваше приложение не должно коммуницировать с чем либо другим
Ваше

Для чего нужен клиент? Ваше приложение не должно коммуницировать с чем либо
приложение если и содержит БД, то ему не нужно синхронизировать её с другими приложениями
Можно пренебречь безопасностью

Когда вам хватить одного компьютера?

Слайд 12

Для чего нужен сервер?

Вам нужны какие-либо внешние данные, которые вы не можете

Для чего нужен сервер? Вам нужны какие-либо внешние данные, которые вы не
получить без внешних систем
Вам нужно синхронизировать данные с внешними системами
Вам нужно контролировать безопасность

Когда нужно подключить сервер?

Слайд 13

База данных

Вы будете строго ограничивать роли в БД для каждого пользователя
Вы сможете

База данных Вы будете строго ограничивать роли в БД для каждого пользователя
производить обработку в БД посредством процедур и функций
Маленький проект с небольшим количеством клиентов, которые не могут конфликтовать друг с другом, одновременно меняя внешние данные
Или нет, или есть всего 1-2 внешняя система

База данных может быть сервером, если

Слайд 14

Сервис перед базой данных

У вас на сервере должны производится сложные расчеты или

Сервис перед базой данных У вас на сервере должны производится сложные расчеты
обновления данных
У вас может быть бесконечное количество клиентов, которых нужно разводить между собой

Перед базой данных нужно ставить сервис, если

Сервис позволяет

Производить сложные операции обновления данных, сохраняя при этом разграничения пользователей
Делает базу данных независимой от клиента

Слайд 15

Сервис как абстракция

S - Single Responsibility - каждая единица системы выполняет только

Сервис как абстракция S - Single Responsibility - каждая единица системы выполняет
одну и только свою функцию
O - Open-Closed - единица системы открыта для расширения, но закрыта для изменения
L - Liskov substitution - единицы системы должны быть заменяемыми другими с теми же контрактами без нарушения её работы
I - Interface segregation - лучше много маленьких интерфейсов, чем один большой
D - Dependency Inversion - единицы системы должны быть завязаны на абстракциях, а не на конкретной реализации

И причем тут SOLID

Слайд 16

Любой клиент, любая база

Главное - контракт

Desktop-приложение

Сайт

Мобильное приложение

Собака. А вдруг.

SQL

NoSQL

Другой сервис

Файловая система

Любой клиент, любая база Главное - контракт Desktop-приложение Сайт Мобильное приложение Собака.

Слайд 17

Сервис - узкое место?

Для сервиса нужен особо тщательный подход к архитектуре.

А как

Сервис - узкое место? Для сервиса нужен особо тщательный подход к архитектуре. А как расширить?
расширить?

Слайд 18

Монолиты и микросервисы

Выполняют множество функций
Цельный кусок
Легки в развертывании

А что ж лучше?

Каждый сервис

Монолиты и микросервисы Выполняют множество функций Цельный кусок Легки в развертывании А
- одна функция
Распределяют нагрузку
Сложны в развертывании

Монолит

Микросервисы

Слайд 19

Взаимодействие

Клиент общается с сервером

Взаимодействие Клиент общается с сервером

Слайд 20

Via Internet

Взаимодействие по протоколу HTTP
Клиент делает запрос — сервер отвечает
Составные части:
Глагол: GET

Via Internet Взаимодействие по протоколу HTTP Клиент делает запрос — сервер отвечает
http://google.com/search?query=hello&p=20
URL - GET http://google.com/search?query=hello&p=20
Params: GET http://google.com/search?query=hello&p=20
Headers — заголовки
Body: пустое, файл, текст

HTTP

Слайд 21

REST-API

Стандарт взаимодействия по протоколу HTTP
Неофициально принят в мире для упрощения разработчикам —

REST-API Стандарт взаимодействия по протоколу HTTP Неофициально принят в мире для упрощения
все сервисы по REST-API работают одинаково
Основные глаголы: GET, POST, PUT, DELETE
Путь=ресурс. http://localhost/students — каталог ресурсов, http://localhost/students/1 — ресурс
Вся работа идет только с цельными ресурсами. Никаких http://localhost/addStudent.

Общие положения

Слайд 22

REST-API

GET — получение данных с ресурса. GET http://localhost/students — получение списка всех

REST-API GET — получение данных с ресурса. GET http://localhost/students — получение списка
студентов, GET http://localhost/students/1 — получение студента с ID 1, GET http://localhost/students?q='Иванов' — поиск по списку студентов с параметрами. Идемпотентен.
POST — создание нового ресурса. POST http://localhost/students — создание и добавление нового студента в каталог. Неидемпотентен.
PUT — обновление существующего ресурса. POST http://localhost/students/1 — обновляет старого студента с ID 1 по новым данным. Идемпотентен.
DELETE — удаление ресурса. DELETE http://localhost/students/1 — удаляет студента с ID 1. Идемпотентен.

Глаголы

Слайд 23

REST-API

HTTP 200 — результат успешно получен
HTTP 201 — создано. Может содержать

REST-API HTTP 200 — результат успешно получен HTTP 201 — создано. Может
ссылку на созданный ресурс и редирект.
HTTP 301-302 — ресурс по какой-то причине перемещен навсегда/временно.

Статусы

Слайд 24

REST-API

HTTP 400 — некорректный запрос. Ошибка в параметрах.
HTTP 401 — требуется авторизация
HTTP

REST-API HTTP 400 — некорректный запрос. Ошибка в параметрах. HTTP 401 —
403 — авторизация прошла, но нет доступа.
HTTP 404 — ресурс не найден
HTTP 405 — нельзя использовать такой глагол
HTTP 408 — время ожидания истекло
HTTP 414 — URL слишком длинный
HTTP 415 — неподдерживаемый тип данных
HTTP 418 — «Я чайник»
HTTP 429 — слишком много запросов
HTTP 451 — «Недоступно по юридическим причинам»

Статусы «Ошибки клиента»

Слайд 25

REST-API

HTTP 500 — внутренняя ошибка сервера
HTTP 501 — неверный метод
HTTP 502 —

REST-API HTTP 500 — внутренняя ошибка сервера HTTP 501 — неверный метод
Bad Gateway — ошибка шлюза/прокси
HTTP 503 — Сервис недоступен
HTTP 504 — Gateway Timeout — шлюз/прокси слишком долго ждал ответ

Статусы «Ошибки сервера»

Слайд 26

REST-API

Формат JSON — объект (Map, Dictionary) в читабельном человеку формате

Объекты

REST-API Формат JSON — объект (Map, Dictionary) в читабельном человеку формате Объекты

Слайд 27

SOAP

Тот же объект, но формате XML
Строится по XSD-схеме
Используется в webservices

XML как описание

SOAP Тот же объект, но формате XML Строится по XSD-схеме Используется в
объекта

Слайд 28

MediaType

Form-data — Формы с веб страниц
X-www-form-urlencoded — кодированные даты с формы
Raw —

MediaType Form-data — Формы с веб страниц X-www-form-urlencoded — кодированные даты с
Text, JSON, XML, HTML
Binary — Файлы
GraphQL

Слайд 29

WebSocket

Прямое соединение в Socket.
Работает по принципу тесного взаимодействия и пересылки сообщений по

WebSocket Прямое соединение в Socket. Работает по принципу тесного взаимодействия и пересылки
сокету.
Более тесное общение — сокет работает всегда, взаимодействие идет всегда.

Слайд 30

Server-Sent Events

Упрощенная версия WebSocket
Слушатель слушает, вещатель отправляет сообщения
Соединение постоянно

Server-Sent Events Упрощенная версия WebSocket Слушатель слушает, вещатель отправляет сообщения Соединение постоянно

Слайд 31

Базы данных

Типы, виды, зачем и когда нужны

Базы данных Типы, виды, зачем и когда нужны

Слайд 32

Базы данных

База данных в данном случае — любое хранилище для любых данных.
Базы

Базы данных База данных в данном случае — любое хранилище для любых
данных:
Память приложения
Файлы
СУБД

Общие положения

Слайд 33

Базы данных

Система взаимосвязанных таблиц
Данные хранятся по столбцам
Каждая таблица — отдельная сущность
Взаимодействие через

Базы данных Система взаимосвязанных таблиц Данные хранятся по столбцам Каждая таблица —
SQL-запросы
Ключи, индексы
Представители: MySQL, Microsoft SQL Server, PostgreSQL, OracleDB
Транзакционность — гарантия того, что пока идет взаимодействие — данные не изменятся из-за других источников

Реляционные (SQL)

Слайд 34

Базы данных

Данные хранятся в виде полноценных обособленных документов/объектов
Различные форматы хранения — JSON,

Базы данных Данные хранятся в виде полноценных обособленных документов/объектов Различные форматы хранения
файлы и т.п.
У каждого документа свой ID (ключ-значение)
Свой язык запросов
Представители: MongoDB, CouchDB, Redis

Документные (NoSQL)

Слайд 35

Базы данных

Вызов функции БД для её обработки на стороне БД
Если нужно единоразово

Базы данных Вызов функции БД для её обработки на стороне БД Если
собрать данные из множества таблиц/документов, при этом нет возможности сделать это в один запрос.
Если одну и ту же сложную операцию с данными в БД нужно проводить в нескольких приложениях, работающих с этой БД

Функции

Слайд 36

Базы данных

Кластеризация — несколько инстансов базы данных даже на разных серверах работают

Базы данных Кластеризация — несколько инстансов базы данных даже на разных серверах
как одна.
Master — главная БД, к которой доступны все операции, как чтения, так и записи
StandBy — вспомогательные БД, которые доступны только для чтения и «зеркалят» данные с master-базы
Позволяет добиться большей производительности — операции записи более «тяжелые».

Кластеризация, Master и StandBy

Слайд 37

Базы данных

На случай, если одни и те же данные могут быть обработаны/использованы

Базы данных На случай, если одни и те же данные могут быть
несколькими приложениями
Механизм: делается запрос на изменение/обработку/взятие данных. Если до этого блокировка не была поставлена — она ставится и данные отдаются в обработку. Если блокировка уже стоит — база отвечает отказом.
Имеет большое значение, когда инстансов приложений становится больше чем 1.

Блокировки данных

Слайд 38

Монолиты

Как, когда и зачем

Монолиты Как, когда и зачем

Слайд 39

Монолиты

Система едина, поставляется и развертывается целиком
Возможно отключение отдельных функций, при этом сама

Монолиты Система едина, поставляется и развертывается целиком Возможно отключение отдельных функций, при
кодовая база останется той же
Все компоненты системы взаимосвязаны
Упадет одна часть системы — упадет вся система

Самый простой способ сделать систему

Слайд 40

Монолиты

Система небольшая
Компоненты системы взаимодействуют слишком тесно и часто, чтобы дробить её
Небольшие бюджеты
Небольшие

Монолиты Система небольшая Компоненты системы взаимодействуют слишком тесно и часто, чтобы дробить
бюджеты на эксплуатацию, настройку и сопровождение

Когда могут выиграть?

Слайд 41

Монолиты

Большие системы
Компоненты взаимосвязаны, хотя не должны
Требуется надежность всей системы
Требуется недопустить ситуации «Упала

Монолиты Большие системы Компоненты взаимосвязаны, хотя не должны Требуется надежность всей системы
одна часть системы — упала вся система»

Когда могут проиграть?

Слайд 42

Микросервисы

Как, когда и зачем

Микросервисы Как, когда и зачем

Слайд 43

Микросервисы

Все компоненты системы разделены на мелкие приложения
Компоненты системы общаются между собой через

Микросервисы Все компоненты системы разделены на мелкие приложения Компоненты системы общаются между
сеть
Одно приложение никак не влияет на другие
Отключение функций ведет к полному отключению отдельных приложений

Самый сложный способ сделать систему

Слайд 44

Микросервисы

Система очень большая
Компоненты системы могут работать независимо друг от друга или с

Микросервисы Система очень большая Компоненты системы могут работать независимо друг от друга
минимальной зависимостью
Есть средства и квалификация на архитектуру, развертывание и эксплуатацию

Когда могут выиграть?

Слайд 45

Микросервисы

Недостаточная квалификация
Низкий бюджет на эксплуатцию и сопровождение
Система слишком маленькая и её не

Микросервисы Недостаточная квалификация Низкий бюджет на эксплуатцию и сопровождение Система слишком маленькая
требуется делить еще сильнее

Когда могут проиграть?

Слайд 46

Общие элементы архитектур

Общие элементы архитектур

Слайд 47

Балансировка нагрузки

У системы есть несколько инстансов.
Балансировка нагрузки — некий компонент сам распределяет

Балансировка нагрузки У системы есть несколько инстансов. Балансировка нагрузки — некий компонент
запросы к инстансам системы и её работу в зависимости от текущей нагрузки инстансов.
Позволяет распределить работу системы равномерно.

Когда нельзя слишком сильно нагружать один компонент

Слайд 48

Gateway

У системы есть несколько инстансов.
У системы есть несколько отдельных компонентов.
Идет запрос к

Gateway У системы есть несколько инстансов. У системы есть несколько отдельных компонентов.
http://localhost/API/methodName. В зависимости от API/methodName Gateway сам отправит запрос нужному компоненту, получит ответ и вернет пользователю
Позволяет сделать единую точку доступа ко всем компонентам системы и настраивать её отдельно от приложений

Единый вход во все приложения

Слайд 49

Аутентификациия и авторизцаия

Авторизация — проверка подленности, например, по паролю.
Аутетифкация — процесс проверки

Аутентификациия и авторизцаия Авторизация — проверка подленности, например, по паролю. Аутетифкация —
доступа пользователя к определенному ресурсу.

Как отследить пользователя

Слайд 50

Аутентификация и авторизация

Сессия — значение, позволяющие системе определить пользователя, что послал сообщение.
Настраивается

Аутентификация и авторизация Сессия — значение, позволяющие системе определить пользователя, что послал
и управляется системой. Передается в Header-ах
Токен — сессия, но с условием Token и Refresh Token.
Token — токен, с которым идет обращение к системе. Имеет срок жизни.
После того, как срок жизни Token пройдет — нужно получить новый с помощью Refresh Token, который тоже имеет срок жизни.
После того, как срок жизни Refresh Token пройдет — нужно авторизоваться заново.

Сессии и токены

Слайд 51

Брокеры сообщений

Работают по принципу «В компонент отправляется сообщение». И все.
Асинхронная работа. Сообщение

Брокеры сообщений Работают по принципу «В компонент отправляется сообщение». И все. Асинхронная
отправляется в брокер и компонент забывает о нем.
Компонент не знает, кому и когда и для каких целей нужно это сообщение и будет ли оно доставлено ему и каким образом будет доставлено. Ему достаточен тот факт, что он его отправил
Примеры: Apache Kafka, Rabbit MQ

Что это и зачем нужно

Сервис 1

Сервис 2

Брокер

Слайд 52

Контейнеризация

Контейнеризация - процесс упаковки системы в отдельную изолированную ОС.
Ситуация: у вас

Контейнеризация Контейнеризация - процесс упаковки системы в отдельную изолированную ОС. Ситуация: у
есть система, которая запускается на Linux. Благодаря контейнеризации вы создаете виртуальную машину под неё на базе Linux, после чего получившийся контейнер можно будет запустить на любой ОС, которая поддерживает контейнеризацию.
Контейнер содержит ТОЛЬКО необходимые для приложения компоненты, без прочих служб
Все контейнеры друг от друга изолированы и независимы
Самый распространенный механизм: Docker
Имя файла: Архитектура-современных-информационных-систем.-Введение.pptx
Количество просмотров: 30
Количество скачиваний: 1