Микросервисная архитектура
С микросервисной архитектурой можно создавать современные и легко масштабируемые распределенные системы
В современном мире модернизация приложений часто означает переход на облачные приложения на основе микросервисов. Для их развертывания используют такие контейнерные технологии, как Docker и Kubernetes. Так поступили Netflix, Atlassian и множество других организаций. Причина в том, что с микросервисной архитектурой можно облегчить масштабирование, ускорить разработку и сократить итеративный цикл разработки сервисов.
В микросервисной архитектуре приложение разбивается на ряд независимо развертываемых сервисов, которые взаимодействуют с помощью API-интерфейсов. Благодаря такому подходу каждый отдельный сервис можно развертывать и масштабировать независимо от других. В результате команды могут быстрее и чаще поставлять объемные и сложные приложения. В отличие от монолитного приложения, с микросервисной архитектурой команды могут быстрее внедрять новые возможности и вносить изменения, при этом им не приходится переписывать большие фрагменты существующего кода.
Некоторые ключевые характеристики микросервисной архитектуры
Несколько компонентов-сервисов
Микросервисная архитектура состоит из отдельных, слабо связанных компонентов-сервисов, каждый из которых можно разрабатывать, развертывать, эксплуатировать, изменять и развертывать повторно, не нарушая работу других сервисов и целостность приложения. Это позволяет легко и быстро развертывать отдельные возможности приложения.
Легкое обслуживание и тестирование
В микросервисной архитектуре команды могут экспериментировать с новыми возможностями и возвращаться к предыдущей версии, если что-то пойдет не так. Это облегчает обновление кода и ускоряет вывод новых возможностей на рынок. Кроме того, так становится проще искать и исправлять ошибки и баги в отдельных сервисах.
Владельцами выступают небольшие команды
В микросервисной архитектуре созданием отдельных сервисов обычно занимаются небольшие независимые команды, что способствует внедрению методов agile и DevOps. Команды получают возможность работать независимо и быстро двигаться вперед, в результате чего сокращаются циклы разработки.
Организация работы на основе бизнес-возможностей
При микросервисном подходе сервисы организуются на основе бизнес-возможностей. Команды являются многофункциональными, обладают полным набором необходимых для разработки навыков и работают над реализацией отдельных функциональных возможностей.
Автоматизированная инфраструктура
Команды, которые создают и обслуживают микросервисы, обычно используют такие методы автоматизации инфраструктуры, как непрерывная интеграция (CI), непрерывная поставка (CD) и непрерывное развертывание (тоже CD). Таким образом, каждая команда может создавать и развертывать свой сервис независимо от других команд, не мешая их работе. Кроме того, команда может развернуть новую версию сервиса параллельно с предыдущей версией.
Пример микросервисной архитектуры
Рассмотрим в качестве примера гипотетический проект разработки ПО для электронной коммерции. На следующей схеме показан сайт электронной коммерции с веб-приложением и мобильным приложением. Они взаимодействуют с несколькими микросервисами, каждый из которых предоставляет определенные возможности в своей области.
Современные веб-приложения запускаются в браузерах и нередко предоставляются через сеть распространения контента (CDN). Сеть CDN может доставлять веб-приложения на серверы по всему миру, чтобы их можно было быстро загрузить с помощью веб-браузеров. Сети CDN часто используют для предоставления мультимедийных ресурсов, таких как изображения, аудиозаписи и видеофайлы. Например, в этой системе через CDN предоставляются видеоролики и изображения товаров для продажи.
На схеме изображены следующие микросервисы:
Сервис аккаунтов
Сервис аккаунтов предоставляет информацию об аккаунте клиента, например адрес и платежную информацию.
Сервис запасов
Предоставляет актуальную информацию о запасах товаров, которые может купить клиент.
Сервис корзины для покупок
С помощью этого сервиса клиент выбирает из запасов те товары, которые он хочет приобрести.
Платежный сервис
Клиенты оплачивают товары в корзине.
Сервис доставки
Отвечает за планирование упаковки и доставки приобретенных товаров.
Приложения взаимодействуют с микросервисами через API-интерфейсы REST, которые публикует каждый микросервис. Приложения обращаются к API-интерфейсам микросервисов через API-шлюз, который также позволяет заменять одни микросервисы другими с тем же API.
Каждый микросервис состоит из сервиса и базы данных. Сервисы работают с API-интерфейсами REST, реализуют бизнес-логику и сохраняют информацию в базе данных. Ресурсы микросервисов, такие как базы данных и очереди, изолируются в соответствии с соглашением о 12-факторных приложениях.
Как создавать микросервисы
Многие организации начинают с монолитной архитектуры. Затем нужно будет разделить базу кода на несколько сервисов, реализовать надлежащие схемы для корректной обработки сбоев и восстановления после проблем с сетью, обеспечить согласованность данных, наладить мониторинг нагрузки сервисов и т. д. Однако у этого вопроса есть не только техническая сторона. Вам также потребуется реорганизовать команды и, скорее всего, принять культуру DevOps.
Затем приходит время, когда нужно решить самую трудную задачу — разделить монолит на микросервисы. Рефакторизация монолитной схемы базы данных может оказаться сложной операцией. Важно четко определить, какие наборы данных требуются каждому сервису и какие из них нужны в нескольких местах сразу. Непрерывная поставка помогает снизить риски, связанные с ошибками в релизе, и дает команде возможность сосредоточиться на создании и запуске приложения, а не на его развертывании.
Сравнение микросервисной и монолитной архитектур
Монолитная архитектура — это традиционная модель создания программного продукта в виде единого модуля, который работает автономно и независимо от других приложений. Микросервисная архитектура противоположна монолитной, поскольку в данном случае архитектура организована в виде ряда независимо развертываемых сервисов. Монолиты полезно использовать на начальных этапах проектов, чтобы облегчить развертывание и не тратить слишком много умственных усилий на управление кодом. Когда монолитное приложение становится большим и сложным, возникают трудности с его масштабированием и непрерывным развертыванием, а обновление становится неудобным.
Монолитное приложение создается как единое и неделимое целое, тогда как в микросервисной архитектуре его разбивают на множество независимых модулей, каждый из которых вносит свой вклад в общее дело. Приложение создают как набор независимо развертываемых сервисов, которые являются децентрализованными и разрабатываются независимо друг от друга.
Распределенная архитектура
Микросервисная архитектура относится к распределенным системам. Согласно определению, распределенная система — это набор компьютерных программ, которые используют вычислительные ресурсы нескольких отдельных вычислительных узлов для достижения общей цели. Распределенные системы помогают повысить надежность и производительность и упрощают масштабирование системы.
Узлы в распределенной системе обеспечивают резервирование, поскольку при отказе любого узла его заменят другими. Каждый узел можно масштабировать по горизонтали и вертикали, чтобы повысить производительность. В случае большой нагрузки на систему можно добавить дополнительные узлы, которые помогут с ней справиться.
Сравнение Kubernetes и Docker
Docker — это коммерческая платформа контейнеризации и среда выполнения, с помощью которой разработчики могут создавать, развертывать и запускать контейнеры. Хотя Docker эффективно упаковывает и распределяет контейнерные приложения, запускать контейнеры и управлять ими в нужном масштабе, используя только Docker, — непростая задача.
Kubernetes — это популярная платформа с открытым исходным кодом для оркестрации контейнерных систем среды выполнения в кластере сетевых ресурсов. Ее можно использовать с платформой Docker или отдельно. Docker — это контейнерная среда выполнения, а Kubernetes — платформа для запуска контейнеров и управления ими в нескольких контейнерных средах выполнения.
Управление конфигурацией
Управление конфигурацией программного обеспечения — это процесс организации, отслеживания, мониторинга изменений в конфигурационных метаданных программных систем, а также управления такими изменениями. Этот процесс обычно используется совместно с системами контроля версий и инфраструктурой CI/CD.
Управление конфигурацией помогает техническим командам создавать стабильные и надежные системы с помощью инструментов, которые автоматически управляют обновлениями конфигурационных данных и отслеживают их. Это также позволяет лучше управлять разрастанием программного обеспечения в архитектуре микросервисов, поскольку в центре конфигурации появляется достоверный источник информации.
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы узнать о разработке ПО и получать последние новости о Compass