Системный анализ | Дмитрий Помаскин
1.38K subscribers
44 photos
150 videos
266 links
📍Обучение системному анализу
📍Полезные материалы для развития навыков
📍Разбор практических кейсов по системному анализу и архитектуре
📍Индивидуальные консультации (менторство)

Моя онлайн-школа:
https://system-analysis.skillspace.ru
Download Telegram
Провели первую волну практических интенсивов. 😎

В основном всё прошло по плану😃

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

Все большие молодцы!💪

Под этим постом можете поделиться своим впечатлением :)

P.S. Уже завтра в 18:00 по МСК будет доступна запись на все интенсивы августа, об открытии сообщу отдельным постом.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5
‼️Открыта запись на практический интенсив по БД‼️

Тема: Базы данных.
Уровень: С нуля.
Кол-во участников: до 5.
Длительность: ~4 часа.
Программа:
Типы баз данных;
Проектирование БД;
Описание БД с помощью ER-диаграммы;
Нормализация;
Базовый SQL для аналитиков.

Практика:
Самостоятельное проектирование БД для сервиса;
Описание этой БД с помощью ER-диаграммы;
Написание SQL-запросов.

👉 Для записи переходите по ссылке.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
‼️Открыта запись на практический интенсив по REST API‼️

Тема: Проектирование REST API.
Уровень: junior.
Требуемые навыки: Умение читать ER-диаграмму.
Кол-во участников: до 4.
Длительность: ~3.5 часа.
Программа:
Форматы данных;
HTTP-методы и их свойства;
REST и RESTfull;
Обработка ошибок в синхронных интеграциях.

Практика:
Проектирование REST API для нового сервиса;
Внедрение пагинации и фильтрации;
Swagger;
Postman.

👉 Для записи переходите по ссылке.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍2
‼️Открыта запись на практический интенсив по брокерам сообщений‼️

Тема: Брокеры сообщений.
Уровень: Middle.
Требуемые навыки: Понимание принципов работы распределённых систем.
Кол-во участников: до 4.
Длительность: ~3.5 часа.
Программа:
Типы брокеров (модель обмена, гарантия доставки, умные/глупые брокеры);
RabbitMQ;
ApacheKafka;
Transaсtional outbox;
Обработка ошибок в асинхронных интеграциях.

Практика:
Внедрение брокеров в распределенную систему;
Описание формата взаимодействия.

👉 Для записи переходите по ссылке.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
🗓 Расписание всех интенсивов на август 🗓

🔸03.08 12:00 МСК (Воскресенье) Проектирование REST API;
🔸
04.08 19:00 МСК (Понедельник) — Базы данных;
🔸
11.08 19:00 МСК (Понедельник)Проектирование REST API;
🔸
24.08 12:00 МСК (Воскресенье)Брокеры сообщений;
🔸
25.08 19:00 МСК (Понедельник)Брокеры сообщений.

Подробная информация о программах в постах выше ☝️

Для тех, кто не понимает, о каких интенсивах речь, подробности тут.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍3
Media is too big
VIEW IN TELEGRAM
До какого уровня стоит декомпозировать систему на микросервисы?

Не стоит делать этого интуитивно, привязываясь к технологиям или бизнес-процессам.

Моя концепция — декомпозировать систему до уровня одной транзакции. Как только вы понимаете, что дальнейшая декомпозиция приведёт к распределенным транзакциям в вашей системе, то стоит остановиться. Таким образом, вы сможете избежать проблем согласованности данных и внедрения сложных механизмов для работы с распределенными транзакциями, такими как SAGA.

P.S. Это, конечно, не серебряная пуля, но большинство кейсов однозначно покрывает.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍5👏2🤯1
Media is too big
VIEW IN TELEGRAM
🚩Ошибка проектирования: нарушение принципа независимости микросервисов.

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

Агрегация данных, полученных из нескольких сервисов на клиенте.
Такой подход можно использовать, когда нет необходимости в серверной фильтрации или пагинации.

Реализация промежуточного сервиса для предварительной агрегации данных.
При таком подходе запрос на получение данных приходит только в один сервис, на котором вы сможете реализовать серверную фильтрацию и пагинацию при больших объемах данных.

