Согласованность (consistency) — состояние, когда все пользователи и процессы видят одни и те же данные при чтении
Иначе пользователи видят разные версии, что может привести к бизнес-ошибкам.
Виды
При выборе вида согласованности:
Примеры
CAP-теорема, ACID, BASE и согласованность
- согласованность
- доступность
- устойчивость к разделению
Методы обеспечения согласованности
Алгоритмы, которые позволяют множеству узлов в распределённой системе согласовать единое состояние данных, даже если часть узлов или сеть работает нестабильно
Подходы к устранению расхождений между копиями данных при eventual consistency
Структуры данных.
Спроектированны так, чтобы изменения, сделанные независимо на разных узлах, могли быть объединены без конфликтов
Позволяет достичь согласованности без централизованного координирующего узла
Стратегия разрешения конфликта, когда сохраняется последнее по времени обновление.
Простая реализация, но возможна потеря промежуточных изменений
1. Согласованность: что этои почему с ней все так сложно
2. Проблемы согласованности в микросервисах и их решение
3. Согласованность, Репликация и БД по CAP
4. Паттерны для высокой масштабируемости
5. Руководство по Эффективному Взаимодействию
#проектирование
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25❤17👍5
Материалы по визуализации работы Apache Kafka и Rabbit MQ
🤩 Kafka Visualization
Наглядное представление взаимодействия продюсеров, брокеров, топиков и консьюмеров — в виде анимации или схемы
🤩 Kafka Visualization Showcase (видео, англ)
🤩 Симулятор брокера Apache Kafka: Kafka Visualization от компании SoftwareMill (обзор с пояснениями)
🤩 RabbitMQ Simulator
Онлайн-песочница для изучения основ RabbitMQ и тестирования сценариев работы с очередями без установки
🤩 RabbitMQ Simulator. Песочница брокера сообщений (гайд как использовать)
🔹 Kafka vs RabbitMQ: сравнение по пунктам
➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿
🧑🎓 Больше полезного в базе знаний по системному анализу
Наглядное представление взаимодействия продюсеров, брокеров, топиков и консьюмеров — в виде анимации или схемы
Онлайн-песочница для изучения основ RabbitMQ и тестирования сценариев работы с очередями без установки
Please open Telegram to view this post
VIEW IN TELEGRAM
Softwaremill
SoftwareMill Kafka Visualization
Using the Kafka Visualization tool you can simulate how data flows through a replicated Kafka topic, to gain a better understanding of the message processing model.
👍32🔥15❤7😱2🎉2
Микросервисная архитектура (MSA) — подход, когда система разбивается на небольшие независимые сервисы
У MSA есть недостатки, которые важно учитывать при проектировании
В монолите транзакции управляются на уровне БД (ACID). В MSA данные распределены, и обеспечение согласованности требует сложных решений
Практики:
Межсервисные вызовы (HTTP, gRPC и тд) добавляют сетевые задержки, что может привести к ухудшению UX
Практики:
При десятках и сотнях сервисов сложно локализовать источник ошибки и собрать полную картину работы
Практики:
Каждый сервис может иметь свою БД, конфигурацию и зависимости. Интеграционное тестирование всей системы требует поднятия множества сервисов
Практики:
Каждый сервис хранит свою копию данных → возможны расхождения
Практики:
1. Микросервисная архитектура в разработке приложений: преимущества и недостатки
2. Микросервисная архитектура
3. Аутентификация и авторизация в проекте с микросервисной архитектурой: стратегии, практический пример
4. Микросервисная архитектура, ее паттерны проектирования и особенности
5. Микросервисы: плюсы, минусы, когда и зачем внедрять
📚 Книги
1. Крис Ричардсон. Микросервисы. Паттерны разработки и рефакторинга
2. Сэм Ньюмен. Создание микросервисов
3. Микросервисы. От архитектуры до релиза(Ронни Митра, Иракли Надареишвили)
4. Изучаем OpenTelemetry: современный мониторинг систем (2025) - Паркер Остин, Янг Тед
#микросервисы #архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥29❤21👍9👏2
Ретраи (retries) в проектировании систем — механизм авто-повторения неудачных операций при временных сбоях (сетевых ошибках, перегрузке сервисов и тд)
В распределенных системах временные сбои— норма
Вызов "повторить при ошибке" может усугубить проблему
Виды ошибок
Не все ошибки равны: ретраить можно только временные сбои.
Постоянные ошибки повторять бесполезно и вредно для ретраев
Временные сбои, которые могут исчезнуть при повторной попытке
Типичные кейсы повторяемых ошибок:
Таймауты TCP, Connection Reset
HTTP 429 (Too Many Requests)
пример: пльзователь массово экспортирует данные → API временно ограничивает запросы
HTTP 5xx (503, 504)
пример: (HTTP 503) сервис перегружен в час пик
Дедлоки БД, оптимистичные блокировки
пример: деадлоки БД - два клиента одновременно редактируют один заказ
Клиент отправил невалидные данные (например, буквы в поле "Цена"). Повторы бесполезны
Ресурс удален (например, несуществующий ID товара). Повторы создают нагрузку
Постоянное отсутствие прав (например, просмотр чужих заказов)
Стратегии повторов
Растущая задержка: 1с → 2с → 4с → 8с
Для снижение нагрузки на сбойный ресурс, дает ему время на восстановление
Когда к задержке добавляется случайное значение, чтобы 1000 запросов не повторились одновременно
Фактическая задержка = Базовая задержка + random(0, 30% от задержки)
Для предотвращение синхронизации запросов
Без джиттера: повтор всех 10к запросов одновременно → Коллапс платежной системы
С джиттером: запросы распределяются равномерно
a) Retry-After + Backoff
Использование заголовка HTTP Retry-After для точного определения задержки
HTTP/1.1 429 Too Many Requests
Retry-After: 15 ← Ждать ровно 15 секундb) Адаптивные ретраи
Динамический расчет задержки на основе:
- истории ответов сервиса
- текущей нагрузки
- SLA системы и тд
Максимальное число ретраев (напр. 3-5).
Это предотвращает бесконечные циклы.
После исчерпания попыток— фиксируется ошибка
- асинхронная обработка (отправка в очередь)
- уведомление мониторинга
Circuit Breaker ("предохранитель" системы)
Это "автомат", который временно блокирует вызовы сбойного сервиса
Периодически проверяет "полуоткрытое" состояние.
Связать с SLA и поведением системы при отказе.
Состояния брейкера:
Система работает нормально
После 5 ошибок за 1 мин
- потерю денег за SMS
- перегрузку очереди сообщений
- каскадные сбои
1. Хороший ретрай, плохой ретрай, или История одного падения
2. Отложенные ретраи силами RabbitMQ
3. Как работать над перфомансом веб-приложения: опыт Авто.ру|
4. Лучшие практики создания отказоустойчивых систем
📚 Паттерны проектирования API - Джей Гивакс (Часть IV. Безопасность)
#проектирование #api
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35❤27🔥15😱1
Идемпотентность — свойство операции, гарантирует, что повторное выполнение одной и той же операции приведёт к такому же результату, как и первое выполнение
Т.е. если отправить один и тот же запрос 10 раз, результат должен быть таким же, как если отправить его один раз
Если же деньги спишутся дважды — нарушение идемпотентности
В распределённых системах сетевая ненадёжность, таймауты и ретраи делают это свойство критически важным
Примеры проблем обеспечения идемпотентности
Примеры последствий отсутствия идемпотентности
Подходы к реализации идемпотентности
Уникальный id запроса (Request ID)
Клиент генерирует уникальный ID (UUID) для каждой бизнес-операции и передаёт в каждом запросе (например, в HTTP-заголовке Idempotency-Key)
Сервер, получив запрос, проверяет, не обрабатывался ли уже запрос с таким ID
Подходит для идемпотентных POST-запросов в API (н-р, создание платежа, заказа)
Журналирование и Outbox-паттерн
Паттерн для надежной отправки сообщений в брокер в контексте транзакции с БД
Микросервисные асинхронные интеграции, где критична гарантия доставки события после записи в БД
Exactly-Once на уровне брокеров
Брокеры предлагают встроенные механизмы для обеспечения семантики "точно один раз"
В проектах на Kafka, где требования к надёжности обработки потоков данных крайне высоки
1. Идемпотентность: что это, примеры и применение в API
2. Как сделать хорошую интеграцию? Часть 2. Идемпотентные операции – основа устойчивой интеграции
3. История одного идемпотентного метода
4. Идемпотентность в такси-приложении: кейс из практики
5. Стажёр Вася и его истории об идемпотентности API
6. Важность идемпотентности в распределенных системах
📚 Книги
1. Высоконагруженные приложения - Мартин Клеппман (Глава 11)
2. Создание микросервисов - Сэм Ньюмен (Глава 12)
#проектирование
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍33❤16🔥6👏1
Forwarded from Библиотека Системного Аналитика
Масштабируемые_данные_Лучшие_шаблоны_высоконагруженных_архитектур.pdf
6.7 MB
Масштабируемые данные.
Лучшие шаблоны высоконагруженных архитектур.
✍️ Автор: Питхейн Стренгхольт
🗓 Год издания: 2022
🔤 Язык: русский
📚 Объём: 368 стр
Посвящена современному управлению данными и масштабируемым архитектурам, необходимым для работы с большими объемами информации.
В ней рассматриваются:
💙 основы управления данными – что это такое, почему оно важно и как развивается в эпоху цифровой трансформации.
💙 ключевые архитектурные подходы – хранилища данных (только для чтения), API, потоковая обработка и их интеграция в единую систему.
💙 сложности работы с данными – проблемы интеграции, устаревание классических хранилищ, управление метаданными и безопасность.
💙 практические шаблоны и решения – как выбирать подходящие модели распределения данных, масштабировать их потребление и обеспечивать целостность.
💙 влияние новых технологий – гибридные облака, распределенные сети и их роль в архитектуре данных.
Книга сочетает теорию и практику, подойдет для архитекторов, аналитиков, специалистов по соблюдению требований и управлению
Обзор книги на Хабр
#проектирование
Лучшие шаблоны высоконагруженных архитектур.
✍️ Автор: Питхейн Стренгхольт
🗓 Год издания: 2022
🔤 Язык: русский
📚 Объём: 368 стр
Посвящена современному управлению данными и масштабируемым архитектурам, необходимым для работы с большими объемами информации.
В ней рассматриваются:
Книга сочетает теорию и практику, подойдет для архитекторов, аналитиков, специалистов по соблюдению требований и управлению
Обзор книги на Хабр
#проектирование
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15🔥10👍3⚡1
Apache Kafka - платформа для потоковых данных
Включает:
Kafka Streams
Библиотека для обработки потоков событий с возможностью:
Архитектурная идея: микросервисный подход к потоковой обработке
Kafka Streams инкапсулирует логику обработки в независимое приложение, оно масштабируется вместе с кластером Kafka
Хранение данных между обработками
Для этого используется:
Если приложение перезапускается, то загружает данные из этого топика и продолжает работу с того же места
По умолчанию Kafka Streams хранит состояние локально, но обработанные данные можно записывать во внешние БД или облачные хранилища
Примеры использования
Kafka Connect
Фреймворк для масштабируемого ввода/вывода данных между Kafka и внешними системами
Решает задачи интеграции с различными источниками
Источник (JDBC Connector) читает изменения из БД с помощью механизма изменения данных Debezium, а приемник (Elasticsearch Connector) загружает данные в поисковый индекс для быстрого поиска
Особенности
ksqlDB
СУБД для потоковой обработки
Например, обнаружение пользователей, выполняющих более 100 действий в минуту, с отправкой уведомлений в систему безопасности
Особенности
Применение: создание реальных дашбордов, реализация простых правил бизнес-логики, мониторинг качества данных
1. Kafka Streams (official site)
2. Экосистема Apache Kafka: Kafka Streams, Kafka Connect
3. Потоковая обработка данных с помощью Kafka Streams: архитектура и ключевые концепции
4. Под капотом Kafka Connect: источники, приемники и коннекторы
5. ksqlDB
6. ksqlDb или SQL как инструмент обработки потоков данных
📚 Книги
1. Kafka Streams и ksqlDB: данные в реальном времени - Сеймур Митч
2. Kafka в действии - Дилан Скотт, Виктор Гамов и Дейв Клейн (Глава 12)
#интеграции
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍7🔥5⚡1
Debezium - распределенная платформа с открытым исходным кодом, которая превращает существующие БД в стриминговые источники событий
Оптимален когда нужна
Архитектура и компоненты
Работает как набор коннекторов для Apache Kafka Connect
Каждый коннектор специализируется на конкретной СУБД и реализует протокол репликации этой базы
Основные компоненты
С помощью Debezium Engine события можно получать напрямую в приложение или транслировать в другие брокеры: RabbitMQ, Pulsar, Redpanda
Принцип работы
БД → журнал транзакций → Debezium connector → Kafka Connect → Kafka topic → потребитель (микросервис, аналитическая система, хранилище)
Процесс обработки изменений от журнала до топика Kafka
Коннектор подключается к БД с правами репликации
При первом запуске коннектор создает снимок данных
Последовательно читает таблицы и генерирует события создания для каждой строки
Этот процесс гарантирует, что все существующие данные попадут в поток событий
После завершения снимка коннектор переключается на чтение транзакционного журнала. Отслеживает позицию последнего обработанного события и продолжает чтение с этой точки при рестарте
Каждая запись в журнале парсится и преобразуется в событие JSON / Avro
Debezium обрабатывает различные типы данных СУБД, включая XML и пользовательские типы.
События отправляются в топики Kafka. Коннектор использует семантику at-least-once, что требует идемпотентной обработки на стороне потребителей.
Примеры использования
Проблемы и риски
1. Официальный сайт
2. CDC в Yandex Data Transfer: гид по технологии с примерами
3. Что такое Debezium и для чего используется
4. Знакомство с Debezium — CDC для Apache Kafka
5. Что такое Debezium: подробная инструкция по применению
6. Debezium Architecture
#интеграции
Please open Telegram to view this post
VIEW IN TELEGRAM
❤22🔥7👍4⚡1
gRPC реализует парадигму удаленного вызова процедур (RPC), где клиент вызывает методы на сервере так, будто они находятся в одном процессе
Protocol Buffers
Процесс разработки с gRPC начинается с проектирования контракта в proto-файлах
Контракт (.proto файл) — единая точка, в которой описываются:
На основе proto-файлов автоматически генерируется клиентский и серверный код для разных языков
Здесь хранятся данные и функциональные контракты в виде proto-файла
gRPC Interceptors
Interceptor ("перехватчик") — компонент, который позволяет внедрять пользовательскую логику в обработку вызовов gRPC на стороне клиента / сервера
Предоставляет механизм для изменения запросов и ответов, а также для выполнения доп действий
Интерсепторы оперируют:
Protocol Buffers определяют
ЧТО передаетсяИнтерсепторы -
КАК обрабатываются вызовыСценарии использования
gRPC и Kafka
gRPC обрабатывает пользовательский запрос «здесь и сейчас»
Kafka распространяет событие дальше
Клиент → gRPC → Сервис А → Kafka → Сервис Б, Сервис В
1. Клиент через gRPC создает заказ
2. Сервис заказов обрабатывает команду "создать заказ"
3. Публикует событие "OrderCreated" в Kafka
4. Сервисы уведомлений и аналитики получают событие из Кафка
Примеры архитектуры с gRPC
Двунаправленные стримы - для управления видеопотоками
Безопасность в gRPC
gRPC изначально ориентирован на защищённые каналы:
1. Введение в gRPC: Основы, применение, плюсы и минусы
2. Что такое gRPC и Protobuf?
3. Способ организации gRPC контрактов и их автоматизация для микросервисов
4. Protocol Buffers: самая эффективная бинарная альтернатива текстовому формату
5. gRPC Interceptors (документация)
6. Перехватчики gRPC в .NET
📚 Изучаем OpenTelemetry: современный мониторинг систем (2025) - Паркер Остин, Янг Тед
#интеграции
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍9🔥9
⚫️ Stepik
#архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤45🔥21👍6👎1🎉1
Сбор требований от всех стейкхолдеров (бизнес-заказчики, фронтенд-разработчики, мобильные разработчики и тд) и трансформировать их в контракт
Формируется спецификация, которая становится единым источником для всех участников.
Ключевые элементы:
Реализовать логику API по спецификации
Процесс включает:
Комплексная проверка надежности, безопасности и производительности API
Основа для тестирования: тестовые сценарии и данные
Виды тестирования:
Обеспечить быструю, безопасную и предсказуемую публикацию изменений в API
Ключевые процессы:
Централизованное управление трафиком, безопасностью и версиями API через API-шлюз
Основные функции:
Гарантия отказоустойчивости и производительности API в проде
Основные функции:
Сбор и анализ метрик
Примеры метрик:
Эти этапы в большей степени относятся к продуктологам и бизнес-аналитикам
Примеры метрик для оценки эффективности продвижения API:
1. Активные пользователи (Active Users)
2. Новые регистрации (New User Registrations)
3. Количество API-вызовов (API Calls)
4. Метрики производительности
5. Бизнес-метрики
Для монетизации необходимо спроектировать систему тарификации и метрики для нее, заложить логику в систему аналитики и биллинга.
Минимизировать ущерб для потребителей при выводе устаревшей версии API.
Процесс вывода:
1. Жизненный цикл API. Статистика и нюансы
2. Жизненный цикл API
3. 15 важнейших рекомендаций по проектированию REST API
4. Дизайн API и как его спроектировать
5. Лучшие практики разработки REST API: 20 советов
📚 Книги
1. API - Сергей Константинов
2. Паттерны проектирования API - Джей Гивакс
3. Тестирование веб-API - Марк Винтерингем
4. Проектирование веб-API - Арно Лоре
#api
Please open Telegram to view this post
VIEW IN TELEGRAM
❤31👍9🔥6⚡1
Обратная совместимость — когда система может работать с более старыми клиентами или потребителями после внесения изменений в интерфейс или формат данных
В интеграциях это критически важно:
если одно приложение изменило контракт, а другое не успело обновиться
Виды совместимостей
Примеры обеспечения обратной совместимости
Практики:
deprecatedgRPC использует Protocol Buffers (protobuf)
Он изначально учитывает обратную совместимость
Практики:
deprecatedGraphQL более гибкий, чем REST, так как клиент сам выбирает нужные поля. Но есть риски.
Практики:
@deprecated вместо удаления. Клиенты будут видеть предупреждение./graphql/v2).Kafka — шина событий. Здесь контракт — формат сообщения.
Если продюсер изменил структуру, все консумеры должны понимать новый формат
Практики:
orders.v2)1. Обеспечение обратной совместимости gRPC API с помощью protolock в GitHub Actions
2. Постановка проблемы обратной совместимости
3. Интеграции глазами аналитика: 5 типичных ошибок, которые ломают систему
4. Как правильно разрабатывать API с поддержкой обратной совместимости
5. GraphQL: от восторга до разочарования
📚 Книги
API - Сергей Константинов (Раздел III. Обратная совместимость)
🐗 Высоконагруженные приложения. Программирование, масштабирование, поддержка - Мартин Клеппман
#интеграции
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤15👍5⚡1
Рассмотрим нисходящий подход проектирования БД
Процесс проектирования по шагам
Между этими этапами используется ER-диаграмма — инструмент визуализации
Задача: понять и описать какие данные нужны системе и как они связаны между собой
Основные шаги
Создание реляционной схемы. ER-модель преобразуется в формальную схему, готовую для реализации в реляционной СУБД (распространенный тип БД).
Основные шаги
Например, сущность «Пользователь» превращается в таблицу
users.У «Пользователя» будут поля:
id, name, email.- первичный ключ (
id) для уникальной идентификации строки- внешние ключи для связи между таблицами
- убрать повторы и избыточные данные
- проверить соответствие нормальным формам (1НФ, 2НФ, 3НФ)
Например, если в таблицу «Заказ» включить название товара, это приведет к дублированию
Решение: выделить отдельную таблицу «Товар» и связать через «Заказ–Товар»
Модель адаптируется под конкретную СУБД:
VARCHAR, INTEGER, DATE)1. Как работают базы данных в IT: разбор на примерах
2. Базы данных для системного аналитика. Краткий обзор на практике
3. Основы правил проектирования базы данных
4. Основы проектирования баз данных
5. Проектирование реляционных баз данных: основные принципы
📚 Книги
1. Основы баз данных (учебное пособие) - Кузнецов С. Д.
2. Путеводитель по базам данных - Владимир Комаров
3. Базы данных. Инжиниринг надежности - Кэмпбелл Лейн, Мейджорс Черити
4. Проектирование и реализация систем управления базами данных - Эдвард Сьоре
5. Основы технологий баз данных: учебное пособие - Новиков Б. А. и др
#проектирование #бд
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40❤17🔥6
Жизненный цикл программного обеспечения (Software Development Life Cycle, SDLC) — структурированный процесс создания систем
Путь идеи от концепции до рабочего продукта
Фазы жизненного цикла ПО
Определяется цель проекта, его границы и заинтересованные стороны
Оценивается бизнес-ценность, риски и целесообразность разработки
Результат фазы — бизнес-кейс, дорожная карта проекта, первичные требования и оценка ресурсов
Вывляются:
Выходные артефакты: ТЗ или спецификация требований к ПО (SRS), модели процессов, диаграммы прецедентов
Решается как система будет удовлетворять требованиям
Результат — набор архитектурных и дизайнерских документов
Пишется код в соответствии с архитектурой и требованиями
Ревью кода, сборка и автоматизация сборочного процесса через CI/CD
На выходе — рабочие модули и инкременты системы
Проверяется соответствие продукта требованиям
Примеры тестирования:
Продукт разворачивается в целевой среде
Завершается релизом и переходом системы в эксплуатацию
После запуска система требует поддержки:
Фаза продолжается до момента окончательного вывода системы из эксплуатации
Модели жизненного цикла ПО
Подход к организации фаз SDLC определяется моделью: как эти фазы взаимодействуют друг с другом, их последовательность
Фазы выполняются строго последовательно: от анализа до сопровождения
Переход на следующую стадию возможен только после завершения предыдущей
Подходит для проектов с чётко определёнными и стабильными требованиями
Идея каскада с добавлением акцент на тестирование
Каждая стадия разработки имеет свой этап проверки и валидации
Продукт создаётся поэтапно, небольшими инкрементами. Каждый релиз добавляет часть функционала
Каждый инкремент проходит полный цикл SDLC (анализ, проектирование, кодирование, тестирование)
В результате пользователь постепенно получает готовые части системы
Комбинирует идеи каскадной и прототипной моделей
Каждая итерация проходит все фазы SDLC, но с акцентом на анализ рисков
Применяется для крупных и исследовательских проектов
Разработка короткими итерациями — спринтами (1–4 недели). Команда поставляет работающий инкремент продукта к концу каждого спринта.
Ориентирован на непрерывный поток задач и визуализацию процессов
Основной инструмент — канбан-доска, где задачи перемещаются по статусам
1. Этапы жизненного цикла разработки ПО или что такое SDLC?
2. SDLC
3. База про жизненный цикл разработки ПО (SDLC): этапы, виды моделей и их различия
4. Про семь основных методологий разработки
5. Модели жизненного цикла ПО
📚 Книги
Управление проектным бизнесом от Алексея Васильева
#инфраструктура
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍10🔥4
Event Storming — техника коллективного моделирования бизнес-процессов
Строится вокруг событий (domain events), которые отражают значимые изменения состояния системы (заказ создан», платёж подтверждён, товар доставлен)
Помогает
Примеры приименения
Основные принципы
Типы Event Storming-сессий
Используется для получения общего представления о домене
Позволяет увидеть ключевые процессы и зависимости между ними
Детализирует конкретный бизнес-процесс
Помогает определить события, команды и участников внутри него
Уточняет модель до уровня архитектуры и bounded contexts
Используется при проектировании микросервисов и взаимодействий между ними
Ключевые «строительные блоки»
Факт, который уже произошел в системе.
Часто является реакцией на предыдущее событие
Это "кластер" из связанных сущностей (например, заказ с его позициями), который обрабатывает команды и порождает события
Формулируется как "Когда событие X, тогда команда Y"
Пример как проходит Event Storming
1. Определить границы процесса
2. Зафиксировать доменные события в прошедшем времени
3. Добавить команды, которые инициируют события:
4. Указать акторов
5. Добавить агрегаты и сущности
6. Зафиксировать политики и правила
7. Сгруппировать события по смыслу
8. Проверяются связи, исключения, альтернативные сценарии
9. Результат: карта событий, отражающая процессы и зависимости
1. Event storming
2. Моделирование микросервисов с помощью Event storming
3. Event Storming: как построить модель вокруг событий
4. Введение в Event Modeling
5. 10 аналогов Miro от российских и иностранных разработчиков
📚 Книги
Предметно-ориентированное проектирование: паттерны, принципы и методы - Скотт Миллетт, Ник Тью
#управление_проектами
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤9👍5👏2
Forwarded from Библиотека Системного Аналитика
Грокаем_безопасность_веб_приложений_Макдональд_Малькольм.pdf
12 MB
Грокаем безопасность веб-приложений
✍️ Автор: Макдональд Малькольм
🗓 Год издания: 2025
🔤 Язык: русский
📚 Объём: 336 стр.
Практическое руководство по безопасности для веб-приложений.
◾️ Раскрываются основные принципы защиты
◾️ Подробно разбираются наиболее распространенные уязвимости веб-приложений — от браузера до сервера.
Книгу можно изучать последовательно или выборочно.
Примеры кода приведены на разных языках, что делает материал наглядным и универсальным.
Издание будет полезно как новичкам в вопросах безопасности, так и опытным специалистам для систематизации и обновления знаний.
#безопасность
✍️ Автор: Макдональд Малькольм
🗓 Год издания: 2025
🔤 Язык: русский
📚 Объём: 336 стр.
Практическое руководство по безопасности для веб-приложений.
Книгу можно изучать последовательно или выборочно.
Примеры кода приведены на разных языках, что делает материал наглядным и универсальным.
Издание будет полезно как новичкам в вопросах безопасности, так и опытным специалистам для систематизации и обновления знаний.
#безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍19❤2
1. Использовать множественное число для коллекций
2. Не добавлять лишние сегменты в путь
Не пытаться отразить всю модель данных в URL
Если
listing_id уникален — shop_id не нуженGET /listings/{listing_id}/options/{option_id}3. Не добавлять расширения в URL
GET /users.json Формат передачи должен определяться через HTTP-заголовки (например,
Accept) , не через URLGET /users и HTTP-заголовки настройка заголовков:Accept: application/json
4. Не возвращать массивы верхнего уровня
Объект позволяет легко добавить пагинацию и дополнительные поля без поломки обратной совместимости
[{"id":1}, {"id":2}] { "data": [{"id":1}, {"id":2}] }5. Не возвращать структуры-словари (map)
Словари ломают совместимость и неудобны для типизированных языков.
{ "data": [{ "id":"KEY1" }, { "id":"KEY2" }] }6. Добавлять префиксы к ID
Примеры:
Stripe: in_1MVpWEJVZPfyS2HyRgVDkwiZ
Shopify: gid://shopify/FulfillmentOrder/1469358604360
7. Не использовать 404 для “не найдено”
404 Not Found может означать сетевую ошибку или неверный URL410 Gone — сервер понял запрос, но объекта нет8. Ошибки в структурированном формате
{
"message": "Access denied",
"type": "Unauthorized",
"types": ["Unauthorized", "Security"],
"cause": { ... }
}9. Идемпотентность операций
Идемпотентность = повтор вызова не меняет результат
POST /orders
Idempotency-Key: abc123
Если запрос повторится — сервер вернёт 409 CONFLICT и ID уже созданного ресурса:
{
"message": "Duplicate",
"old_id": "ORD123"
}Клиент уверен, что заказ не задублировался
10. ISO8601 для даты и времени
А также использовать ISO8601 для интервалов и длительностей
"2023-12-21T11:17:12.34Z" "1703157432340"#api
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38👍20❤16😢1
Forwarded from Библиотека Системного Аналитика
Хононов_В_Изучаем_DDD_предметно_ориентированное_проектирование_2024.pdf
18.2 MB
Изучаем DDD — предметно-ориентированное проектирование
✍️ Автор: Влад Хононов
🗓 Год издания: 2024
🔤 Язык: русский
📚 Объём: 320 стр.
Книга посвящена методологии DDD (предметно-ориентированному проектированию), что особенно актуально в условиях дробления предметных областей и усложнения бизнес-взаимодействий.
Рассказано
🔹 как оценить масштаб и сложность предметной области (с примерами анализа предметной обалсти)
🔹 измерить темпы ее развития, учесть необходимые зависимост
🔹 про архитектурные паттерны и паттерны взаимодействия, EventStorming, SOA, Data Mesh
🔹 применять DDD и структурировать создаваемое ПО эффективно вписывая его в сеть данных (Data Mesh)
🔹 о порядке развития проекта синхронно с изменениями в его бизнес-контексте
Знание принципов и шаблонов предметно-ориентированного проектирования будет полезно инженерам-программистам всех уровней: младшего, старшего, штатного и руководящего.
🔹 Пост про DDD
📺 Интервью с автором Learning Domain-Driven Design • Влад Хононов
#архитектура #проектирование
✍️ Автор: Влад Хононов
🗓 Год издания: 2024
🔤 Язык: русский
📚 Объём: 320 стр.
Книга посвящена методологии DDD (предметно-ориентированному проектированию), что особенно актуально в условиях дробления предметных областей и усложнения бизнес-взаимодействий.
Рассказано
Знание принципов и шаблонов предметно-ориентированного проектирования будет полезно инженерам-программистам всех уровней: младшего, старшего, штатного и руководящего.
#архитектура #проектирование
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍8🔥4
Workflow-движок — система, которая управляет выполнением последовательности шагов (задач) по описанной логике процесса:
Нужен, когда в системе есть повторяющиеся, формализованные процессы:
состоящие из нескольких этапов
с предсказуемыми переходами и условиями
Как работает
Компоненты:
форматы: BPMN, JSON, YAML, собственные DSL
Принцип:
Типовой цикл:
1. запуск — процесс стартует по событию или API-запросу
2. исполнение — движок выполняет шаги, проверяет условия переходов
3. ожидание — если требуется ввод данных пользователем или внешним сервисом
4. завершение — финальный статус, логирование результатов
Примеры
В архитектуре
Когда использовать
Не стоит использовать:
Workflow vs. BPM
Примеры ПО
1. Workflow Core — движок бизнес-процессов для .Net Core
2. Как мы делали свой движок Workflow
3. Интеграция с «Госуслугами». Применение Workflow Core (часть II)
4. Интеграционная платформа в The Platform: что умеет, как работает и зачем ей Workflow Engine
#интеграции
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍6🔥5👎1🤔1
JSON Patch — формат для описания изменений в JSON-документе
Вместо отправки документа для обновления, отправляется набор операций («патч»), которые нужно применить
Примеры применения
Пример
Исходно:
{ "user": "Иван", "age": 30 }Патч (набор операций):
[
{ "op": "replace", "path": "/age", "value": 31 },
{ "op": "add", "path": "/city", "value": "Москва" }
]
Результат:
{ "user": "Иван", "age": 31, "city": "Москва" }Особенности
RFC 6902 определяет только 6 операций:
- add
- remove
- replace
- move
- copy
- test
Расширять этот набор другими операциями нельзя, если нужно сохранить совместимость с системами, реализующими RFC 6902
Если любая операция в массиве завершается ошибкой (например, путь не найден для
remove, или операция test возвращает false), весь патч должен быть откачен, и документ остается без измененийЭто гарантирует целостность
Последующие могут зависеть от результата предыдущих
move) данные из /a в /b, сначала убедиться, что /b не существует, или удалить его в предыдущей операцииJSON Patch vs JSON Merge Patch
Отправляется фрагмент, который нужно "наложить" на целевой документ:
- значения заменяются
-
null означает "удалить поле"- отправляются только изменяемые поля
Когда использовать
1. Оптимизация трафика при синхронизации состояний через Jsonpatch
2. Убегайте от праздника «пустых» проверок: правильно выполняйте PATCH с помощью JSON Patch
#проектирование #api
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥10👍6💩2👏1