Перейти к основному содержимому

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

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

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

У каждого микросервиса своя бизнес-задача: управлять каталогом, хранить содержимое корзины или проводить оплату заказа. При этом разные микросервисы могут быть реализованы на разных языках программирования и использовать разные СУБД.

Альтернатива монолиту

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

Вносить изменения в такую систему крайне сложно: малейшее изменение кода может вызвать баги в самых неожиданных местах. А ведь любой баг уронит сразу всю систему! А ещё монолит можно релизить только вест целиком.

Микросервисная архитектура предлагает альтернативу монолиту.

Преимущества микросервисной архитектуры

  1. Сокращение Time To Market. Главная цель перехода на микросервисы – увеличение скорости поставки конечной ценности на рынок, или, по-айтишному, сокращение длительности релизного цикла. Если эта цель не выполняется, стоит задуматься, а зачем вам микросервисы.

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

  3. Отказоустойчивость. При падении одного из микросервисов система в целом продолжает функционировать.

  4. Гибкость технологий. Любой микросервис по отдельности можно реализовывать на каком угодно техстеке.

Недостатки микросервисной архитектуры

  1. Это дорого. Требуется больше железа и людских ресурсов.

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

  3. Сложно поддерживать целостность данных. Если в монолите у нас общая реляционная БД, то и схема данных у нас общая. Целостность и транзакционность находятся под контролем СУБД. В микросервисной архитектуре у каждого сервиса своя БД, а значит нет единой системы, которая бы гарантировала целостность транзакций.

Когда стоит переходить на микросервисы

  • Монолит ограничивает эффективность бизнеса. Вносить изменения в код практически невозможно. Релизы очень сложны и долги. Ошибки приводят к большим финансовым и репутационным потерям.

  • Есть деньги, ресурсы и компетенции.

  • У вас крупный проект с большим количеством разработчиков.

  • Вы отлично понимаете свою предметную область. Без этого верно определить границы микросервисов нельзя.

  • Вы понимаете, как будут работать распределённые транзакции.

Когда не стоит переходить на микросервисы

  • Малый размер проекта. Если у вас проект маленький или средний по размеру, миграция на микросервисы может привести к ненужной сложности и издержкам.

  • Не хватает ресурсов. Микросервисы — это дорого и сложно. Если у вас нет достаточно разработчиков, времени, денег, лучше не пытаться.

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

  • Текущая архитектура работает. Если ваш монолитный проект устойчив и соответствует потребностям бизнеса.

  • Нужен быстрый старт. Если вам нужно скорее запустить проект и получить фидбек от пользователей, микросервисы могут замедлить процесс.

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

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

Подборка материалов

Статьи (теория)

  1. Просто о микросервисах — Хабр, блог Райффайзен Банка
  2. Простым языком о микросервисной архитектуре для начинающих — VK Cloud
  3. Архитектура микросервисов
  4. Шпаргалка по миграции монолита на микросервисы
  5. Полный перечень паттернов проектирования MSA от Криса Ричардсона
  6. 26 основных паттернов микросервисной разработки на русском
  7. Какого размера должен быть микросервис
  8. Целостность данных в микросервисной архитектуре — как её обеспечить без распределенных транзакций и жёсткой связности
  9. Сравнение подходов к реализации распределенных транзакций для микросервисов

Статьи (практика)

  1. Микросервисы глазами аналитика
  2. Микросервисы: опыт использования в нагруженном проекте
  3. Не бойся микросервиса: Алексей Баитов об использовании микросервисной архитектуры на практике
  4. Kafka и микросервисы: обзор
  5. Путь IVI от монолита к микросервисам
  6. Переход от монолита к микросервисам: история и практика Райффайзен Банка
  7. Предметно-ориентированная микросервисная архитектура от Uber
  8. Распределённая трассировка: мы всё делали не так

Видео и вебинары

  1. Что такое Микросервисы || Объяснение от Мартина Фаулера (пересказ на русском)
  2. Микросервисная архитектура, подходы и технологии — Кирилл Ветчинкин
  3. Введение в архитектуру микросервисов — Дмитрий Голых
  4. Микросервисы с нуля — Семен Катаев (Авито)
  5. ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам — Андрей Половов (Флант)
  6. Современная Микросервисная архитектура в банковской сфере — доклад Александр Соляра (Иннотех) на конференции Analyst Days-13
  7. Аналитика микросервисов. Практический опыт аналитика в enterprise — доклад Валерия Разномазова на конференции Analyst Days-14
  8. Проектируем приложение в микросервисной архитектуре. Разбор кейсов — доклад Максима Цепкова на конференции Analyst Days-12
  9. Шаблоны проектирования микросервисов на примере Авито
  10. Целостность данных в микросервисной архитектуре — Николай Голов (Avito)
  11. Мастер-класс: использование брокеров сообщений в сервисной архитектуре — Андрей Бураков
  12. Микросервисы vs монолит: разбираемся в архитектуре приложений — демо-занятия от Яндекс Практикум
  13. Микросервисная архитектура, когда нужна, а когда нет — открытый вебинар курса «Microservice Architecture» от OTUS
  14. Тестирование в микросервисной архитектуре — демо-занятие курса «Microservice Architecture»
  15. Авторизация и аутентификация в микросервисной архитектуре — открытый вебинар курса «Microservice Architecture» от OTUS

Вот ссылка на плейлист в Ютубе, где собраны все видео выше + ещё несколько.

Книги

  1. Крис Ричардсон. Микросервисы. Паттерны разработки и рефакторинга
  2. Сэм Ньюмен. Создание микросервисов
  3. Беллемар Адам. Создание событийно-управляемых микросервисов
  4. Сэм Ньюмен. От монолита к микросервисам
  5. Парминдер Кочер. Микросервисы и контейнеры Docker

Про недостатки MSA

  1. Хватит везде делать микросервисы
  2. Остановитесь!!! Вам не нужны микросервисы
  3. Микросервисы. Не всё то золото, что хайп
  4. Видео Ах, как хочется вернуться, ворваться в монолит! — Павел Лакосников (Авито)
  5. Верните мне мой монолит