В обзоре собраны краткие описания каждого компонента экосистемы, чтобы дать понимание – как выглядит мир Spring, и ориентиры – что из этого стоит изучить глубже и применять в проекте.

Первая часть обзора доступна по ссылке – «Обзор Spring-компонентов. Часть 1 – Spring Boot и фреймворк интеграции».

Вступление

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

Но возникает проблема, – потребитель сервисов не умеет работать с множеством экземпляров. Для связи прикладных сервисов в целостное приложение, необходимы инфраструктурные сервисы.

Подсистема Spring Cloud состоит из:

  1. Зависимостей, адаптирующих Spring Boot приложения к облачной среде.

  2. Инфраструктурных сервисов, в виде готовых Spring-приложений, переносимых​ между облачными платформами​.

  3. Клиентов сетей Service Mesh, реализующих инфраструктурные сервисы.

  4. Клиентов облачных платформ, реализующих инфраструктурные и коммерческие сервисы.

  5. Микро-фреймворков для разработки микросервисов и их оркестровки.

Термины

Чтобы ориентироваться в тексте, важно понимать отличие нового термина «инфраструктурные сервисы» от «облачных платформ» и «прикладных сервисов».

Прикладные сервисы - реализуют бизнес-логику распределенного приложения.

Инфраструктурные сервисы – координируют взаимодействие экземпляров прикладных сервисов.

Подробнее:

Основные функции:

  • Маршрутизация – распределение запросов между типами сервисов;

  • Балансировка – распределение запросов между экземплярами сервисов;

  • Проброс пользовательской аутентификации из шлюза в сервисы;

  • Защита межсервисных запросов от взлома и повреждения техническими сбоями;

  • Механизмы отказоустойчивости;

  • Реализация манифеста 12-факторных приложений.

Облачные платформы – распределяют по физическим серверам docker-контейнеры или поды (pod).

Подробнее:

Основные функции:

  • Деплой на физические серверы комплекса контейнеров, реализующих микросервисные приложения.

  • Контроль и поддержка работоспособности контейнеров, путем удаления неработоспособного контейнера и создания нового экземпляра.

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

Опционально:

  • Инфраструктурные сервисы;

  • Коммерческие сервисы.
    (встроенные MQ-брокеры, базы данных, сервисы отправки SMS и т.п.)

Под (pod) – минимальный юнит развертывания в Kubernetes, содержит произвольное количество docker-контейнеров.


Список компонентов и ссылки на главы обзора

Для общего видения, ниже представлено распределение проектов Spring по типам. Некоторые проекты Spring Cloud-раздела не содержат в названии Cloud, но осмысленные варианты использования их в монолитных системах не были найдены.

Компоненты из первой части обзора – «Spring Boot и фреймворк интеграции»

Компоненты Spring Boot приложений

1.1 Уровень интеграции компонентов
Spring Boot
Spring Framework – Core
1.2 Уровень бизнес-логики
Spring Framework – Testing
Spring Framework – Languages
Spring Shell
Spring Statemachine
Spring Batch
Spring Security
Spring Security
Spring Security Kerberos
Spring Authorization Server

2. Уровень обмена данными с хранилищами
Spring Framework – Data Access
Spring LDAP
Spring Data
Spring Data Commons
Поддержка SQL БД
Spring Data JPA
Spring Data Envers
Spring Data REST
Spring Data JDBC
Spring Data R2DBC
Spring Data for Apache Solr (устарел)
Spring Data JDBC Extensions (устарел)

Поддержка NoSQL БД
Spring Data MongoDB
Spring Data Elasticsearch
Spring Data Redis
Spring Data Neo4j
Spring Data for Apache Cassandra
Spring Data Couchbase
Spring Data LDAP
Поддержка Grid-хранилищ
Spring Data for Apache Geode
Spring Data for VMware Tanzu GemFire
Интеграция с BigData
Spring for Apache Hadoop (устарел)

3. Уровень сетевого обмена данными
Spring Framework – Web MVC (Web Servlet)
Spring Framework – WebFlux (Web Reactive)
Spring Framework – Integration
Spring Web Flow
Spring HATEOAS
Spring for GraphQL
Spring Web Services
Spring REST Docs
MQ (Message Queue)
Spring AMQP
Spring for Apache Kafka

4. Фреймворк корпоративной интеграции

Spring Integration

Компоненты Spring Cloud приложений

5. Адаптация Spring Boot приложений к облачной среде
Spring Cloud
Spring Cloud Commons
Spring Cloud OpenFeign
Spring Cloud Circuit Breaker
Spring Cloud Security
Spring Cloud Schema Registry
Spring Cloud Sleuth
Spring Cloud Contract
Spring Cloud Cluster
Spring Session
Spring Session Core
Session-репозитории
Spring Session Data Redis
Spring Session MongoDB
Spring Session JDBC
Spring Session Hazelcast
Spring Session for Apache Geode

6. Инфраструктурные сервисы, переносимые​ между облачными платформами
Сервис с ролью Gateway

Spring Cloud Gateway
Сервисы с ролью Config Server
Spring Cloud Config
Spring Cloud Vault
Spring Cloud Bus
Сервисы с ролью Service Discovery
Spring Cloud Netflix (Eureka)
Spring Cloud Zookeeper
Интеграция с Service Mesh
Spring Cloud Consul

7. Инфраструктурные сервисы, интегрированные​ в облачные платформы​ (клиенты подключения)
Spring Cloud Alibaba
Spring Cloud Kubernetes
Spring Cloud for Amazon Web Services
Spring Cloud Azure (Microsoft)
Spring Cloud GCP (Google)
Spring Cloud for Cloud Foundry
Spring CredHub
Spring Vault
Spring Cloud Connectors
Администрирование приложений в облачных платформах
Spring Cloud CLI
Spring Cloud Skipper
Spring Cloud Pipelines (устарел)
Сервисы администрирования
с ролью Open Service Broker

Spring Cloud App Broker
Spring Cloud Open Service Broker
Spring Cloud – Foundry Service Broker (устарел)

8. Микро-фреймворки для разработки микросервисов
Spring Cloud Function
Spring Cloud Stream
Spring Cloud Stream Applications
Spring Cloud Task
Spring Cloud Task App Starters
Оркестровка конвейеров из Stream и Task сервисов
Spring Cloud Data Flow
Spring Flo


Компоненты Spring Cloud приложений

Адаптация Spring Boot приложений к облачной среде

Специфика облачной среды – приложения запускаются во множестве дублирующих экземпляров для отказоустойчивости и масштабирования производительности.

Адаптация приложений выполняется встраиванием maven зависимостей, реализующих клиентский LoadBalancer, паттерн «предохранитель» (Circuit Breaker), аутентификацию клиентов и межсервисных запросов в распределенной системе и пр.

1. Spring Cloud

Это раздел вступительной документации, не описывающий какой-либо конкретный компонент.

Из полезной информации, он содержит описание 850 properties настроек Cloud компонентов. Логически, эти настройки дополняют документацию к следующему компоненту «Spring Cloud Commons».

2. Spring Cloud Commons

Транзитивная зависимость, не требующая явной загрузки. Расширяет Spring Boot, содержит две библиотеки:

2.1. Spring Cloud Context – клиент для загрузки properties файлов с Config Server и загрузки в DI-контейнер бинов, специфичных для Spring Cloud компонентов. Поддерживает шифрование, при передаче properties файлов.

2.2. Spring Cloud Commons (Commons в Commons, да) – для настройки абстракций Service Discovery, Circuit Breaker, LoadBalancer и ServiceRegistry независимо от имплементации.

LoadBalancer – абстракция «клиентского» балансировщика запросов.
Ribbon – его базовая имплементация.

Клиентский балансировщик используется, когда ваш прикладной сервис обращается к другим сервисам напрямую, в обход Gateway. Логика работы – запрашивает в Service Discovery ip-адреса подходящих запросу экземпляров сервисов и обеспечивает «веерную» рассылку запросов – каждый следующий запрос передается на следующий в списке ip и далее по кругу.

LoadBalancer задокументирован только в «Spring Cloud Commons».
Документация для Ribbon, возможно по ошибке, удалена из содержания портала, но еще гуглится.

3. Spring Cloud OpenFeign

Декларативный REST клиент – позволяет одной-двумя аннотациями организовать отправку HTTP запросов. Добавляется в прикладные сервисы как maven зависимость.

Используется для взаимодействия с инфраструктурными и прикладными микросервисами. Поддерживает интеграцию с Service Discovery, Circuit Breaker и LoadBalancer.

Недостаток: может принимать только текстовые данные, но не двоичные, – загружать файлы не получится.

4. Spring Cloud Circuit Breaker

Компонент для повышения отказоустойчивости сервисов, путем временного прерывания отправки запросов. Добавляется в прикладные сервисы как maven зависимость.

При перегрузке вызываемого сервиса, когда запросы завершаются ошибкой «превышен таймаут ожидания ответа», Circuit Breaker временно прерывает повторную отправку исходящих запросов, чтобы вызываемый сервис мог восстановить работоспособность. Также экономятся ресурсы отправляющего запросы сервиса.

Является универсальным API для имплементаций: Netfix Hystrix, Alibaba Sentinel, Spring Retry, Resilience4J.

5. Spring Cloud Security

Расширение Spring Security, реализует:

  • Единый вход OAuth2, с ретрансляцией токенов (проброс токенов извне, через Gateway).

  • Защиту ресурсов токенами OAuth2.

6. Spring Cloud Schema Registry

Компонент для форматно-логического контроля сообщений Kafka на уровне библиотеки сериализации Apache Avro.

Подробнее о сериализации в Kafka

При работе с Kafka, из приложения-отправителя передаются java классы, и приложение-потребитель получает те же java классы. Сам Kafka хранит только массивы байтов. Поэтому, при передаче классов, используется сериализация – извлечение из классов полезных данных и преобразование в массив байтов. А при получении классов из Kafka, обратный процесс – десериализация.

Apache Avro – популярная библиотека сериализации для Kafka, с поддержкой схем форматно-логического контроля. Может на этапе сериализации валидировать сообщения на соответствие схеме – проверять имена атрибутов, типы, структуру вложенности, наличие обязательных атрибутов и прочие параметры.

7. Spring Cloud Sleuth

Реализует трассировку и логирование запросов для анализа проблем в распределенной системе.

8. Spring Cloud Contract

Зонтичный проект для реализации подхода Consumer Driven Contracts. Пока содержит один подпроект:

  • Spring Cloud Contract Verifier – поддержка разработки потребительских контрактов (CDC) для приложений на основе JVM.

9. Spring Cloud Cluster

Компонент для встраивания в распределенную систему кластерных функций: выбор лидера, хранение состояния кластера, глобальные блокировки, одноразовые токены.

Spring Session

10. Spring Session Core

Компонент для межсервисного обмена данными об аутентификации и другими атрибутами HTTP сессии. Поддерживает несколько сессий в одном браузере и отправку сессий в заголовке.

Репозитории Session

Надстройки к «Spring Session Core» для хранения атрибутов сессий в БД.

11. Spring Session Data Redis

Стандартный и реактивный репозитории сессий для Redis.

12. Spring Session MongoDB

Репозиторий сессий для MongoDB.

13. Spring Session JDBC

Репозиторий сессий для JDBC.

14. Spring Session Hazelcast

Репозиторий сессий для Hazelcast.
Hazelcast – In-Memory Data Grid, облегченный за счет вынесения функционала распределенных вычислений в отдельный модуль Hazelcast Jet.

15. Spring Session for Apache Geode

Репозиторий сессий для Apache Geode.
Apache Geode – полнофункциональный In-Memory Data Grid.
Отличия Grid от БД описаны в первой части обзора.

Инфраструктурные сервисы, переносимые​ между облачными платформами​

Сервис с ролью Gateway

16. Spring Cloud Gateway

Сервис для маршрутизации входящих запросов между микросервисами и балансировки между экземплярами микросервисов.
Заменяет устаревший Zuul и, в отличии от Zuul, поддерживает реактивность и WebSockets.

Сервисы с ролью Config Server

Сервисы с ролью Config Server (сервер конфигураций) являются внешним хранилищем настроек всех сервисов приложения для реализации третьего принципа 12-факторных приложений. Настройки хранятся в виде текстовых properties файлов, которые рассылаются сервисам по запросу.

17. Spring Cloud Config

Сервер конфигураций по умолчанию.

18. Spring Cloud Vault

Обертка над Spring Vault для использования коммерческого хранилища секретов HashiCorp в роли сервера конфигураций.

18. Spring Cloud Bus

Механизм доставки конфигураций через брокеры Kafka или AMQP.
Позволяет организовать централизованное хранение конфигураций в GitHub и других источниках.

Сервисы с ролью Service Discovery

Бывают ситуации, когда некоторые контейнеры не работают. На это может быть несколько причин:

  1. На хост-сервере занята память и Linux, в рамках штатного поведения, удалил один из процессов для ее высвобождения;

  2. Сервисы облачной платформы, в рамках штатного поведения, удалили неработоспособный или устаревший сервис и еще не запустили новый экземпляр.

Service Discovery отслеживает доступность сервисов, их ip-адреса, роли и предоставляет эту информацию другим компонентам распределенного приложения.

20. Spring Cloud Netflix (Eureka)

Сервис с ролью Service Discovery. Унаследован от Netflix и рекомендован по умолчанию.

21. Spring Cloud Zookeeper

Клиент интеграции для Zookeeper.

Zookeeper это Service Discovery по умолчанию для Apache Kafka. Если в проекте используется Kafka с Zookeeper, отдельный Service Discovery не требуется, достаточно подключиться к уже используемому.

Интеграция с Service Mesh

Service Mesh – комплекс инфраструктурных сервисов, реализованный как самостоятельное ПО, не привязанное ни к облачным платформам, ни к фреймворкам разработки.

22. Spring Cloud Consul

Клиент для использования Config Server и Service Discovery, встроенных в Consul.
Consul – одна из реализаций концепции Service Mesh.

Примечание: в главах 24.9 и 24.10 отражены клиенты интеграции с Istilo, – еще одной реализаций концепции Service Mesh.


Инфраструктурные сервисы, интегрированные​ в облачные платформы​ (клиенты подключения)

23. Spring Cloud Alibaba

В проект включены два типа компонентов:

  • Инфраструктурные сервисы от Alibaba, переносимые​ между облачными платформами.

  • Клиенты для коммерческих сервисов в облаке Alibaba.

Подробнее:

Инфраструктурные сервисы:

23.1. Nacos Config – сервис с ролью Config Server;

23.2. Nacos Discovery – сервис с ролью Service Discovery;

23.3. Sentinel – сервис с ролью Circuit Breaker;

23.4. Dubbo – RPC фреймворк для взаимодействия сервисов по протоколам: Dubbo, RMI, Hessian, HTTP, Web Service, Thrift, Memcached, Redis.
Поддерживает: четыре стратегии балансировки нагрузки и пять стратегий отказоустойчивости.

23.5. RocketMQ Binder – клиент интеграции с RocketMQ.

Клиенты для коммерческих сервисов в облаке Alibaba:

23.6. Cloud ANS (Application Naming Service) – Service Discovery;

23.7. Cloud ACM (Application Configuration Management) – Config Server;

23.8. Cloud OSS (Object Storage Service) – хранилище данных;

23.9. Cloud SchedulerX – планировщик заданий;

23.10. Cloud SMS – отправка и прием SMS.

24. Spring Cloud Kubernetes

Клиенты подключения Spring приложений к инфраструктурным сервисам, интегрированным в Kubernetes. Не являются обязательными для развертывания приложения Spring Boot в Kubernetes.

Подробнее:

Роль LoadBalancer:

24.1 LoadBalancer for Kubernetes – клиент для использования Load Balancer встроенного в Kubernetes.

Роль Config Server:

24.2 Kubernetes PropertySource – реализация роли Config Server на основе ConfigMap и PropertySource.
24.3 Spring Cloud Kubernetes Config Server – расширение инфраструктурного сервиса «Spring Cloud Config» с поддержкой хранения конфигурации в Kubernetes Config Maps и Secrets.
24.4 Spring Cloud Kubernetes Configuration Watcher – компонент для обновления настроек сервисов без их перезапуска.

Роль Service Discovery:

24.5 DiscoveryClient for Kubernetes – клиент для использования Service Discovery встроенного в Kubernetes.
24.6 Spring Cloud Kubernetes Discovery Server – инфраструктурный сервис с ролью Service Discovery и поддержкой поиска сервисов в кластере Kubernetes.

Интеграция с Spring Boot Actuator:

24.7 Pod Health Indicator – передает информацию о работоспособности сервисов в Spring Boot Actuator.
24.8 Info Contributor – передает информацию о подах в Spring Boot Actuator.

Интеграция с Istilo:

Istilo – одна из реализаций концепции Service Mesh.

24.9 Kubernetes native service discovery – клиент для передачи данных в Istilo из Service Discovery, встроенного в Kubernetes.
24.10 Kubernetes Ecosystem Awareness – передает информацию о кластере в Istilo.

Прочее:

24.11 Leader Election – API выбора лидера Spring Integration с использованием Kubernetes ConfigMap.
24.12 Service Account – зависимости для доступа к кластеру на основе ролей.

25. Spring Cloud for Amazon Web Services

Клиенты подключения Spring приложений к инфраструктурным сервисам в AWS.

Подробнее:

25.1 Spring Cloud AWS Core – клиент для базовой настройки безопасности и конфигурации через «Amazon EC2» и «AWS CloudFormation».

25.2 Spring Cloud AWS Context – клиент для сервисов:

  • Amazon S3 (Simple Storage Service) – загрузка ресурсов через абстракцию загрузчика ресурсов Spring.

  • Amazon Simple Email Service – отправка почты через абстракцию почты Spring.

  • Amazon ElastiCache – декларативное кэширование через абстракцию кэширования Spring.

25.3 Spring Cloud AWS JDBC – клиент для автоматического поиска и настройка источника данных в «Amazon RDS» (Relational Database Service).

25.4 Spring Cloud AWS Messaging – клиент для обмена сообщениями через:

  • Amazon SQS (Simple Queue Service) – точка-точка,

  • Amazon SNS (Simple Notification Service) – издатель-подписчик.

25.5 Spring Cloud AWS Parameter Store Configuration – клиент для использования в роли Config Server, сервиса «Amazon SMPS» (Systems Manager Parameter Store).

25.6 Spring Cloud AWS Secrets Manager Configuration – клиент для использования в роли Config Server, сервиса «Amazon Secrets Manager».

26. Spring Cloud Azure

Клиенты подключения приложений Spring к инфраструктурным сервисам в Microsoft Azure.

Клиентов много, они представлены в виде maven зависимостей и не выделены в именованные компоненты. Maven зависимости могут иметь несколько вариантов использования. Документация к «Spring Cloud Azure» достаточно качественная, чтобы изучать возможности проекта непосредственно по ней, как минимум по составу глав документации.

Прим. Одной из причин появления этого материала была предельно некачественная документация по большинству компонентов Spring.

Кроме того, в облачной платформе Microsoft Azure есть сервис «Azure Spring Apps», именуемый в Spring-документации «Azure Spring Cloud». Сервис создан и поддерживается командой проекта «Spring Cloud Azure» и рекомендован к использованию по умолчанию.

27. Spring Cloud GCP

Клиенты подключения приложений Spring к инфраструктурным сервисам в Google Cloud Platform.

Клиентов много, они представлены в виде maven зависимостей и не выделены в именованные компоненты. Maven зависимости могут иметь несколько вариантов использования. Документация к «Spring Cloud GCP» достаточно качественная, чтобы изучать возможности проекта непосредственно по ней, как минимум по составу глав документации.

28. Spring Cloud for Cloud Foundry

Реализует три maven зависимости:

  1. Клиент службы единого входа (SSO – Single Sign On) для привязки учетных данных Cloud Foundry к функциям Spring Boot.

  2. Клиент для использования Service Discovery, встроенного в Cloud Foundry.

  3. 13 properties настроек, специфичных для Cloud Foundry.

29. Spring CredHub

Клиент интеграции с CredHub.
CredHub – сервер учетных данных в Cloud Foundry.

30. Spring Vault

Клиент интеграции с HashiCorp Vault.
HashiCorp Vault – защищенный сервер для хранения конфиденциальной информации. Компонент также интегрирован в «Spring Cloud Vault», в роли Config Server с шифрованием.

31. Spring Cloud Connectors (развитие планируется в рамках другого проекта)

Компонент для автоматического подключения к службам в облаке. Поддерживает облака: Cloud Foundry и Heroku. Для других облачных платформ, имеет 7 community-версий.

Проект в статусе поддержки без развития, – планируются обновления безопасности, но не функционала. Развитие функционала планируется в рамках нового проекта Java CFEnv.

Администрирование приложений в облачных платформах

32. Spring Cloud CLI

Приложение командной строки под Linux, Mac и Windows для развертывания, запуска и автонастройки микросервисов скриптами YAML, Groovy и командами CLI.

33. Spring Cloud Skipper

Компонент для обнаружения Spring приложений в облачных платформах, их обновления и отката между разными версиями без необходимости повторно собирать приложения из исходного кода. Может использоваться в CI/CD как версионный «единый источник достоверной информации». 

Разрабатывался для «Spring Cloud Data Flow», но может использоваться для других Cloud приложений. Поддерживает платформы: Local, Cloud Foundry и Kubernetes.

34. Spring Cloud Pipelines (устарел)

Клиент интеграции с CI/CD системами Jenkins и Concourse.
Устарел, не рекомендован к использованию.

Сервисы администрирования с ролью Open Service Broker

Open Service Broker – сервис с REST API с ограниченной функциональностью по администрированию микросервисов в облачной платформе.

Реализует:
1. Регистрацию сервисов в каталоге облачной платформы.
2. Создание и удаление экземпляров сервиса в облачной платформе.
3. Привязку вашего клиентского приложения к сервисам в облаке и отвязку его.

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

  • Администратор со стороны клиента может скриптами «динамически собирать» приложения из множества сервисов, генерируя набор HTTP запросов. Функции администрирования выполняются за секунды.

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

35. Spring Cloud App Broker

Готовый сервис, реализующий API Open Service Broker.
Поддержка облачных платформ пока ограничена Cloud Foundry.

36. Spring Cloud Open Service Broker 

Набор зависимостей для разработки сервиса, реализующего API Open Service Broker (OSB). Требует ручного программирования логики OSB (пример). Позволяет расширить функциональность брокера, если у вас частное облако. Поддерживает все облачные платформы, реализующие клиент для OSB: Cloud Foundry, Kubernetes и OpenShift и т.п.

37. Spring Cloud – Cloud Foundry Service Broker (устарел)

Набор зависимостей для разработки сервиса, реализующего API Open Service Broker (OSB).
Устарел, дальнейшее развитие перенесено в описанный выше проект «Spring Cloud Open Service Broker».


Микро-фреймворки для разработки микросервисов

38. Spring Cloud Function

Микрофреймворк для разработки переносимых между облаками сервисов, с автогенерацией REST (опционально RSocket) интерфейсов.

Позволяет сосредоточиться на бизнес-логике. Для этого реализован механизм автоматического оборачивания REST-интерфейсами бинов, реализующих функциональные интерфейсы Supplier, Function или Consumer. Для этого, бины должны быть созданы одним из двух способов:

  1. @Component класс метода реализует функциональный интерфейс Supplier, Function или Consumer;

  2. Ответ @Bean метода оборачивается в тип функционального интерфейса Supplier, Function или Consumer.

Поддерживает реактивный, императивный и комбинированный стили программирования. Может запускать сервисы – «Spring Cloud Stream».

Поддерживает платформы: Local, AWS Lambda, Microsoft Azure, Google Cloud Functions, Apache OpenWhisk.

39. Spring Cloud Stream

Микрофреймворк для разработки переносимых между облаками сервисов, с автогенерацией MQ-интерфейсов (Kafka или AMQP). Допускает встраивание в конвейеры средствами компонента «Spring Cloud Data Flow».

Позволяет сосредоточиться на бизнес-логике. Для этого реализован механизм автоматического оборачивания MQ-интерфейсами бинов, реализующих функциональные интерфейсы Supplier, Function или Consumer.

Stream сервисы могут быть трех типов:

  1. Source – получает данные из внешних ресурсов и передает в MQ-канал.

  2. Processor – получает данные из «входного» MQ-канала, обрабатывает их и передает в «выходной» MQ-канал.

  3. Sink – получает данные из MQ-канала и передает во внешние ресурсы.

Конвейеры данных – представляют множество Stream сервисов, выстроенных в цепочку и связанные MQ-интерфейсами для пошагового преобразования данных. Конвейер может иметь один Source-сервис, произвольное количество Processor-сервисов и один Sink-сервис.

Может вызываться из сервисов – Spring Cloud Function.
Может запускать сервисы – Spring Cloud Task.

Поддерживает MQ брокеры для взаимодействия в рамках конвейера: RabbitMQ, Apache Kafka, Kafka Streams, RocketMQ, Amazon Kinesis, AWS SQS, AWS SNS, Azure Event Hubs, Azure Service Bus, Google PubSub, Solace PubSub+.

40. Spring Cloud Stream Applications

Коллекция из 57 готовых сервисов Spring Cloud Stream (список), с поддержкой около 30 протоколов взаимодействия с внешними ресурсами.

Кроме базовой функциональности, проект содержит сервисы обработки видео:

  • Image Recognition – нейронная сеть для анализа графических изображений;

  • Semantic Segmentation – сегментирует графические изображения по модели DeepLab Tensorflow;

  • Object Detection – идентифицирует объекты на графических изображениях.

41. Spring Cloud Task

Микрофреймворк для разработки переносимых между облаками краткосрочных сервисов.

Жизненный цикл сервиса состоит из старта, выполнения задачи и завершения работы. Сервис сам опрашивает источник данных (БД, CSV, XML и т.п.) и сохраняет результат в этот или другой источник.
Поддерживает Spring Batch для выполнения пакета однотипных задач.
Поддерживает источники данных: File, JDBC, Kafka, AMQP.

Может запускаться:

  • из сервисов «Spring Cloud Stream»,

  • на сервере администрирования «Spring Cloud Data Flow».

Поддерживает платформы: Local, Spring Cloud Data Flow (разворачивает сервисы в Cloud Foundry и Kubernetes), Cloud Foundry.

42. Spring Cloud Task App Starters

Коллекция из двух готовых сервисов Spring Cloud Task:

  • Timestamp Task – печатает метку времени в stdout. Предназначен в первую очередь для тестирования.

  • Timestamp Batch Task – выполняет 2 Task, каждое печатает имя задания и метку времени в stdout. Предназначен в первую очередь для тестирования.

Оркестровка конвейеров из Stream и Task сервисов

43. Spring Cloud Data Flow

Инструментарий для развертывания конвейеров данных из сервисов Spring Cloud Stream и Spring Cloud Task, на платформах Cloud Foundry, Kubernetes или локально (пример).

Поддерживает проектирование и развертывание конвейеров тремя способами:

  • В графическом интерфейсе. Графический интерфейс также поддерживает мониторинг с использованием Wavefront, Prometheus, Influx DB или других систем.

  • DSL командами,

  • Через REST API.

Графический интерфейс:

«Spring Cloud Data Flow» и «Spring Cloud Skipper» проектировались для совместного использования:

44. Spring Flo

Графический интерфейс, встроенный в «Spring Cloud Data Flow», для создания и мониторинга конвейеров данных.


Заключение

Это была заключительная часть обзора. Рассмотрены 85 проектов, включающие 156 компонентов. Поправки и уточнения приветствуются.



Владимир Мальзам
Должности нет, в поиске.
Хабр Карьера

Комментарии (3)


  1. karambaso
    09.07.2022 13:16

    Рассмотрены 85 проектов, включающие 156 компонентов.

    И подавляющее большинство - для интеграции. То есть нет там никакого спринга, а есть привязка одного внешнего компонента к другому внешнему. Но через спринг.

    Так для чего же спринг в облаках? Для хранения настроек. Которые, разумеется, нужно получать через несколько очень важных прослоек:

    Spring Cloud Config, Spring Cloud Vault, Spring Cloud Bus

    Хотя сам по себе обзор честный, кратко и по делу освещает внутренности, про которые ещё надо суметь найти какую-то вменяемую информацию в интернете.

    Мода уводит людей от здравого смысла. Долгие десятки секунда в ожидании ответа и многие гигабайты памяти - вот цена.


    1. v_malzam Автор
      09.07.2022 13:46
      +1

      Так для чего же спринг в облаках? Для хранения настроек. Которые, разумеется, нужно получать через несколько очень важных прослоек: Spring Cloud Config, Spring Cloud Vault, Spring Cloud Bus

      Spring Cloud Config - самодостаточный спринговый проект.

      Spring Cloud Vault, Spring Cloud Bus - альтернативы "на все случаи жизни". Их задача - дать выбор и снять трудозатраты.

      То есть нет там никакого спринга, а есть привязка одного внешнего компонента к другому внешнему. Но через спринг.

      Политика разработчиков JDK / Java EE - "Мы пишем спецификации, другие пишут имплементации". Как с JPA и Hibernate.
      С точки зрения "что они делают сами", получается еще меньше.

      Политика разработчиков Spring - "Мы делаем удобные обертки для привычных инструментов. Они ускоряют и упрощают разработку."

      Потребители определили - оба подхода имеют право на жизнь.

      "Spring-потрошитель" Евгений Борисов рассказывал, - однажды на спор разработал микросервис за 1 минуту 20 секунд.

      Мода уводит людей от здравого смысла. Долгие десятки секунда в ожидании ответа и многие гигабайты памяти - вот цена.

      Здравый смысл определяется экономикой - наукой о человеческой деятельности.

      Часто, купить сервер, который закроет проблему на 5-10 лет стоит столько же, сколько фонд оплаты труда команды разработчиков за 1 месяц. А их оптимизации за 10 лет еще много раз "сломают".


    1. v_malzam Автор
      09.07.2022 14:24

      То есть нет там никакого спринга, а есть привязка одного внешнего компонента к другому внешнему.

      Заметил пробел в описании и дополнил. В список "Подсистема Spring Cloud состоит из" добавил пункт:

      2. Maven-зависимостей, встраиваемых в приложения и реализующих: клиентский LoadBalancer, паттерн "предохранитель" (Circuit Breaker), аутентификацию клиентов и межсервисных запросов, форматно-логический контроль сообщений, трассировку и логирование запросов в распределенной системе.