Доброе утро и с началом новой рабочей недели! Сегодня понедельник, и это отличное время, чтобы начать новую тему и углубить знания. Мы продолжаем разбирать архитектурные паттерны, а сегодня подробнее рассмотрим понятие распределённого монолита — архитектуры, которая объединяет в себе черты как монолита, так и микросервисов.
📌 Что такое распределённый монолит? Распределённый монолит — это архитектура, которая выглядит как микросервисная, но сохраняет ограничения монолита. Часто он возникает, когда приложение технически разделяют на сервисы, но делают это без полноценного перехода на принципы микросервисной архитектуры.
🔍 Как возникает распределённый монолит?
Часто распределённый монолит формируется при следующих условиях:
➕ Сервисы остаются зависимыми: хотя каждый сервис запускается отдельно, они сильно зависят друг от друга. Сбой в одном сервисе может вызвать сбой в других.
➕ Общая база данных: несколько сервисов зависят от единой базы данных, что нарушает независимость и усложняет работу с данными.
➕ Синхронные вызовы: сервисы взаимодействуют напрямую и синхронно, ожидая ответа друг от друга для выполнения своих функций.
‼️ В результате, распределённый монолит несёт в себе недостатки монолита и микросервисов одновременно: сложность развертывания и тесная зависимость компонентов.
🔧 Основные признаки распределённого монолита
✅ Синхронные зависимости: сервисы не могут работать автономно и зависят от ответов других в реальном времени.
✅ Общая база данных: несколько сервисов используют одно хранилище, что ограничивает возможность их независимого развертывания.
✅ Единое развертывание: часто обновление одного компонента требует координации с другими, так как изменения могут затронуть сразу несколько модулей.
📈 Почему это проблема?
Распределённый монолит объединяет недостатки монолитной и микросервисной архитектур:
🔻 Надёжность: зависимость от всех сервисов снижает устойчивость. Сбой в одном месте может вызвать остановку всей системы.
🔻 Сложность масштабирования: масштабировать можно только всю систему целиком.
🔻 Усложнение тестирования и мониторинга: из-за тесных зависимостей необходимо контролировать сразу несколько сервисов, что требует больших затрат на поддержку.
🤔 Как избежать распределённого монолита?
1️⃣ Разделение данных: каждому сервису должна соответствовать отдельная база данных, чтобы он оставался независимым.
2️⃣ Асинхронное взаимодействие: для связи между микросервисами лучше использовать очереди сообщений и события, что уменьшает зависимость.
3️⃣ Сокращение синхронных вызовов: избегайте прямых зависимостей. Лучше разрабатывать сервисы так, чтобы они выполняли ограниченные задачи и обменивались только ключевыми данными.
📌 Когда нужно переходить к полноценным микросервисам?
Переход от распределённого монолита к полноценным микросервисам имеет смысл, когда:
📍 Система стала сложной и тесно взаимосвязанной.
📍 Развертывание и обновления вызывают проблемы из-за зависимостей между сервисами.
📍 Требуется масштабировать отдельные компоненты, но их зависимость от других этому мешает.
⚡ Распределённый монолит — это рискованный компромисс. Чтобы избежать его ограничений, при проектировании системы важно правильно выделять области ответственности и поддерживать независимость компонентов.
· 11.11.2024
Подписывайтесь на мой Telegram канал, где уже завтра можно будет пройти проверку знаний по данной теме: https://t.me/systemny_analiz_prosto
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён