
Микросервисная архитектура: чем она хороша и кому нужна
Статья
Время чтения
11 минут
Микросервисы — основной тренд в разработке мобильных и веб-приложений. Они позволяют компаниям быстро разрабатывать и выводить на рынок новые продукты и, как следствие, сохранять высокую конкурентоспособность.
Про то, что такое микросервисы, а также про микросервисный подход в разработке и инструменты, которые помогают эффективно его реализовывать, расскажем в этой статье.
Введение в микросервисную архитектуру
Микросервисная архитектура — подход к разработке программного обеспечения, при котором приложение строится из небольших автономных и управляемых компонентов. Каждый из этих компонентов — микросервисов (microservices/MS) — выполняет определенные функции и взаимодействует с остальными через API.
Если упрощать, то микросервисы похожи на детали конструктора, которые при необходимости можно легко пересобрать в любой новой конфигурации. Для этого потребуется добавить новые «кубики» или убрать ненужные. Именно поэтому построенные на базе микросервисов приложения отличаются высокой гибкостью и изменяемостью.
Совсем иначе выглядит традиционный подход к разработке. Он подразумевает создание так называемого монолита — большой вычислительной сети с единым кодом, который контролирует выполнение всех бизнес-задач приложения.
Чтобы разобраться, каковы ключевые архитектурные отличия между монолитным и микросервисным подходами, а также какое место в разработке занимает сервис-ориентированная архитектура (SOA), поговорим об этом подробнее.
Что такое микросервисы и как они работают
Микросервисы — это небольшие независимые модули, каждый их которых отвечает за конкретный элемент логики приложения. Между собой эти модули «общаются» с помощью программного интерфейса приложения (API, Application Programming Interface). При этом каждый из них запускается в изолированной среде.

Микросервисная архитектура дает множество преимуществ для разработки и поддержки приложений. При ее использовании:
просто осуществлять рефакторинг кода благодаря тому, что с каждым логическим компонентом можно работать отдельно;
легко масштабировать приложение, ведь каждый из компонентов можно запускать на разных серверах;
без проблем можно мигрировать приложение, потому что все нужные зависимости находятся внутри каждого из компонентов.
Проще говоря, приложение с микросервисной архитектурой легко обновлять, масштабировать и при необходимости перемещать из одной среды в другую. При этом, что немаловажно, если один из микросервисов выйдет из строя, приложение продолжит работу, хоть и не с полной функциональностью.
Краткий обзор монолитной и сервис-ориентированной архитектуры (SOA)
Большинство приложений можно спроектировать как на микросервисной, так и на монолитной или сервис-ориентированной архитектуре. Однозначного ответа на вопрос, какая из них эффективнее, не существует — выбор всегда зависит от специфики продукта, который планируется разработать.
Монолитная архитектура. Приложение с монолитной архитектурой выстраивается из компонентов, объединенных в единый неделимый блок — монолит. Все они связаны между собой напрямую и тесно взаимодействуют.

Собранные вместе базы данных, клиентский пользовательский интерфейс и логика приложения упрощают запуск и тестирование монолитного ПО. Это делает монолитный подход предпочтительным при запуске небольших проектов, стартапов или продуктов с несложной структурой: например, одностраничных сайтов или простых онлайн-магазинов.
Пик популярности монолитная архитектура переживала в 90-е и 2000-е годы, когда приложения были проще и чаще всего разворачивались на едином сервере. Но и сегодня монолитный подход нельзя считать устаревшим — он все еще активно используется. Причем не только в разработке небольших проектов, но и в таких крупных, как Booking или GitHub.
Сервис-ориентированная архитектура (Service-Oriented Architecture, SOA).
Судя по названию «сервис-ориентированная архитектура» несложно догадаться, что именно сервисы выступают ключевыми элементами приложений, построенных на ее базе. При этом эти сервисы автономны, обладают определенным интерфейсом и могут быть объединены в более крупные компоненты.
В основу сервис-ориентированного подхода заложена идея переиспользования сервисов. Это становится возможным благодаря применению так называемой корпоративной шины (Enterprise Service Bus, ESB), которая позволяет сервисам взаимодействовать.

В разговоре о разных типах архитектуры важно упомянуть и бессерверную архитектуру (Serverless Architecture), в основе которой лежат бессерверные вычисления. Они позволяют бизнесу развертывать приложения на серверах под управлением облачного провайдера, передавая ему все задачи по обеспечению отказоустойчивости и масштабируемости инфраструктуры ПО. Легко реализовать приложение с бессерверной архитектурой можно с помощью сервиса FunctionGraph. Он позволяет размещать и запускать код в бессерверной среде, настроив его выполнение при срабатывании заданных триггеров.
Отличия микросервисной архитектуры от монолитной и SOA
Возвращаясь к разговору о микросервисной архитектуре, давайте обсудим, каковы ее преимущества в сравнении с монолитной, а также в чем заключаются ключевые отличия между микросервисным и сервис-ориентированным подходами.
Преимущества микросервисов перед монолитом
Как мы говорили выше, утверждать, что микросервисная архитектура лучше монолитной, нельзя. У каждого из подходов есть свои особенности, которые делают их более или менее подходящими для реализации проектов разной специфики.
Однако причины для стремительного роста популярности микросервисов налицо. В их числе:
Простое масштабирование. Отдельные микросервисы внутри приложения можно масштабировать независимо друг от друга.
Независимость компонентов. Функциональные модули внутри микросервисного приложения полностью автономны, что позволяет разрабатывать, развертывать и обновлять их, не влияя на работу всего ПО.
Гибкость работы. Для разработки микросервисов можно использовать разные языки и технологии программирования. Благодаря этому возможности микросервисного приложения расширяются. При этом над каждым из модулей может работать отдельная команда, что значительно ускоряет разработку.
Простой деплой. Микросервисы могут разрабатываться, развертываться и обновляться на разных серверах или облачных платформах.
Легкая «работа над ошибками». Если один из микросервисов нуждается в обновлении или замене, процесс внесения доработок не приводит к полной остановке системы. Это упрощает поддержку приложения и повышает уровень клиентского сервиса.
Легковесность компонентов. Легковесные протоколы взаимодействия между микросервисами, такие как HTTP или REST, ускоряют обмен данными.
Отличия микросервисной архитектуры от SOA
Есть расхожее заблуждение, согласно которому сервис-ориентированный подход идейно близок к микросервисному, ведь он тоже подразумевает создание приложений в виде независимых сервисов, которые взаимодействуют между собой с помощью различных протоколов и интерфейсов.
Однако по стилю архитектуры эти подходы фундаментально различны:
SOA-архитектура централизована и слабо разграничена;
микросервисная архитектура децентрализована и предполагает создание ПО с распределенными системами.
Таким образом, сервис-ориентированная архитектура базируется на связности сервисов и их повторном использовании, а микросервисная — на предпочтительном дублировании основных функций в каждом из модулей приложения. При этом взаимодействие между ними сводится к обмену данными с помощью API, а не вызову методов из других модулей.
Недостатки микросервисной архитектуры
Несмотря на массу достоинств, которыми обладает микросервисный подход, он не лишен и ряда недостатков:
Сложное проектирование. При создании микросервисного приложения о многом стоит подумать заранее: в том числе о том, какие модули будут входить в ПО, за что будет отвечать каждый из них и как планируется ими управлять.
Большое количество модулей. С одной стороны, как мы отмечали выше, это хорошо. С другой — затрудняет мониторинг и поддержку.
Снижение производительности. Большое число модулей неизбежно приводит к падению производительности, ведь информации приходится проходить весьма длинный путь, обходя модули один за другим.
Возможные проблемы с целостностью данных. Этот недостаток может проявится в том случае, если модули приложения плохо согласованы между собой.
Дорогая разработка. Микросервисы — это недешево. Для их разработки, развертывания и поддержки понадобится команда (а то и не одна) квалифицированных специалистов. А еще потребуются специализированные инструменты и сервисы для управления модулями и мониторинга работы приложения.
Мы обсудили преимущества и особенности микросервисов — самое время поговорить о том, как они работают.
Как работают микросервисы
Итак, мы уже разобрались в том, что приложения с микросервисной архитектурой работают по принципу «разделяй и властвуй»: каждый микросервис отвечает за выполнение конкретных задач. Далее чуть подробнее обсудим то, как микросервисы взаимодействуют внутри ПО и что помогает внедрять в него новые модули просто и эффективно.
Взаимодействие микросервисов через API
Внутри одного микросервисного приложения могут содержатся десятки, сотни и даже тысячи отдельных микросервисов. Для управления ими используется технология контейнеризации, которая позволяет инкапсулировать данные в изолированных средах — контейнерах.

Каждый контейнер — это, своего рода, отдельное приложение, которое использует ядро хоста, в котором размещен контейнер, запущено изолированно и обладает всеми необходимыми зависимостями «под капотом».
Заключенные в контейнеры приложения взаимодействуют между собой с помощью API — специального набора инструкций и функций в виде интерфейса. Такой набор есть у каждого из них. Именно он определяет то, какие запросы может получать сервис и как будет на них отвечать.

Основные паттерны интеграции микросервисов
Есть множество паттернов интеграции микросервисов, которые обеспечивают успешное взаимодействие между ними. В числе наиболее распространенных из них:
синхронная интеграция с помощью HTTP/REST API;
асинхронная интеграция через очереди сообщений (Message Queues), которая реализуется с помощью таких сервисов как RocketMQ и Kafka;
группировка API c API Gateway;
и многие другие.
Подходящие проекты и примеры использования
Каким проектам подойдет микросервисная архитектура? Если отвечать на этот вопрос максимально упрощенно, то крупным и сложным. Таким, работа которых завязана на использовании большого числа разных технологий и языков программирования, требует регулярного внесения изменений или подразумевает интеграцию с внешними сервисами.
Типы проектов, для которых микросервисы подходят лучше всего
Говоря детальнее, микросервисная архитектура будет эффективна для таких проектов, как:
Супераппы, многофункциональные программы и веб-приложения. Чем больше функций нужно реализовать в одной программе, тем выше становится потребность в микросервисном подходе.
Большие корпоративные системы и другие программы с объемным исходным кодом. С переходом на микросервисный подход развитие и поддержка системы, а также процесс внесения изменений упрощаются.
Cloud-native приложения. Облако — идеальная база для микросервисного приложения. Оно всегда готово к большим нагрузкам и масштабированию, а также позволяет распределить микросервисы по разным серверам, что еще увеличивает показатели отказоустойчивости ПО.
Примеры известных компаний, использующих микросервисную архитектуру
Тенденция на переход к микросервисной архитектуре впервые обнаружила себя еще в 2000-х. Тогда такие гиганты зарубежного рынка, как Google, Amazon и Microsoft начали развивать облачную инфраструктуру, чтобы дать своим клиентам возможность создавать сервисы без использования собственных мощностей. Параллельно начали развиваться как технологии контейнеризации, в том числе Docker, так и платформы оркестрации контейнеров, например Kubernetes. А уже в 2010-х микросервисный подход начали применять многие крупные игроки: Netflix, Twitter, Airbnb, Adidas и многие другие.
Сегодня интерес к микросервисам только растет. В России, согласно опросу CNews, микросервисную архитектуру уже используют 35% российских компаний. Об опыте перехода сообщали крупные банки, а также, например, «М.Видео-Эльдорадо» и «МегаФон».
Основные инструменты для создания и управления микросервисами
В микросервисной архитектуре модули приложения могут быть реализованы на базе любого современного языка программирования или сервиса, но существует набор основных инструментов, ставших для нее определяющими.
Один из самых популярных инструментов для создания микросервисов — платформа для развертывания и управления приложениями на основе контейнеризации Docker. Он позволяет создавать для приложений отдельные контейнеры с виртуальным представлением серверной операционной системы. С его помощью вы также можете создавать Docker-образы, загружать их в приватный реестр Evolution Artifact Registry и развертывать контейнеры на их основе в готовой облачной среде Evolution Container Apps.
Для управления большими наборами контейнеров — то есть для их «оркестрации» — чаще всего используется Kubernetes. В Cloud.ru для этого предусмотрен сервис Evolution Managed Kubernetes.
Чтобы контролировать распределение нагрузки между модулями микросервисного проекта, также необходимы балансировщики. По принципу работы они могут быть программными, аппаратными и облачными. Например, для распределения сетевого трафика между виртуальными машинами в условиях повышенной нагрузки можно использовать Evolution Load Balancer.
Также для эффективной работы микросервисного проекта важны брокеры сообщений и платформы потоков событий, такие как Apache Kafka. Они помогают микросервисам непрерывно общаться почти в реальном времени, маршрутизируя потоки, как этого требует текущая схема взаимодействия. А для управления брокерами сообщений в облаке можно использовать Evolution Managed Kafka.
Заключение
Согласно отчету аналитического агентства IKS-Consulting, в следующие четыре года объем рынка облачных инфраструктурных сервисов в России вырастет в 3,8 раза, до 464 млрд руб. Параллельно его росту интерес к микросервисам также будет только расти, ведь именно микросервисная архитектура считается наиболее естественным подходом для разработки облачных приложений. Причиной тому ее очевидные преимущества, особенно в сфере Agile-разработки и развертывания сложных приложений корпоративного уровня, в числе которых:
простота обновления кода;
возможность использования разных технологических стеков;
возможность независимого масштабирования модулей и, как следствие, сокращение затрат на масштабирование приложения в целом.
При этом важно понимать, что несмотря на все плюсы микросервисной архитектуры, ее использование не всегда оправдано: она может упростить развитие крупных систем, но стать слишком дорогой и громоздкой для небольших проектов. Поэтому выбор архитектуры всегда должен определяться решением конкретной бизнес-задачи.
Вам может понравиться


REST API: что это и как использовать

Как создать Telegram Web App: инструкция по разработке Mini App

Как привлекать клиентов и зарабатывать до 20% на рекомендациях: готовые инструменты

Коды ошибок HTTP: что нужно знать о серверных и клиентских ошибках

Лучшие дистрибутивы Linux: выбор популярных версий

Система управления базами данных (СУБД): что это такое и зачем нужна

Все о Telegram-ботах: какие бывают и как их сделать самому

VPS/VDS: что это такое и чем они отличаются? Полное руководство

Что такое NVMe и как он отличается от SATA SSD и M.2

Как развернуть WordPress в облаке: инструкция для новичков

Применение LLM в бизнесе: опыт лидеров и роль облачного провайдера

Центры обработки данных (ЦОД): что это и как они работают

Какие новости за январь — дайджест Cloud.ru

Команда grep в Linux: как искать строки и шаблоны

PostgreSQL: что это за СУБД и чем она хороша

Что может chmod: как управлять доступами к файлам и папкам в Linux

Как узнать IP-адрес в Linux через командную строку

Как узнать IP-адрес своего компьютера

Система MySQL: что это и для чего нужна

Команды kill и killall в Linux: как завершить ненужные процессы

Работа с файлами в Linux: их создание и организация через терминал

Стандарт Tier III для дата-центра: что значит и почему это круто

Какие новости за декабрь и начало января — дайджест Cloud.ru

Что такое FTP-протокол и как настроить FTP сервер

Белые и серые IP, динамические и статические - в чем различие

Как защищать сайты и приложения в облаке от DDoS-атак

Какие новости за ноябрь — дайджест Cloud.ru

BAT-файлы: что это такое, зачем они нужны и как их создавать

Гайд по протоколу HTTP: расшифровка, структура и механизм работы

Межсетевой экран, firewall и брандмауэр: что это, в чем между ними разница и зачем они нужны

Kubernetes на Cloud.ru Evolution: возможности и преимущества

Какие новости за октябрь — дайджест Cloud.ru

Как создать сетевую архитектуру для размещения межсетевых экранов на платформе Облако VMware

Рассказать про технологии лампово, или Как мы провели конференцию GoCloud Tech для инженеров и...

Какие новости за сентябрь — дайджест Cloud.ru

Высокоресурсные вычисления: роль суперкомпьютеров в жизни и бизнесе

Реферальная программа Cloud.ru: как устроена и как на ней зарабатывать

Сетевая модель OSI: что это такое и зачем она нужна

Какие новости за август — дайджест Cloud.ru

Сетевые протоколы передачи данных — что это такое и какие бывают

Какие новости за июль — дайджест Cloud.ru

Как новые возможности в юридических документах Cloud.ru облегчают работу с договорами и не только

Какие новости за июнь — дайджест Cloud.ru

Как обновления VMware Cloud Director облегчают управление и делают работу с инфраструктурой в ...

Как мы рассчитывали «Панораму российского IT-рынка» за 2022 год

Как снизить риски утечки данных и санкций госрегуляторов: 152-ФЗ в Cloud.ru

Бесплатный курс по работе с Cloud.ru Advanced: рассказываем, в чем польза, кому подойдет и как...

Как модель Anything as a Service упрощает IT-процессы

Снижение рисков на производстве: AI-сервис распознает нарушения ношения СИЗ

Kandinsky 2.1: новый уровень в генерации изображений по текстовому описанию

Облачные сервисы для стартапов: как пройти путь от идеи до цифрового продукта и не разориться

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

VDI: что это, как работает и в чем выгода для бизнеса

Как защитить облачную инфраструктуру — рассказываем на примере межсетевого экрана нового покол...

Как начать использовать AI/ML на практике

Бессерверные вычисления: что это за технология и кому она нужна

Чек-лист: как обеспечить безопасность облачной инфраструктуры

Искусственный интеллект

Что такое IaaS?

Что такое PaaS

Machine Learning

Data Science

Машинное обучение без учителя

Классическое машинное обучение

Нейронные сети

Глубокое обучение

Защита персональных данных: как легче соблюдать закон с Cloud.ru и сохранять спокойствие

Как сохранить IT-инфраструктуру и бизнес: руководство к действию

Машинное обучение и Big Data в кибербезопасности

Ответы на актуальные вопросы

Что такое DDoS-атаки, чем они опасны и как от них защититься

Аудит информационной безопасности: что это, зачем и когда его проводить

Межсетевые экраны: UTM, NGFW-системы, NTA, NDR

Обзор межсетевых экранов, систем IPS и IDS

PostgreSQL vs MySQL: какая система подходит вашему бизнесу

Основы резервного копирования

Специальное предложение «180 дней тестового периода резервного копирования» для всех клиентов
Платформа SberCloud Advanced теперь обеспечивает максимальный уровень защиты персональных данных

Что такое объектное хранилище S3 и как его используют

Customer Enablement: как SberCloud работает с клиентами, чтобы сделать миграцию в облако комфо...

Сеть доставки контента CDN: новые функциональные возможности и преимущества

Объясняем на кейсах: польза CDN для бизнеса

Новая Windows Server 2022 в облаке SberCloud — новые возможности клиентов

Запуск нового сервиса Managed OpenShift в облачной среде SberCloud

Как работает технология DNS

SberCloud Advanced запустила третью ресурсную зону доступности для комфортной работы клиентов

PostGIS в PostgreSQL — как можно использовать

GitLab для начинающих: как и для чего используется

Краткий обзор методологии CI/CD: принципы, этапы, плюсы и минусы

Персональные данные: правильно обрабатываем и храним

Кто и зачем использует облачные модели IaaS и PaaS

152-ФЗ в облаке: хранение персональных данных в облаке

Как работает CDN (Content Delivery Network)?

Service Level Agreement (SLA): все о соглашении об уровне сервиса

Что такое «интернет поведения» (IoB)?

Чек-лист: 6 шагов для успешной миграции в облако

Машинное обучение: просто о сложном

Профессия DevOps-инженер: кто это и чем занимается

Гайд по Kubernetes. Эпизод I: k8s для неразработчиков

Публичные, частные и гибридные облака: в чем разница?
