DevOps и облака
Что такое микросервисы?
Микросервисы (microservices) — это подход к архитектуре, при котором приложение состоит из нескольких небольших независимых сервисов. Каждый отвечает за свою часть — оплату, каталог, уведомления, — разворачивается отдельно и обменивается данными с другими через API.
Главное преимущество — независимость. Команды выпускают свои сервисы, не дожидаясь друг друга, каждый сервис масштабируют отдельно под его нагрузку, а сбой одного не обязательно останавливает всю систему.
Цена — сложность поддержки. Появляются сетевые задержки, ошибки на стыках сервисов, необходимость в сквозном логировании и согласованности данных между сервисами. Поэтому большинство продуктов разумно начинать как монолит и выделять сервисы, когда для этого есть конкретная причина.
Где применяется
К микросервисам переходят крупные системы с большими командами: маркетплейсы, банки, службы доставки, телеком. Каталог, оплата, уведомления и поиск работают отдельно, разворачиваются независимо и могут быть написаны на разных языках — каждая команда выбирает то, что лучше всего подходит для её задачи.
За гибкость платят инфраструктурой. Нужны контейнеры и оркестрация, отслеживание запросов между сервисами, централизованные логи, обработка сбоев и чёткие договорённости об обмене данными. Поэтому новые продукты чаще начинают с одного приложения и разделяют его позже, когда общий код действительно мешает.
Пример
В чёрную пятницу нагрузка растёт только на каталог и оплату. В микросервисной архитектуре увеличивают мощность именно этих двух сервисов, а остальные оставляют как есть. В одном большом приложении пришлось бы увеличивать ресурсы для всей системы.
Частые вопросы
Чем микросервисы отличаются от монолита?
Монолит — это одно приложение, которое собирают и разворачивают целиком. Микросервисы — набор отдельных сервисов, каждый со своей базой и своим графиком выпусков. Монолит проще разрабатывать и поддерживать, а микросервисы выигрывают в независимости команд и точечном масштабировании.
С чего лучше начинать новый проект?
Почти всегда — с монолита, но с аккуратно разделёнными модулями. Пока продукт формируется, границы между сервисами меняются, и если зафиксировать их слишком рано, получишь всю сложность распределённой системы без её преимуществ.
Какие сложности появляются с микросервисами?
Сетевые запросы могут падать и тормозить, одна операция охватывает несколько сервисов, логи разбросаны по разным системам, а воспроизвести проблему на своём компьютере гораздо сложнее. Добавляется и поддержка: мониторинг всех сервисов, версионирование API, согласованное развёртывание.
Как микросервисы обмениваются данными?
Чаще всего синхронно через REST или gRPC, когда ответ нужен сразу, и асинхронно через очереди сообщений вроде Kafka или RabbitMQ, когда важна устойчивость к временной недоступности сервиса. Зрелые системы обычно используют оба способа.
Обучение DevOps в OWU
Освойте профессию DevOps-инженера на практических курсах с менторами и реальными проектами.
Выбрать курс