Микросервисы и монолиты

Что такое монолитная архитектура (её плюсы и минусы)?

Монолитная архитектура — это традиционная модель программного обеспечения, которая представляет собой единый модуль, работающий автономно и независимо от других приложений.

ПлюсыМинусы
Быстрый старт и развертываниеДольше разрабывать большой проект
Общий codebaseНевозможно масштабировать
Меньше API вызовов (т.к. общий проект)Сложнее использовать другую технологию
Перезапуск всего приложения при внесении изменений

Что такое микросервисная архитектура (её плюсы и минусы)?

Микросервисная архитектура представляет собой метод организации архитектуры, основанный на ряде независимо развертываемых служб. У этих служб есть собственная бизнес-логика и база данных с конкретной целью.

ПлюсыМинусы
Гибкость с технологиямиДорого
ОтказоустойчивостьСложнее дебажить
Локализуются сложность и риски отказовСложности развёртывания (сложнее локально запустить)
Масштабируемость

Как происходит переход от монолитной архитектуры к микросервисной?

Опция 1. Постепенное отпочковывание микросервисов и написание новой функциональности уже отдельно от основного приложения. Подход хороший и рабочий, но имеет один существенный недостаток — основное монолитное приложение в обозримом будущем не исчезнет. В итоге у нас будет монолит и куча вспомогательных сервисов, вместо набора независимых микросервисов.

Паттерны проектирования

Порождающие (creational)

Отвечают за удобное и безопасное создание новых объектов или даже целых семейств объектов.

Абстрактная фабрика — это порождающий паттерн проектирования, который позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов.

abstract-factory

Code

Прототип — это порождающий паттерн проектирования, который позволяет копировать объекты, не вдаваясь в подробности их реализации.

prototype

Code

Структурные (structural)

Отвечают за построение удобных в поддержке иерархий классов.

Декоратор — это структурный паттерн, который позволяет добавлять объектам новые поведения на лету, помещая их в объекты-обёртки.

Code.

**Заместитель (proxy)** — это структурный паттерн проектирования, который позволяет подставлять вместо реальных объектов специальные объекты-заменители. Эти объекты перехватывают вызовы к оригинальному объекту, позволяя сделать что-то до или после передачи вызова оригиналу.

Code.

Поведенческие (behavioural)

Решают задачи эффективного и безопасного взаимодействия между объектами программы.

Итератор — это поведенческий паттерн, позволяющий последовательно обходить сложную коллекцию, без раскрытия деталей её реализации.

Code.

Стратегия — это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми.

Code.

Паттерны микросервисов

Saga

Outbox

Все о микросервисах

Зачем нужен паттерн database per service | Эйч Навыки | Менторство по Go - YouTube Собеседование на Go-разработчика, System Design - YouTube