SA: Webservices and Architecture 2
SOA (Service-Oriented Architecture)
Это подход к построению программных систем, при котором функциональные компоненты разрабатываются в виде отдельных сервисов, которые взаимодействуют между собой по стандартным протоколам.
Простыми словами, SOA позволяет создать систему из модулей-сервисов, каждый из которых решает отдельную задачу и может быть использован другими сервисами.
Повторное использование: сервисы можно использовать в разных приложениях.
Гибкость: легко добавлять новые сервисы или обновлять существующие.
Интеграция: сервисы могут общаться через общие протоколы, независимо от используемых технологий.
Слабая связность: компоненты связаны минимально, что упрощает управление и модификацию.
Например, если у вас есть сервис по обработке платежей, его можно использовать как в интернет-магазине, так и в мобильном приложении.
Разница между SOA и микросервисами
Между SOA (Service-Oriented Architecture) и микросервисной архитектурой действительно есть сходство, так как обе архитектуры предполагают разделение приложений на независимые компоненты-сервисы. Однако между ними есть важные различия:
- Размер и сложность сервисов:
- В SOA сервисы, как правило, крупнее и могут предоставлять широкий спектр функций. Часто они объединяют в себе несколько бизнес-функций.
- Микросервисы, напротив, более узкоспециализированы и обычно выполняют одну конкретную задачу. В итоге количество микросервисов в системе, как правило, больше.
- Управление данными:
- В SOA может быть общая база данных, к которой имеют доступ все сервисы.
- В микросервисах каждый сервис обычно управляет своими данными, что увеличивает автономность и изолирует сервисы друг от друга.
- Технологический стек:
- В SOA сервисы чаще всего используют общую платформу или технологический стек для обеспечения интеграции.
- В микросервисах каждый сервис может быть написан на разных языках программирования и использовать различные технологии, обеспечивая большую технологическую гибкость.
- Шина данных (ESB):
- В SOA часто используется Enterprise Service Bus (ESB) для передачи сообщений между сервисами, что делает ESB важным связующим компонентом системы.
- Микросервисы обычно взаимодействуют напрямую или через простые протоколы вроде HTTP/REST, часто используя легковесные брокеры сообщений (например, Kafka).
- Развертывание:
Основное различие между этими подходами заключается в том, что микросервисная архитектура построена по принципу «как можно меньше совместно используемых элементов», а SOA, наоборот, использует принцип «как можно больше совместно используемых элементов», в котором основной акцент сделан на абстрагировании и повторном использовании бизнес-логики.
- Переиспользование у SOA
- Одна база данных у SOA
- 90% случаев - интеграция через шину
- Взаимодействие между сервисами сводится к обмену данными, используя брокер сообщений. Именно к обмену данными, а не вызову методов из других сервисов как в SOA
В отличие от SOA каждый сервис обладает всеми необходимыми для функционирования частями – имеет свою собственную базу данных и существует как независимый процесс.
Такая архитектура делает каждый сервис физически разделенным, самодостаточным, что ведет с технической точки зрения к архитектуре без разделения ресурсов.
Допустим, у нас есть банковская система, состоящая из нескольких сервисов, таких как "Сервис Управления Аккаунтами", "Сервис Кредитования" и "Сервис Платежей".
Сценарий: Обработка Запроса на Кредит
- Клиент Отправляет Запрос на Кредит:
- Сервис Кредитования Получает Запрос:
- Вызов Метода Сервиса Управления Аккаунтами:
- "Сервис Кредитования" делает вызов метода в "Сервис Управления Аккаунтами" для получения информации о кредитной истории и балансе клиента. Это может быть реализовано, например, через веб-сервисный вызов SOAP.
- Сервис Управления Аккаунтами Отвечает:
- "Сервис Управления Аккаунтами" обрабатывает запрос, извлекает необходимую информацию из базы данных и отправляет ответ обратно в "Сервис Кредитования".
- Принятие Решения о Кредите:
- "Сервис Кредитования" анализирует полученные данные и, возможно, обращается к другим сервисам (например, к "Сервису Анализа Рисков") перед принятием решения о выдаче кредита.
- Уведомление Клиента:
В этом примере ключевым моментом является взаимодействие между "Сервисом Кредитования" и "Сервисом Управления Аккаунтами" через вызов метода. Сервисы взаимодействуют друг с другом через определенные интерфейсы, что является характерной чертой архитектуры SOA.
Отличие шины от брокера
Давайте разберем различия между корпоративной шиной (Enterprise Service Bus, ESB), используемой в архитектуре SOA, и брокером сообщений, применяемом в микросервисной архитектуре (MSA):
Корпоративная Шина (ESB) в SOA:
- Роль: ESB действует как централизованный посредник для управления коммуникацией и интеграцией между различными сервисами в архитектуре SOA.
- Функциональность: ESB обычно обладает более широкой функциональностью, включая маршрутизацию сообщений, преобразование форматов данных, оркестрацию процессов, обеспечение безопасности и другие возможности по управлению сервисами.
- Сложность: В ESB может быть встроена значительная бизнес-логика, что делает ее более мощной, но также может привести к увеличению сложности и созданию бутылочного горлышка, поскольку все взаимодействия проходят через эту централизованную точку.
Брокер Сообщений в MSA:
- Роль: Брокер сообщений служит легковесным посредником для обмена данными между микросервисами.
- Функциональность: Главная задача брокера сообщений - эффективно пересылать сообщения между сервисами, не добавляя дополнительной бизнес-логики. Он может поддерживать такие функции, как очереди сообщений, публикация/подписка и гарантированная доставка сообщений.
- Простота и Распределенность: В MSA брокер сообщений обычно используется для облегчения распределенного обмена сообщениями без централизации всей логики. Это помогает избежать создания бутылочного горлышка и повышает надежность системы.
Отличия:
- Централизация против Распределенности: ESB склонна к централизации и может стать узким местом, в то время как брокер сообщений в MSA распределяет нагрузку и не становится точкой концентрации всей логики и трафика.
- Сложность: ESB обычно сложнее и многофункциональнее, в то время как брокеры сообщений предназначены быть более легковесными и ограниченными в функциях.
- Логика Обработки: ESB может включать в себя сложную логику обработки и оркестрации, тогда как брокер сообщений преимущественно занимается только пересылкой сообщений.
Выбор между ESB и брокером сообщений зависит от требований к архитектуре системы, необходимости централизации управления и предпочтений в отношении распределенности и независимости сервисов.
Монолит vs Микросервисы
Что такое Монолит: Монолитная архитектура — это подход к разработке программного обеспечения, при котором приложение строится как единый, неделимый блок. Все компоненты приложения, включая пользовательский интерфейс, бизнес-логику, и базу данных, тесно интегрированы и работают в рамках единого процесса.
- Простота разработки и развертывания, поскольку всё приложение управляется как единое целое.
- Облегченное тестирование, так как все компоненты тесно связаны и работают в одной среде.
- Сложность масштабирования, особенно для больших приложений.
- Трудности в внесении изменений и обновлениях из-за тесной связанности компонентов.
Микросервисная Архитектура
Что такое Микросервисы: Микросервисная архитектура — это подход, при котором приложение разбивается на множество маленьких, независимых сервисов. Каждый микросервис выполняет конкретную функцию и общается с другими сервисами через легковесные механизмы, такие как API.
- Гибкость и скорость разработки, так как команды могут работать независимо над разными сервисами.
- Легкость масштабирования и обновления отдельных компонентов без влияния на всё приложение.
- Высокая отказоустойчивость, поскольку сбой в одном сервисе не обязательно влечет за собой сбой всего приложения.
- Сложность управления, так как требуется координировать работу множества сервисов.
- Вызовы в обеспечении согласованности и интеграции данных между сервисами.
Когда Лучше Использовать
- Небольших проектов или стартапов, где важна скорость запуска и простота развертывания.
- Приложений с ограниченным объемом функциональности, где масштабирование не является критическим фактором.
- Больших, сложных приложений, где требуется гибкость разработки и масштабирования.
- Проектов, требующих высокой отказоустойчивости и независимости компонентов.
- Организаций, готовых инвестировать в управление сложной инфраструктурой и командную координацию.
Выбор между монолитной и микросервисной архитектурой зависит от многих факторов, включая размер и сложность проекта, требования к масштабируемости и отказоустойчивости, а также ресурсы и опыт команды разработчиков.