👇Ниже приложу схемы для наглядности👇

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥5👏2
Media is too big
VIEW IN TELEGRAM
🚩Ошибка проектирования: неверное переиспользование готовых методов.

Для реализации задачи вам необходима малая часть атрибутов по всем объектам, хранящимся в базе данных.
Пример: реализация на фронте выпадающего списка, состоящего из наименований объектов.

Использовать базовый метод сервиса на получение списка объектов со всеми его параметрами.
Такой подход приводит к кратному увеличению сетевого трафика внутри вашей системы, а также к таймаутам при исполнении таких запросов.

Реализовать отдельный метод, который будет возвращать только те параметры, которые вам необходимы.
Такой метод будет работать быстро и не будет генерировать лишний трафик внутри системы.

P.S. Обратная сторона этой ошибки — наплодить "зоопарк" очень похожих друг на друга методов, поэтому не переусердствуйте :)

Системный анализ | Дмитрий Помаскин
🔥9👍2🤔2
❗️Информация по оставшимся слотам на интенсивах❗️

Проектирование REST API:
🔸3 места — 03.08 12:00 МСК (Воскресенье);
🔸4 места
— 11.08 19:00 МСК (Понедельник).

Базы данных:
🔸3 места — 04.08 19:00 МСК (Понедельник).

Брокеры сообщений:
🔸3 места
— 24.08 12:00 МСК (Воскресенье);
🔸2 места
— 25.08 19:00 МСК (Понедельник).

Подробная информация о программах:
Проектирование REST API;
Базы данных;
Брокеры сообщений.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3
Media is too big
VIEW IN TELEGRAM
🚩Ошибка проектирования: пренебрежение асинхронными взаимодействиями.

Пример: вам необходимо синхронизировать данные между сервисами внутри системы или получать обновления из внешних источников.

Использовать готовые синхронные методы для обновления данных в целевых базах.
Такой подход может привести к потере части данных при большом потоке запросов.

Для каждого потока данных реализовать отдельные топики\очереди в брокерах сообщений.
Вы не потеряете сообщения даже при временной недоступности сервиса консьюмера.

P.S. Не
забывайте о паттернах, влияющих на гарантию доставки, о которых я рассказывал ранее.

Системный анализ | Дмитрий Помаскин
3👍5🔥2
Media is too big
VIEW IN TELEGRAM
💬 Интерактивный кейс: медленная скорость записи в БД

Кейс:
Имеется топик Kafka, который читает сервис. Задача сервиса — складывать все полученные сообщения в свою базу данных.

Проблема:
Из-за медленных дисков база не успевает сохранять все полученные данные, и скорость чтения топика замедляется — растёт лаг.

Задача:
Сделать так, чтобы база успевала записывать все данные и лаг на топике не возникал.

💬 В комментариях предлагайте свои варианты решения проблемы.

❗️А в следующих видео расскажу о своих вариантах и объясню, от чего отталкиваться при выборе решения.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
Media is too big
VIEW IN TELEGRAM
❗️Один из способов решения интерактивного кейса.

Промежуточная быстрая БД для быстрого разбора сообщений из топика с последующим переносом в основную БД.

1️⃣ Поднимаем Redis, в который будем писать все сообщения и накапливать батч для вставки в основную БД;
2️⃣ Отдельным воркером перекладываем батчи в основную БД одним запросом;
3️⃣ Не забываем про отказоустойчивость Redis;
4️⃣ Не забываем про мониторинг очереди сообщений в Redis.

P.S. Данный вариант подойдёт, если допустима небольшая задержка перед вставкой данных в основную БД.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4👎1
❗️Остался один слот на это воскресенье 03.08 12:00 МСК на интенсив по REST API❗️

Подробнее:
Тема: Проектирование REST API.
Уровень: junior.
Требуемые навыки: Умение читать ER-диаграмму.
Кол-во участников: до 4.
Программа:
Форматы данных;
HTTP-методы и их свойства;
REST и RESTfull;
Обработка ошибок в синхронных интеграциях.

Практика:
Проектирование REST API для нового сервиса;
Внедрение пагинации и фильтрации;
Postman.

👉 Для записи переходите по ссылке.

Для тех, кто не понимает, о каких интенсивах речь, подробности тут.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Media is too big
VIEW IN TELEGRAM
❗️Второй способ решения интерактивного кейса.

Сам кейс тут 👈

Шардирование основной БД для распределения операций записи по шардам.

1️⃣ Шардируем нашу основную БД;
2️⃣ В качестве ключа шардрования лучше всего подойдет hash — для равномерного распределения;
3️⃣ Операции записи распределятся по шардам, что кратно ускорит обработку потока сообщений.

⚠️ Диски под шардами должны быть физически изолированы.

P.S. Данный вариант имеет риск снова "упереться" в диск при неравномерном потоке сообщений (на его пиках).

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4
❗️Обновление программы интенсива по REST API❗️

Добавил в программу работу со Swagger.

Теперь практика выглядит следующим образом:
🔸Проектируем REST API для нового сервиса;
🔸Описываем его в Swagger;
🔸Собираем вызовы сервиса через Postman (сервис реальный, с логикой и БД).

Следующий интенсив 11.08 в 19:00 МСК, записаться тут 👈

P.S. На брокерах сообщений осталось всего 2 места на 25.08, группа 24.08 полностью набрана.

UPD: На брокерах 1 слот
.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4
Media is too big
VIEW IN TELEGRAM
🚩Ошибка при проектировании REST API.

Жестко привязывать параметры API к модели данных в БД.

Упростить API, передавая минимально необходимый набор параметров, а дополнительную логику и преобразования делать на уровне логики сервиса.

Пример: добавление новой позиции в заказ с пересчётом суммы заказа.

1️⃣ В API передаем только параметры новой позиции, не нужно заранее рассчитывать новую сумму на фронте и передавать её на вход.
2️⃣ Сервис при получении такого запроса выполняет в одной транзакции 2 операции:
- Добавляет новую запись в таблицу позиций заказа;
- Обновляет сумму заказа в таблице заказов.

Системный анализ | Дмитрий Помаскин
👍9🔥2
Media is too big
VIEW IN TELEGRAM
🚩Ошибка при проектировании REST API: высокая связность клиентской части и модели данных.

Пример: У вас есть 2 таблицы: основная таблица со списком товаров и таблица с вариантами этих товаров (размеры, цвета и тд).

Задача:
Получать список товаров отдельно и получать товары со всеми вариантами.

Реализовать один универсальный метод и через дополнительные параметры "достраивать" join между таблицами, вытаскивая полный набор атрибутов.

Реализовать два отдельных метода и возвращать в них только нужный набор атрибутов.

Системный анализ | Дмитрий Помаскин
👍6🔥5
❗️Осталось 2 слота на понедельник 11.08 19:00 МСК на интенсив по REST API❗️

Подробнее:
Тема: Проектирование REST API.
Уровень: junior.
Требуемые навыки: Умение читать ER-диаграмму.
Кол-во участников: до 4.
Программа:
Форматы данных;
HTTP-методы и их свойства;
REST и RESTfull;
Обработка ошибок в синхронных интеграциях.

Практика:
Проектирование REST API для нового сервиса;
Внедрение пагинации и фильтрации;
Swagger;
Postman.

👉 Для записи переходите по ссылке.

Для тех, кто не понимает, о каких интенсивах речь, подробности тут.

UPD: 1 слот

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3🤔1
Media is too big
VIEW IN TELEGRAM
Немного теории: WebSocket.

ℹ️ WebSocket — это самостоятельный протокол, предназначенный для двустороннего обмена сообщениями, c использованием постоянного соединения.

Важно помнить:
1️⃣ WebSocket — самостоятельный протокол;
2️⃣ Handshake — HTTP-запрос с заголовком Upgrade: websocket, который используется для установки соединения. Отправляется от клиента к серверу.
3️⃣ Ping/pong — механизм, с помощью которого сервер проверяет присутствие клиента на той стороне. Позволяет не держать "мертвые" соединения.

P.S. На этой неделе поговорим про real-time интеграции.

Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥11