​​Доброе утро и с началом новой рабочей недели! Сегодня понедельник, и это отличное время, чтобы начать новую тему и углубить знания. Мы продолжаем разбирать архитектурные паттерны, а сегодня подробнее рассмотрим понятие распределённого монолита — архитектуры, которая объединяет в себе черты как монолита, так и микросервисов.

📌 Что такое распределённый монолит? Распределённый монолит — это архитектура, которая выглядит как микросервисная, но сохраняет ограничения монолита. Часто он возникает, когда приложение технически разделяют на сервисы, но делают это без полноценного перехода на принципы микросервисной архитектуры.

🔍 Как возникает распределённый монолит?

Часто распределённый монолит формируется при следующих условиях:

➕ Сервисы остаются зависимыми: хотя каждый сервис запускается отдельно, они сильно зависят друг от друга. Сбой в одном сервисе может вызвать сбой в других.

➕ Общая база данных: несколько сервисов зависят от единой базы данных, что нарушает независимость и усложняет работу с данными.

➕ Синхронные вызовы: сервисы взаимодействуют напрямую и синхронно, ожидая ответа друг от друга для выполнения своих функций.

‼️ В результате, распределённый монолит несёт в себе недостатки монолита и микросервисов одновременно: сложность развертывания и тесная зависимость компонентов.

🔧 Основные признаки распределённого монолита

✅ Синхронные зависимости: сервисы не могут работать автономно и зависят от ответов других в реальном времени.

✅ Общая база данных: несколько сервисов используют одно хранилище, что ограничивает возможность их независимого развертывания.

✅ Единое развертывание: часто обновление одного компонента требует координации с другими, так как изменения могут затронуть сразу несколько модулей.

📈 Почему это проблема?

Распределённый монолит объединяет недостатки монолитной и микросервисной архитектур:

🔻 Надёжность: зависимость от всех сервисов снижает устойчивость. Сбой в одном месте может вызвать остановку всей системы.

🔻 Сложность масштабирования: масштабировать можно только всю систему целиком.

🔻 Усложнение тестирования и мониторинга: из-за тесных зависимостей необходимо контролировать сразу несколько сервисов, что требует больших затрат на поддержку.

🤔 Как избежать распределённого монолита?

1️⃣ Разделение данных: каждому сервису должна соответствовать отдельная база данных, чтобы он оставался независимым.

2️⃣ Асинхронное взаимодействие: для связи между микросервисами лучше использовать очереди сообщений и события, что уменьшает зависимость.

3️⃣ Сокращение синхронных вызовов: избегайте прямых зависимостей. Лучше разрабатывать сервисы так, чтобы они выполняли ограниченные задачи и обменивались только ключевыми данными.

📌 Когда нужно переходить к полноценным микросервисам?

Переход от распределённого монолита к полноценным микросервисам имеет смысл, когда:

📍 Система стала сложной и тесно взаимосвязанной.

📍 Развертывание и обновления вызывают проблемы из-за зависимостей между сервисами.

📍 Требуется масштабировать отдельные компоненты, но их зависимость от других этому мешает.

Распределённый монолит — это рискованный компромисс. Чтобы избежать его ограничений, при проектировании системы важно правильно выделять области ответственности и поддерживать независимость компонентов.

​​Доброе утро и с началом новой рабочей недели! Сегодня понедельник, и это отличное время, чтобы начать новую тему и углубить знания | Сетка — социальная сеть от hh.ru