This media is not supported in your browser
VIEW IN TELEGRAM
Сервис будет stateless, так как он сам не хранит никакого состояния, при этом база данных под ним будет statefull.
Усложним задачу:
Теперь сервис помимо REST API имеет web-socket соединение со всеми клиентами для отправки им уведомлений. Соединение устанавливается один раз и держится, пока клиент находится в системе.
Останется ли такой сервис stateless или он станет statefull?
Опрос ниже
Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍8🔥5
Каким будет сервис после добавления web-socket?
Final Results
53%
Останется stateless
47%
Станет statefull
🤔5
This media is not supported in your browser
VIEW IN TELEGRAM
Сервис станет statefull. Для того, чтобы отправлять уведомления пользователям, ему необходимо хранить состояния открытых web-socket соединений.
Проще говоря, ему нужно помнить всех пользователей, которые в данный момент находятся в системе, чтобы отправлять им уведомления.
P.S. Дальше усложнять не будем, потому что пятница. Всем хороших выходных :)
Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥6
Media is too big
VIEW IN TELEGRAM
Вначале вспомним немного теории, а в последних видео расскажу кейсы, в которых я обжигался при неправильном использовании этого подхода.
1️⃣ Сервис решает несколько связанных задач в одной бизнес-области, а микросервис выполняет только одну бизнес-задачу.
2️⃣ В service-oriented подходе часто встречается использование общей базы данных на несколько сервисов. В микросервисах принято придерживаться подхода database-per-service, то есть у каждого микросервиса своя база данных.
Действительно, в service-oriented часто использовались шины данных, но если вы своему сервису сделаете REST API и начнёте взаимодействовать с ним через него вместо шины данных, то он не станет микросервисом. Поэтому это отличие достаточно спорное.
Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥8
Провели первую волну практических интенсивов. 😎
В основном всё прошло по плану😃
У участников был боевой настрой, задавали много дополнительных вопросов, предлагали нестандартные решения практических задач.
Все большие молодцы!💪
Под этим постом можете поделиться своим впечатлением :)
P.S. Уже завтра в 18:00 по МСК будет доступна запись на все интенсивы августа, об открытии сообщу отдельным постом.
Системный анализ | Дмитрий Помаскин
В основном всё прошло по плану
У участников был боевой настрой, задавали много дополнительных вопросов, предлагали нестандартные решения практических задач.
Все большие молодцы!
Под этим постом можете поделиться своим впечатлением :)
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.
Уровень: 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. Обратная сторона этой ошибки — наплодить "зоопарк" очень похожих друг на друга методов, поэтому не переусердствуйте :)
Системный анализ | Дмитрий Помаскин
Для реализации задачи вам необходима малая часть атрибутов по всем объектам, хранящимся в базе данных.
Пример: реализация на фронте выпадающего списка, состоящего из наименований объектов.
❌ Использовать базовый метод сервиса на получение списка объектов со всеми его параметрами.
Такой подход приводит к кратному увеличению сетевого трафика внутри вашей системы, а также к таймаутам при исполнении таких запросов.
✅ Реализовать отдельный метод, который будет возвращать только те параметры, которые вам необходимы.
Такой метод будет работать быстро и не будет генерировать лишний трафик внутри системы.
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 МСК (Понедельник).
Подробная информация о программах:
Системный анализ | Дмитрий Помаскин
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3
Media is too big
VIEW IN TELEGRAM
🚩Ошибка проектирования: пренебрежение асинхронными взаимодействиями.
Пример: вам необходимо синхронизировать данные между сервисами внутри системы или получать обновления из внешних источников.
❌ Использовать готовые синхронные методы для обновления данных в целевых базах.
Такой подход может привести к потере части данных при большом потоке запросов.
✅ Для каждого потока данных реализовать отдельные топики\очереди в брокерах сообщений.
Вы не потеряете сообщения даже при временной недоступности сервиса консьюмера.
P.S. Не забывайте о паттернах, влияющих на гарантию доставки, о которых я рассказывал ранее.
Системный анализ | Дмитрий Помаскин
Пример: вам необходимо синхронизировать данные между сервисами внутри системы или получать обновления из внешних источников.
❌ Использовать готовые синхронные методы для обновления данных в целевых базах.
Такой подход может привести к потере части данных при большом потоке запросов.
✅ Для каждого потока данных реализовать отдельные топики\очереди в брокерах сообщений.
Вы не потеряете сообщения даже при временной недоступности сервиса консьюмера.
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
Подробнее:
Тема: Проектирование 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
✅ Добавил в программу работу со 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