4617. Какой подход к интеграции описывает паттерн Change Data Capture (CDC)?
Anonymous Quiz
12%
Регулярный опрос базы данных на предмет изменений с помощью SQL-запросов.
4%
Прямой доступ к таблицам базы данных другой системы для чтения и записи.
80%
Определение и распространение изменений данных на уровне журнала транзакций БД в реальном времени.
4%
Ручной экспорт данных в файл и последующая загрузка его в целевую систему по расписанию.
4618. Какой подход позволяет системам обмениваться данными напрямую, без промежуточных компонентов?
Anonymous Quiz
11%
Паттерн «Общая база данных»
74%
Прямая интеграция Point-to-Point
10%
Использование Enterprise Service Bus
5%
Шина событий (Event Bus)
👩🏫Объяснение:
Point-to-Point (P2P, «точка-точка») — это самый простой подход к интеграции, при котором две системы соединяются напрямую, без посредников.
Как это работает:
Система A знает точный адрес и протокол системы B
Отправляет данные напрямую (например, через HTTP-вызов или прямой доступ к БД)
Система B принимает и обрабатывает запрос
Пример: Мобильное приложение вызывает REST API бэкенда напрямую.
Плюсы:
Простота начальной реализации
Минимальная задержка (нет промежуточных звеньев)
Минусы (и почему это часто антипаттерн):
При добавлении третьей, четвертой системы количество связей растет экспоненциально
Создает «спагетти-архитектуру», которую невозможно поддерживать
Нет централизованного управления, логирования, мониторинга
Высокая связанность: изменение в одной системе требует изменений во всех связанных
Как это работает:
Система A знает точный адрес и протокол системы B
Отправляет данные напрямую (например, через HTTP-вызов или прямой доступ к БД)
Система B принимает и обрабатывает запрос
Пример: Мобильное приложение вызывает REST API бэкенда напрямую.
Плюсы:
Простота начальной реализации
Минимальная задержка (нет промежуточных звеньев)
Минусы (и почему это часто антипаттерн):
При добавлении третьей, четвертой системы количество связей растет экспоненциально
Создает «спагетти-архитектуру», которую невозможно поддерживать
Нет централизованного управления, логирования, мониторинга
Высокая связанность: изменение в одной системе требует изменений во всех связанных
4619. Какой протокол использует бинарный формат Protocol Buffers и HTTP/2 для высокопроизводительной интеграции?
Anonymous Quiz
7%
REST API
82%
gRPC
10%
SOAP/WSDL
2%
GraphQL
👩🏫Объяснение:
gRPC (Google Remote Procedure Call) — это современный высокопроизводительный фреймворк для удаленного вызова процедур, разработанный Google.
Ключевые особенности:
Protocol Buffers (protobuf):
Бинарный формат (в отличие от текстового JSON/XML)
Занимает меньше места, быстрее сериализуется/десериализуется
Строгая типизация через .proto файлы
Пример определения:
HTTP/2:
Мультиплексирование (несколько запросов в одном соединении)
Сжатие заголовков
Server push (сервер может отправлять данные без запроса)
Типы взаимодействия:
Унарный (один запрос — один ответ)
Стриминг (потоковая передача в обе стороны)
Клиентский или серверный стриминг
Где применяется:
Внутренняя коммуникация микросервисов
Системы реального времени (чат, уведомления)
Когда важны производительность и низкая задержка
gRPC (Google Remote Procedure Call) — это современный высокопроизводительный фреймворк для удаленного вызова процедур, разработанный Google.
Ключевые особенности:
Protocol Buffers (protobuf):
Бинарный формат (в отличие от текстового JSON/XML)
Занимает меньше места, быстрее сериализуется/десериализуется
Строгая типизация через .proto файлы
Пример определения:
protobuf
message User {
int32 id = 1;
string name = 2;
string email = 3;
}
HTTP/2:
Мультиплексирование (несколько запросов в одном соединении)
Сжатие заголовков
Server push (сервер может отправлять данные без запроса)
Типы взаимодействия:
Унарный (один запрос — один ответ)
Стриминг (потоковая передача в обе стороны)
Клиентский или серверный стриминг
Где применяется:
Внутренняя коммуникация микросервисов
Системы реального времени (чат, уведомления)
Когда важны производительность и низкая задержка
4620. Какой механизм используется для изоляции сообщений, которые не могут быть обработаны после нескольких попыток?
Anonymous Quiz
4%
Retry Policy
12%
Circuit Breaker
79%
Dead Letter Queue
4%
Message Buffer
👩🏫Объяснение:
Change Data Capture (CDC) — это современный, эффективный паттерн интеграции, который кардинально меняет подход к синхронизации данных между системами.
Как работает (упрощенно):
1. Каждая серьезная СУБД (PostgreSQL, MySQL, Oracle) ведет журнал транзакций (Write-Ahead Log, WAL; binlog). Это низкоуровневая последовательность всех операций изменения данных (INSERT, UPDATE, DELETE), записанная перед их фактическим применением к таблицам. Цель СУБД — обеспечение согласованности и восстановление после сбоев.
2. CDC-агент (например, Debezium) подключается к СУБД не как обычное приложение, а читает этот журнал транзакций.
3. Агент превращает низкоуровневые записи журнала в удобные, структурированные события (например, { "op": "c", "after": { "id": 123, "name": "New Product" } }).
4. Эти события публикуются в шину событий (чаще всего Apache Kafka).
Практическое применение для системного аналитика:
1. Актуализация кэшей и поисковых индексов: При изменении товара в основной БД, событие через CDC мгновенно отправляется в Elasticsearch для обновления поискового индекса.
2. Построение агрегированных витрин данных: События из операционной БД стримятся в систему аналитики (например, ClickHouse) для построения актуальных отчетов.
3. Микросервисная синхронизация: Сервис «Заказы» и сервис «Доставка» имеют свои БД. При создании заказа, событие через CDC уведомляет сервис «Доставка», что нужно планировать доставку. Это альтернатива прямому вызову API.
4. Аудитинг и compliance: Полный поток всех изменений данных можно сохранять для целей аудита.
Роль аналитика: При проектировании систем, где критична актуальность данных или требуется реагирование на изменения, предлагать рассмотреть CDC как более эффективную и надежную альтернативу традиционному опросу (polling) по расписанию.
Как работает (упрощенно):
1. Каждая серьезная СУБД (PostgreSQL, MySQL, Oracle) ведет журнал транзакций (Write-Ahead Log, WAL; binlog). Это низкоуровневая последовательность всех операций изменения данных (INSERT, UPDATE, DELETE), записанная перед их фактическим применением к таблицам. Цель СУБД — обеспечение согласованности и восстановление после сбоев.
2. CDC-агент (например, Debezium) подключается к СУБД не как обычное приложение, а читает этот журнал транзакций.
3. Агент превращает низкоуровневые записи журнала в удобные, структурированные события (например, { "op": "c", "after": { "id": 123, "name": "New Product" } }).
4. Эти события публикуются в шину событий (чаще всего Apache Kafka).
Практическое применение для системного аналитика:
1. Актуализация кэшей и поисковых индексов: При изменении товара в основной БД, событие через CDC мгновенно отправляется в Elasticsearch для обновления поискового индекса.
2. Построение агрегированных витрин данных: События из операционной БД стримятся в систему аналитики (например, ClickHouse) для построения актуальных отчетов.
3. Микросервисная синхронизация: Сервис «Заказы» и сервис «Доставка» имеют свои БД. При создании заказа, событие через CDC уведомляет сервис «Доставка», что нужно планировать доставку. Это альтернатива прямому вызову API.
4. Аудитинг и compliance: Полный поток всех изменений данных можно сохранять для целей аудита.
Роль аналитика: При проектировании систем, где критична актуальность данных или требуется реагирование на изменения, предлагать рассмотреть CDC как более эффективную и надежную альтернативу традиционному опросу (polling) по расписанию.
🤔1
4621. Какой паттерн используется для чтения изменений данных из журнала транзакций БД в реальном времени?
Anonymous Quiz
6%
API Gateway
15%
ETL Process
14%
Database Replication
66%
Change Data Capture
👩🏫Объяснение:
Change Data Capture (CDC) — это паттерн интеграции, который отслеживает изменения в базе данных (INSERT, UPDATE, DELETE) и передает их другим системам почти в реальном времени.
Как работает CDC:
Чтение журнала транзакций:
Каждая СУБД ведет журнал: WAL в PostgreSQL, binlog в MySQL, redo log в Oracle
В этот журнал записывается все, что происходит с данными
CDC-агент (например, Debezium) читает этот журнал
Преобразование в события:
```json
{
"op": "u", // операция: u=update, c=create, d=delete
"before": {"id": 1, "name": "Старое имя"},
"after": {"id": 1, "name": "Новое имя"},
"source": {"table": "users", "db": "main"}
}
```
Отправка в шину событий:
События публикуются в Kafka, RabbitMQ или другую очередь
Другие сервисы подписываются на эти события
Где применяется:
Синхронизация кэшей: При изменении товара в БД → обновление кэша в Redis
Аналитика в реальном времени: События сразу попадают в ClickHouse для отчетов
Уведомления: При создании заказа → отправка email клиенту
Поисковые индексы: Обновление Elasticsearch при изменении данных
Как работает CDC:
Чтение журнала транзакций:
Каждая СУБД ведет журнал: WAL в PostgreSQL, binlog в MySQL, redo log в Oracle
В этот журнал записывается все, что происходит с данными
CDC-агент (например, Debezium) читает этот журнал
Преобразование в события:
```json
{
"op": "u", // операция: u=update, c=create, d=delete
"before": {"id": 1, "name": "Старое имя"},
"after": {"id": 1, "name": "Новое имя"},
"source": {"table": "users", "db": "main"}
}
```
Отправка в шину событий:
События публикуются в Kafka, RabbitMQ или другую очередь
Другие сервисы подписываются на эти события
Где применяется:
Синхронизация кэшей: При изменении товара в БД → обновление кэша в Redis
Аналитика в реальном времени: События сразу попадают в ClickHouse для отчетов
Уведомления: При создании заказа → отправка email клиенту
Поисковые индексы: Обновление Elasticsearch при изменении данных
4622. Какой компонент служит единой точкой входа для внешних клиентов и управляет аутентификацией, роутингом и ограничением запросов?
Anonymous Quiz
8%
Message Broker
83%
API Gateway
3%
Service Mesh
6%
Load Balancer
👩🏫Объяснение:
API Gateway — это специализированный сервер, который выступает в роли единого фасада для всех внешних клиентов (мобильных приложений, браузеров, партнерских систем).
Основные функции API Gateway:
🔐 Аутентификация и авторизация:
Проверка API-ключей, JWT-токенов, OAuth
Определение прав доступа для каждого клиента
Пример: Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
🛣 Роутинг и версионирование:
Маршрутизация запросов к нужному внутреннему сервису
Поддержка разных версий API
Пример: /api/v1/orders → сервис заказов, /api/v2/orders → новая версия
⚡️ Ограничение скорости (Rate Limiting):
Защита от DDoS-атак и злоупотреблений
Квотирование по клиентам (например, 1000 запросов/час)
Пример: X-RateLimit-Limit: 1000, X-RateLimit-Remaining: 950
🔄 Агрегация данных:
Объединение ответов нескольких сервисов в один
Пример: данные о заказе + данные о доставке + данные о клиенте
📊 Мониторинг и аналитика:
Сбор метрик по всем запросам
Логирование для аудита и отладки
Архитектурный контекст:
```
text
Внешний клиент (мобильное приложение)
↓
API Gateway ←─ Здесь аутентификация, rate limiting
↓
┌──────┴──────┐
↓ ↓
Сервис Сервис
Заказов Платежей
```
Основные функции API Gateway:
🔐 Аутентификация и авторизация:
Проверка API-ключей, JWT-токенов, OAuth
Определение прав доступа для каждого клиента
Пример: Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
🛣 Роутинг и версионирование:
Маршрутизация запросов к нужному внутреннему сервису
Поддержка разных версий API
Пример: /api/v1/orders → сервис заказов, /api/v2/orders → новая версия
⚡️ Ограничение скорости (Rate Limiting):
Защита от DDoS-атак и злоупотреблений
Квотирование по клиентам (например, 1000 запросов/час)
Пример: X-RateLimit-Limit: 1000, X-RateLimit-Remaining: 950
🔄 Агрегация данных:
Объединение ответов нескольких сервисов в один
Пример: данные о заказе + данные о доставке + данные о клиенте
📊 Мониторинг и аналитика:
Сбор метрик по всем запросам
Логирование для аудита и отладки
Архитектурный контекст:
```
text
Внешний клиент (мобильное приложение)
↓
API Gateway ←─ Здесь аутентификация, rate limiting
↓
┌──────┴──────┐
↓ ↓
Сервис Сервис
Заказов Платежей
```
👍3
4623. Какой механизм позволяет получателю сообщений сигнализировать отправителю о необходимости снизить скорость отправки?
Anonymous Quiz
19%
Message Queue
14%
Circuit Breaker
58%
Backpressure
9%
Throttling
👩🏫Объяснение:
Backpressure (обратное давление) — это механизм контроля потока данных в системах, где производитель генерирует данные быстрее, чем потребитель может их обработать.
Проблема без Backpressure:
Производитель отправляет 10 000 сообщений/сек
Потребитель обрабатывает только 1 000 сообщений/сек
Очередь переполняется → память заканчивается → система падает
Как работает Backpressure:
Обнаружение перегрузки:
Потребитель отслеживает свою загрузку
При достижении лимита (например, 80% CPU или полная очередь) активируется backpressure
Сигнализация производителю:
Через протокол (TCP window size)
Через механизмы реактивных потоков (Reactive Streams: request(n))
Через метрики (Kafka consumer lag)
Реакция производителя:
Временная остановка отправки
Уменьшение скорости
Буферизация на своей стороне
Пример из реальной жизни:
Представьте конвейер на заводе:
Рабочий №1 быстро кладет детали на ленту
Рабочий №2 не успевает их обрабатывать
Рабочий №2 кричит: «Стоп! Я не успеваю!»
Рабочий №1 приостанавливает работу
Технические реализации:
TCP: Window size — получатель сообщает, сколько данных готов принять
Reactive Streams (RxJava, Project Reactor):
```
java
// Потребитель запрашивает определенное количество элементов
subscription.request(10); // "Дай мне 10 элементов"
Apache Kafka: Consumer offset lag — отставание потребителя от производителя
`` `
Проблема без Backpressure:
Производитель отправляет 10 000 сообщений/сек
Потребитель обрабатывает только 1 000 сообщений/сек
Очередь переполняется → память заканчивается → система падает
Как работает Backpressure:
Обнаружение перегрузки:
Потребитель отслеживает свою загрузку
При достижении лимита (например, 80% CPU или полная очередь) активируется backpressure
Сигнализация производителю:
Через протокол (TCP window size)
Через механизмы реактивных потоков (Reactive Streams: request(n))
Через метрики (Kafka consumer lag)
Реакция производителя:
Временная остановка отправки
Уменьшение скорости
Буферизация на своей стороне
Пример из реальной жизни:
Представьте конвейер на заводе:
Рабочий №1 быстро кладет детали на ленту
Рабочий №2 не успевает их обрабатывать
Рабочий №2 кричит: «Стоп! Я не успеваю!»
Рабочий №1 приостанавливает работу
Технические реализации:
TCP: Window size — получатель сообщает, сколько данных готов принять
Reactive Streams (RxJava, Project Reactor):
```
java
// Потребитель запрашивает определенное количество элементов
subscription.request(10); // "Дай мне 10 элементов"
Apache Kafka: Consumer offset lag — отставание потребителя от производителя
``