19. Read Model на событиях: выбор между JOIN, REST, Replica и CQRS
В этом видео я разбираю реальный вызов: бизнес хочет аналитику по жизненному циклу заказа – время создания, оплаты, отправки уведомления. Данные живут в трёх независимых микросервисах (Order, Payment, Notification) у двух из которых свои базы данных.
Как построить аналитику, не нарушая инкапсуляцию и не создавая синхронной связанности?
Я пройду через все популярные альтернативы:
🔹 SQL JOIN между базами – почему это антипаттерн
🔹REST-агрегация – почему не масштабируется
🔹Read Replica – почему не решает проблему агрегации
🔹CDC → ClickHouse – когда это оправдано, а когда избыточно
🔹CQRS + Event‑driven Read Model Projection – наш выбор и его цена
Я не просто показываю «как сделать CQRS», а объясняю процесс принятия решения: оцениваю стоимость, производительность, надёжность, сложность и поддерживаемость.
Что вы узнаете:
🔹Как отличить операционную аналитику от OLAP-хранилища
🔹Почему CQRS – это не «две базы данных», а принцип разделения команд и запросов
🔹Как строить идемпотентные проекции с помощью INSERT ... ON CONFLICT
🔹Как защитить read-модель от старых событий
🔹Как оценивать архитектурные альтернативы по таблице критериев
Исходный код проекта на GitHub наверняка заслуживает Ваших звезд!🙂
Ссылка на Youtube
Ссылка на Рутьюб
Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
Жду ваших реакций и оценок🙂
В этом видео я разбираю реальный вызов: бизнес хочет аналитику по жизненному циклу заказа – время создания, оплаты, отправки уведомления. Данные живут в трёх независимых микросервисах (Order, Payment, Notification) у двух из которых свои базы данных.
Как построить аналитику, не нарушая инкапсуляцию и не создавая синхронной связанности?
Я пройду через все популярные альтернативы:
🔹 SQL JOIN между базами – почему это антипаттерн
🔹REST-агрегация – почему не масштабируется
🔹Read Replica – почему не решает проблему агрегации
🔹CDC → ClickHouse – когда это оправдано, а когда избыточно
🔹CQRS + Event‑driven Read Model Projection – наш выбор и его цена
Я не просто показываю «как сделать CQRS», а объясняю процесс принятия решения: оцениваю стоимость, производительность, надёжность, сложность и поддерживаемость.
Что вы узнаете:
🔹Как отличить операционную аналитику от OLAP-хранилища
🔹Почему CQRS – это не «две базы данных», а принцип разделения команд и запросов
🔹Как строить идемпотентные проекции с помощью INSERT ... ON CONFLICT
🔹Как защитить read-модель от старых событий
🔹Как оценивать архитектурные альтернативы по таблице критериев
Исходный код проекта на GitHub наверняка заслуживает Ваших звезд!
Ссылка на Youtube
Ссылка на Рутьюб
Смотрите, ставьте лайки, подписывайтесь на каналы!
Жду ваших реакций и оценок
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍2🤯1
Серге́й Брин (англ. Sergey Brin; род. 21 августа 1973, Москва, СССР) — американский программист и интернет-предприниматель. Вместе с Ларри Пейджем он стал создателем Google и одноимённой крупнейшей в мире поисковой системы. Брин был президентом Alphabet Inc., материнской компании Google, пока не ушёл с этой должности 3 декабря 2019 года. Брин и Пейдж остаются в Alphabet в качестве соучредителей, контролирующих акционеров, членов совета директоров и сотрудников. По данным Форбс 2025 года, Брин занимает 8-е место в списке самых богатых людей в мире ($110B).
Джон Д. Кармак II (англ. John D. Carmack II; род. 21 августа 1970 года, Канзас, США) — американский разработчик компьютерных игр; инженер в областях информатики, аэрокосмической техники и виртуальной реальности; предприниматель, соучредитель и совладелец компаний id Software и Armadillo Aerospace. В 1991 году Кармак стал одним из основателей компании id Software, которая прославилась разработкой основополагающих игр в жанре FPS — Wolfenstein 3D, Doom, Quake, — ведущим программистом которых был Кармак. Его революционные методы программирования и уникальные дизайнерские решения Джона Ромеро способствовали популярности этого жанра в 1990-х годах.
Стивен Макконнелл Кейс (родился 21 августа 1958 года) — со-основатель и CEO AOL; один из драйверов массового выхода пользователей в интернет в 1990-х.
1888 — патент У. С. Бэрроуза на счётную машину. Важная веха в линии, ведущей к офисной механизации и ранним вычислительным устройствам.
1957 — первый успешный пуск МБР Р-7 с Байконура. Полёт на ~6000–6500 км до Камчатки; именно этот носитель стал «прародителем» спутниковых и пилотируемых ракет семейства «Союз». 27 августа ТАСС официально сообщил об успешном испытании.
1965 — старт Gemini 5 (NASA). Первый длительный полёт по программе Gemini (8 суток), ключевая проверка топливных элементов как источника энергии для лунных экспедиций.
1989 — исследовательский зонд «Вояджер-2» делает снимки Тритона, спутника планеты Нептун.
2006 — началась регистрация доменных имён в новом домене общего пользования .mobi, предназначенном для мобильных устройств.
#Biography #Birth_Date #Events #21Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Раздел 12. Работа с файлами, I/O и сетью (NIO.2)
Глава 4. Работа с сетью (Socket, HTTP, HttpClient)
Тема: HttpClient в Java 11+: современный HTTP-клиент
Читаем на devforge.ru - ссылка, тык
#Java #для_новичков #beginner #HttpClient #http
Глава 4. Работа с сетью (Socket, HTTP, HttpClient)
Тема: HttpClient в Java 11+: современный HTTP-клиент
Читаем на devforge.ru - ссылка, тык
#Java #для_новичков #beginner #HttpClient #http
👍1
Что выведет код?
#Tasks
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Task210826 {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/post"))
.POST(HttpRequest.BodyPublishers.ofString("data"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
}
}
#Tasks
👍1
Варианты ответа:
Anonymous Quiz
71%
200
0%
405
14%
Исключение IllegalArgumentException
14%
Исключение IllegalStateException
👍2
Что такое 🤓
Ответ:
Retry (повтор) — паттерн для повторных попыток выполнения операции в случае временных сбоев (сетевые проблемы, блокировки БД).
В Spring реализован через @Retryable (Spring Retry).
Параметры: maxAttempts, backoff (задержка между попытками, с экспоненциальным увеличением).
Пример: @Retryable (value = SQLException.class, maxAttempts = 3, backoff = @Backoff (delay = 1000)).
Важно: использовать с idempotent операциями (повтор безопасен). Интегрируется с Circuit Breaker (например, Resilience4j).
#собеседование
Retry паттерн и как его реализовать в Spring? Ответ:
В Spring реализован через
Параметры: maxAttempts, backoff (задержка между попытками, с экспоненциальным увеличением).
Пример:
Важно: использовать с idempotent операциями (повтор безопасен). Интегрируется с Circuit Breaker (например, Resilience4j).
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM