Alejandro Yakovlev
Amigo! Канал посвящен разработке на PHP. Скринкасты и истории из моего личного опыта. Youtube https://youtube.com/@AlejandroYakovlev Boosty https://boosty.to/sashokgorshok ЛС: @alejandro_yakovlev
Больше- Подписчики
- Просмотры постов
- ER - коэффициент вовлеченности
Загрузка данных...
Загрузка данных...
Новое занятие посвящено паттерну SAGA, который решает проблему транзакционной согласованности операции в системе с большим количеством сервисов. В теоретической части рассматриваем основные принципы паттерна, какие проблемы решает, как и когда его стоит использовать. Взглянем на плюсы и минсусы координации повествованием с помощью хореографии и оркестрации. В качестве примера представлен сценарий оформления заказа в различных кейсах. В практической части, реализуем сагу оформления заказа в архитектуре модульного монолита с использованием фреймворка Symfony. Практическая часть досутпна по ссылке
https://boosty.to/sashokgorshok/posts/f31d7201-908e-474d-8c03-01eaea8d802dУроки, менторство:
https://boosty.to/sashokgorshokTelegram:
https://t.me/alejandroyakovlev- Менее 1
- 1 - 2
- 3 - 4
- 5 - 7
- Более 7
В рамках микросервисной архитектуры, чтобы получить в одном сервисе данные из другого сервиса нужно выполнить например http запрос, например, курлом. Это ж дико тормозит систему, какие есть ещё способы взаимодействия между сервисами? Их + и -Тормозит почему? 🤔 Если система тормозит из-за большого объема передаваемых данных 1. Используй сжатие данных. HTTP Compression при передаче JSON или XML. Полезно при больших объемах текстовых данных. Может ухудшить время отклика и повлиять на производительность. 2. Можно перейти на более компактные форматы передачи данных, такие как Protocol Buffers, и использовать gRPC для коммуникции. Это добавит технической сложнсоти. 3. Используй шаблон "связь через общие данные", например, с помощью общих баз данных, файловых хранилищ или согласованных кэшей, однако будь осторожен с повышенной связанностью между сервисами и проблемами согласованности данных. Здесь как и в следюущем пункте появится новая точка отказа. 4. Используй Kafka для потоковой передачи больших данных. При тормозах из-за нагрузки на микросервис 1. Используй запросы батчами, вместо единичных запросов к ресурсам. 2. Используй кэширование. Но помни о точке отказа. Redis не резиновый. 3. Если сервис не справляется с потоком запросов, рассмотри переход к событийному взаимодействию и дуплицированию данных на стороне каждого сервиса. Вместо того чтобы сервисам ходить друг к другу на поклон, пусть автономно выполняют свои обяанности при получении детализированных событий. 4. Если слабое место БД, то нужно ее оптимизировать. Индексация, денормализация, репликация, шардирование. Созадвай материализвоаныне представления. Используй CQRS подход, чтобы читать из реплик или из быстрых хранилищ. 5. Масштабируй вдоль и поперек. Вертикальное масштабирование увеличивает ресурсы одного сервера, в то время как горизонтальное добавляет дополнительные серверы. Если тупнякии вызваны "болтливостью" микросервисов Пересмотри декомпозицию и границы сервисов. Вопросы, котопрые можешь себе задать: Верно ли очерчены границы? Есть ли связанность? Есть вызовы нижестоящих сервисов в цепочке? Можно ли вынести какой-нибудь вызов из этой цепочки или сделать его асинхронным не нарушая бизнес требования? Конечно же потребуется рефакторинг 😱 для улучшения архитектуры. Свой вопрос можешь задать в форме https://forms.gle/zJ4CHci7164z3t1s6
Сашок Горшок на связи! Вопросы разбираютя на стримах и в телеге.
относительно реализации связей между агрегатами: правильно ли я понимаю, что исходя из данной концепции (DDD), привычных связей с FK между сущностями не будет, останутся лишь string значения с ulid и методы в репозиториях для чтения/записи в базу?_ Верное понимание. Агрегаты должны ссылаться друг на друга по идентификаторам. Обычно это string или int. Такая связь помогает явно обозначить границы агрегатов и сделать их менее связанными. При этом агрегаты могут иметь обычные отношения с сущностями, которые существуют в границах агрегата. При построении DTO или создании представления для read модели, данные о связанных агрегатах подтягиваются через репозитории. Создание внешних ключей между сущностями нужно осознанно контролировать. Обычно FK создаются автоматом при создании миграции, но допускать их бесконтрольное создение не стоит. В будущем это ударит по производительности и может привести к блокировкам.