Микросервисная архитектура: основные понятия

Микросервисная архитектура — это подход к разработке, при котором система разделяется на слабо связанные друг с другом части, которые разрабатываются и развёртываются независимо друг от друга.
У каждого микросервиса своя бизнес-задача: управлять каталогом, хранить содержимое корзины или проводить оплату заказа. При этом разные микросервисы могут быть реализованы на разных языках программирования и использовать разные СУБД.
Альтернатива монолиту
Большинство систем, разработанных ранее, построены на монолитной архитектуре. Это тяжеловесные приложения, с огромным количеством строк кода, который часто не документирован и не читаем.
Вносить изменения в такую систему крайне сложно: малейшее изменение кода может вызвать баги в самых неожиданных местах. А ведь любой баг уронит сразу всю систему! А ещё монолит можно релизить только вест целиком.
Микросервисная архитектура предлагает альтернативу монолиту.
Преимущества микросервисной архитектуры
-
Сокращение Time To Market. Главная цель перехода на микросервисы – увеличение скорости поставки конечной ценности на рынок, или, по-айтишному, сокращение длительности релизного цикла. Если эта цель не выполняется, стоит задуматься, а зачем вам микросервисы.
-
Масштабируемость. Микросервисы можно масштабировать независимо друг от друга. Например, если возрастает нагрузка на какой-либо сервис, можно создать дополнительные реплики этого сервиса или увеличить вычислительные мощности, не затрагивая систему в целом.
-
Отказоустойчивость. При падении одного из микросервисов система в целом продолжает функционировать.
-
Гибкость те хнологий. Любой микросервис по отдельности можно реализовывать на каком угодно техстеке.
Недостатки микросервисной архитектуры
-
Это дорого. Требуется больше железа и людских ресурсов.
-
Это сложно. Сложно правильно декомпозировать предметную область и грамотно определить границы сервисов. Сложно искать ошибки, так как приходится применять специальные системы трейсинга. Сложно обеспечить мониторинг.
-
Сложно поддерживать целостность данных. Если в монолите у нас общая реляционная БД, то и схема данных у нас общая. Целостность и транзакционность находятся под контролем СУБД. В микросервисной архитектуре у каждого сервиса своя БД, а значит нет единой системы, которая бы гарантировала целостность транзакций.
К огда стоит переходить на микросервисы
-
Монолит ограничивает эффективность бизнеса. Вносить изменения в код практически невозможно. Релизы очень сложны и долги. Ошибки приводят к большим финансовым и репутационным потерям.
-
Есть деньги, ресурсы и компетенции.
-
У вас крупный проект с большим количеством разработчиков.
-
Вы отлично понимаете свою предметную область. Без этого верно определить границы микросервисов нельзя.
-
Вы понимаете, как будут работать распределённые транзакции.
Когда не стоит переходить на микросервисы
-
Малый размер проекта. Если у вас проект маленький или средний по размеру, миграция на микросервисы может привести к ненужной сложности и издержкам.
-
Не хватает ресурсов. Микросервисы — это дорого и сложно. Если у вас нет достаточно разработчиков, времени, денег, лучше не пытаться.
-
Команда не готова. Микросервисы требуют специальных навыков и знаний. Если ваша команда не имеет их или не хочет менять архитектуру, это может вызвать проблемы.
-
Текущая архитектура работает. Если ваш монолитный проект устойчив и соответствует потребностям бизнеса.
-
Нужен быстрый старт. Если вам нужно скорее запустить проект и получить фидбек от пользователей, микросервисы могут замедлить процесс.
-
Высокие требования к согласованности данных. Микросервисы используют разные базы данных для разных сервисов, что может создавать сложности при согласовании данных.
-
Тесная связанность компонентов. Если компоненты приложения не могут быть изолированы, переход на микросервисы может быть слишком дорогим.
Подборка материалов
Статьи (теория)
- Просто о микросервисах — Хабр, блог Райффайзен Банка
- Простым языком о микросервисной архитектуре для начинающих — VK Cloud
- Архитектура микросервисов
- Шпаргалка по миграции монолита на микросервисы
- Полный перечень паттернов проектирования MSA от Криса Ричардсона
- 26 основных паттернов микросервисной разработки на русском
- Какого размера должен быть микросервис
- Целостность данных в микросервисной архитектуре — как её обеспечить без распределенных транзакций и жёсткой связности
- Сравнение подходов к реализации распределенных транзакций для микросервисов
Статьи (практика)
- Микросервисы глазами аналитика
- Микросервисы: опыт использования в нагруженном проекте
- Не бойся микросервиса: Алексей Баитов об исп ользовании микросервисной архитектуры на практике
- Kafka и микросервисы: обзор
- Путь IVI от монолита к микросервисам
- Переход от монолита к микросервисам: история и практика Райффайзен Банка
- Предметно-ориентированная микросервисная архитектура от Uber
- Распределённая трассировка: мы всё делали не так
Видео и вебинары
- Что такое Микросервисы || Объяснение от Мартина Фаулера (пересказ на русском)
- Микросервисная архитектура, подходы и технологии — Кирилл Ветчинкин
- Введение в архитектуру микросервисов — Дмитрий Голых
- Микросервисы с нуля — Семен Катаев (Авито)
- ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам — Андрей Половов (Флант)
- Современная Микросервисная архитектура в банковской сфере — доклад Александр Соляра (Иннотех) на конференции Analyst Days-13
- Аналитика микросервисов. Практический опыт аналитика в enterprise — доклад Валерия Разномазова на конференции Analyst Days-14
- Проектируем приложение в микросервисной архитектуре. Разбор кейсов — доклад Максима Цепкова на конференции Analyst Days-12
- Шаблоны проектирования микросервисов на примере Авито
- Целостность данных в микросервисной архитектуре — Николай Голов (Avito)
- Мастер-класс: использование брокеров сообщений в сервисной архитектуре — Андрей Бураков
- Микросервисы vs монолит: разбираемся в архитектуре приложений — демо-занятия от Яндекс Практикум
- Микросервисная архитектура, когда нужна, а когда нет — открытый вебинар курса «Microservice Architecture» от OTUS
- Тестирование в микросервисной архитектуре — демо-занятие курса «Microservice Architecture»
- Авторизация и аутентификация в микросервисной архитектуре — открытый вебинар курса «Microservice Architecture» от OTUS
Вот ссылка на плейлист в Ютубе, где собраны все видео выше + ещё несколько.
Книги
- Крис Ричард сон. Микросервисы. Паттерны разработки и рефакторинга
- Сэм Ньюмен. Создание микросервисов
- Беллемар Адам. Создание событийно-управляемых микросервисов
- Сэм Ньюмен. От монолита к микросервисам
- Парминдер Кочер. Микросервисы и контейнеры Docker