Связь между Spring, Spring Boot и Spring Cloud

Spring

Предварительное изучение отношений

Изображение выше взято с официального сайта Spring. Как видите, Spring на самом деле представляет собой экосистему, включающую в себя множество подпроектов, таких как Spring Framework, Spring Boot, Spring Cloud (а также Spring Data, Spring Security, Spring Batch, Spring Session, Spring AMQP и т. д.). Пожалуйста, перейдите по ссылке:spring.io/projects

По сути, Spring в широком смысле — это экосистема и набор множества технологий. Мы часто говорим, что Spring — это только Spring в узком смысле, который на самом деле относится к Spring Framework. Ниже мы дадим подробное введение в Spring (Spring Framework), Spring Boot и Spring Cloud.

представлять

Spring Framework

Spring Framework является краеугольным камнем всей экосистемы Spring и имеет два очень важных ядра проектирования: IOC (инверсия управления) и AOP (аспектно-ориентированное программирование), которые составляют основу Spring.

характеристика

Двумя основными функциями Spring Framework являются предоставление контейнера IOC для управления нашими объектами и предоставление АОП-аспектно-ориентированного программирования для сокращения повторяющегося кода. Кроме того, предусмотрены такие функции, как хранение данных, разработка модуля Wbe, управление ресурсами, проверка и привязка данных, преобразование типов и интернационализация.

преимущество

  • Разделяйте код для упрощения разработки. Через контейнер IOC, предоставляемый Spring Framework, пользователи могут передавать зависимости между объектами Spring Framework, чтобы избежать чрезмерной связанности программ, вызванной жестким программированием.
  • Поддержка программирования АОП. Аспектно-ориентированное программирование облегчается с помощью функции АОП, предоставляемой Spring Framework.
  • Декларативная поддержка транзакций. В Spring Framework можно избежать недостатков жесткого кодирования программных транзакций, а управление транзакциями можно гибко выполнять декларативным образом для повышения эффективности и качества разработки.
  • Уменьшите сложность использования Java EE API.

недостаток

  • Порог для использования высок, и для начала работы со Spring требуется много времени.
  • Совместимость с устаревшими технологиями, что усложняет использование.
  • Конфигураций слишком много, а конфигурация XML больше не является популярным методом настройки системы.
  • При интеграции сторонних инструментов программистам также необходимо учитывать совместимость между инструментами.
  • Система запускается медленно, не имеет функции горячего развертывания и полностью полагается на горячее развертывание виртуальных машин или веб-серверов.

Spring Boot

Spring Boot — это совершенно новое решение для автоматической настройки. Используя SpringBoot, вы можете быстро создавать автономные приложения производственного уровня на основе Spring, не уделяя слишком много внимания настройке XML.

характеристика

Spring Boot в полной мере использует режим конфигурации JavaConfig и концепцию дизайна «Конвенция важнее конфигурации» (COC). Он предоставляет множество модулей зависимостей автоматической настройки spring-boot-starter для различных сценариев разработки корпоративных приложений, которые мы можем использовать из коробки. (Официальный стартер называется spring-boot-starter-xxx, а неофициальный стартер — xxx-spring-boot-starter).

Расширенное введение: соглашение по конфигурации (COC, Convension Over Configuration), также известное как программирование по соглашению, представляет собой парадигму разработки программного обеспечения, направленную на сокращение количества решений, которые должны принимать разработчики, и получение преимуществ простоты без потери гибкости.

преимущество

  • Интегрируйте основные фреймворки без настройки и автоматически интегрируйте сторонние фреймворки.
  • Проекты Spring можно запускать независимо, а Spring Boot можно запускать независимо в виде пакетов jar. Используйте команду java -jar или выполните основную функцию в основной функции проекта, чтобы успешно запустить проект.
  • Встроенный сервер для быстрого развертывания. Интегрированные контейнеры Tomcat (по умолчанию), Jetty и Undertow.
  • Предоставляет множество подключаемых модулей, которые мы можем использовать из коробки, мы можем быстро создать проект Spring и запустить проект JavaEE с очень небольшой настройкой.
  • Чистая конфигурация Java, не требуется генерация кода и настройка XML. И обеспечивает серию нефункциональной общей конфигурации.
  • Сокращение времени разработки и повышение производительности.

Достоинств слишком много, здесь перечислены только некоторые из них, и все это знают.

недостаток

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

SpringCloud

Spring Cloud представляет собой упорядоченный набор из серии фреймворков.Он использует удобство разработки Spring Boot для тонкого упрощения разработки распределенной системной инфраструктуры и предоставляет набор инструментов для разработки, обеспечивающий регистрацию обнаружения служб, центр конфигурации, интеллектуальную маршрутизацию, обмен сообщениями. как шина, автоматический выключатель, балансировка нагрузки и мониторинг данных.

характеристика

Основные элементы микросервисов Реализация стека технологий Spring Cloud
Регистрация и обнаружение службы Spring Cloud Netflix Eureka, Spring Cloud Alibaba Nacos, Spring Cloud Consul, Spring Cloud Zookeeper
Настройка службы и управление Spring Cloud Config, Spring Cloud Alibaba Nacos
сервисный предохранитель Spring Cloud Netflix Hystrix, Spring Cloud Alibaba Sentinel, Spring Cloud Circuit Breaker Resilience4J
Вызов сервисного интерфейса (упрощенный инструмент для вызова сервисов клиентами) Spring Cloud OpenFeign
Балансировка клиентской нагрузки Spring Cloud Netflix Ribbon
Маршрутизация услуг (шлюз API) Spring Cloud Netflix Zuul, Spring Cloud Gateway
полное отслеживание ссылок Spring Cloud Sleuth
шина сообщений о событиях Spring Cloud Bus
Распределенная транзакция Spring Cloud Alibaba Seata
управляемое сообщением Spring Cloud Stream

Для получения подробной информации перейдите по ссылке:spring.IO/проекты/билеты…

Регистрация и обнаружение службы

Сравнение выбора регистрационного центра

Nacos Eureka Consul Zookeeper Etcd SOFARegistry
язык Java Java Go Java Go Java
Официальный сайт nacos.io GitHub.com/Netflix/Евро… www.consul.io zookeeper.apache.org coreos.com/etcd Ууууу. Так что пришлите стек. Специальности/проекты/так…
Github GitHub.com/alibaba/вывезти… GitHub.com/Netflix/Евро… GitHub.com/Hashi Corp/От… GitHub.com/Apache/zooke… GitHub.com/etc-io/etc… GitHub.com/Alibaba/диван…
CAP CP+AP AP CP CP CP AP
Проверка работоспособности службы CP+AP AP CP CP CP AP
служба хранения кв N/A N/A служба поддержки служба поддержки служба поддержки N/A
Использование интерфейса (многоязычность) gRPC / Dubbo / REST клиент / HTTP Поддержка HTTP и DNS клиент HTTP / gRPC Клиент (Ява)
Смотреть поддержку Поддерживает длинный опрос/большинство приращений Поддерживает длинный опрос/большинство приращений Полный/поддержка длинного опроса служба поддержки Поддержка длительного опроса Поддержка (пуш сервера)
Интеграция с Spring Cloud служба поддержки служба поддержки служба поддержки служба поддержки служба поддержки служба поддержки
Интеграция с даббо служба поддержки не поддерживается не поддерживается служба поддержки служба поддержки служба поддержки

шлюз

Сравнение выбора шлюза

Kong Spring Cloud Zuul (на основе Zuul 1.x) Spring Cloud Gateway
представлять Плагин Nginx(OpenResty) + Lua, высокая производительность Java + Servlet + Groovy (горячее обновление) Java + Spring 5.0 + Reactor без блокировки
Официальный сайт konghq.com GitHub.com/Netflix/ в UU… spring.IO/проекты/билеты…
Github github.com/Kong/kong GitHub.com/Netflix/ в UU… GitHub.com/spring - уродливо...
разработчик Компания Kong(Mashape) Netflix Pivotal
Главная цель Управление корпоративным API Шлюз микросервисов Шлюз микросервисов
Простота разработки Язык сценариев Lua, более сложный Java + сервлет, просто Реактор асинхронный, более сложный
Это с открытым исходным кодом Версия с открытым исходным кодом/корпоративная версия Открытый исходный код Открытый исходный код
вспомогательное соглашение RESTful API RESTful API RESTful API
Регистрация API/динамическая маршрутизация Управляется через Admin API динамическая маршрутизация динамическая маршрутизация
Ограничение служба поддержки нужно развивать служба поддержки
предохранитель служба поддержки Требуются дополнительные компоненты служба поддержки
Повторить попытку служба поддержки служба поддержки служба поддержки
медицинское обследование служба поддержки служба поддержки служба поддержки
алгоритм балансировки нагрузки опрос, хэш Круговой алгоритм, случайный выбор, взвешенный круговой алгоритм, пользовательский Круговой алгоритм, случайный выбор, взвешенный круговой алгоритм, пользовательский
разрешение Встроено несколько способов Разработка и внедрение Разработка и внедрение
Tracing служба поддержки Требуются дополнительные компоненты Требуются дополнительные компоненты
Поддержка Yaml служба поддержки служба поддержки служба поддержки

Настройка службы и управление

Сравнение выбора центра конфигурации

Nacos Apollo Spring Cloud Config
язык Java Java Java
Официальный сайт nacos.io GitHub.com/C trip Corp/Ах… spring.IO/проекты/билеты…
Github GitHub.com/alibaba/вывезти… GitHub.com/C trip Corp/Ах… GitHub.com/spring - уродливо...
Настройка push-уведомлений в реальном времени Поддержка (длинный опрос HTTP в течение 1 с) Поддержка (длинный опрос HTTP в течение 1 с) Поддержка (весенний облачный автобус)
Управление версиями служба поддержки служба поддержки Поддержка (Гит)
Откат конфигурации служба поддержки служба поддержки Поддержка (Гит)
выпуск оттенков серого не поддерживается служба поддержки служба поддержки
управление полномочиями не поддерживается служба поддержки Поддержка (зависит от Git)
Мультикластер служба поддержки служба поддержки служба поддержки
несколько сред служба поддержки служба поддержки служба поддержки
запрос на прослушивание служба поддержки служба поддержки служба поддержки
многоязычный Основной язык, предоставляет Open API Основной язык, предоставляет Open API Поддерживает только Java
проверка формата конфигурации служба поддержки не поддерживается не поддерживается

сервисный предохранитель

Сравнение выбора автоматического выключателя

Sentinel Hystrix Resilience4j
язык Java Java Java
Официальный сайт sentinelguard.io/zh-cn/ GitHub.com/Netflix/h и выше… N/A
Github GitHub.com/alibaba/s ru… GitHub.com/Netflix/h и выше… GitHub.com/resilience4…
Главная цель Изоляция семафора (ограничение количества одновременных потоков) Изоляция пула потоков/изоляция семафора Изоляция семафора
стратегия понижения рейтинга автоматических выключателей На основе времени отклика, коэффициента исключений, количества исключений на основе коэффициентов аномалий На основе коэффициента исключений, времени отклика
Реализация статистики в реальном времени Скользящее окно (LeapArray) Скользящее окно (на основе RxJava) Ring Bit Buffer
Динамическая конфигурация правил Поддерживает несколько источников данных Поддерживает несколько источников данных Ограниченная поддержка
Расширяемость несколько точек расширения форма плагина форма интерфейса
Поддержка на основе аннотаций служба поддержки служба поддержки служба поддержки
Ограничение На основе количества запросов в секунду, поддержка текущего ограничения на основе отношения вызовов ограниченная поддержка Rate Limiter
формирование трафика Поддерживает режим предварительного нагрева, режим постоянной скорости и режим очереди предварительного нагрева (настраивается в правиле трафика) не поддерживается Простой режим ограничения скорости
Система адаптивной защиты служба поддержки не поддерживается не поддерживается
приставка Предоставляет готовую консоль для настройки правил, просмотра мониторинга второго уровня, обнаружения машин и т. д. Простой мониторинг и просмотр Консоль не предусмотрена, но может быть подключена к другим системам мониторинга

полное отслеживание ссылок

Сравнение выбора отслеживания ссылок

CAT Zipkin Pinpoint Skywalking
язык Java Java Java Java
Официальный сайт konghq.com zipkin.io/ GitHub.com/thatver/pinpo… skywalking.apache.org/zh/
Github GitHub.com/comments/rubbing… GitHub.com/open zip kin/… GitHub.com/thatver/pinpo… GitHub.com/Apache/Просто спросите…
Метод реализации Скрытые точки кода (перехватчики, аннотации, фильтры и т. д.) Перехватывать запросы, отправлять (HTTP, MQ) данные в сервис Zipkin Зонды Java, улучшения байт-кода Зонды Java, улучшения байт-кода
варианты хранения MySQL, HDFS In-Memory, Mysql, Cassandra, Elasticsearch HBase + Mysql Эластичный поиск, H2, Mysql, TiDB
способ общения Передача данных NIO на базе Netty HTTP, МК Thrift gRPC
Вторжение больше меньше Технология проверки байт-кода, без вторжения кода Технология проверки байт-кода, без вторжения кода
MQ-мониторинг не поддерживается не поддерживается не поддерживается Поддержка (RocketMQ, Кафка)
Глобальная статистика звонков служба поддержки служба поддержки не поддерживается служба поддержки
Запрос трассировки не поддерживается служба поддержки не поддерживается служба поддержки
Вызовите полицию служба поддержки не поддерживается служба поддержки служба поддержки
JVM-мониторинг не поддерживается не поддерживается служба поддержки служба поддержки
преимущество Полностью работоспособный. Spring-Cloud-Sleuth может очень хорошо интегрировать Zipkin, код ненавязчивый, интеграция очень простая, а сообщество более активное. Полностью неинвазивный, нужно только изменить метод запуска, интерфейс идеален, а функции дотошны. Полностью ненавязчивый, с идеальным интерфейсом, он поддерживает карту топологии приложений и запрос одной цепочки вызовов. Функция относительно полная (Zipkin + Pinpoint)
недостаток 1. Код навязчивый и его нужно похоронить.
2. Документация запутанная, соответствие между документацией и релизной версией низкое, и вам нужно полагаться на приватный сервер комментария (или вам нужно вручную скачать jar на его приватный сервер, а потом залить на наш приватный сервер).
1. По умолчанию запросы Http используются для передачи информации в Zipkin, что снижает производительность.
2. Объединение со Sleuth можно сделать асинхронно с помощью RabbitMQ, что увеличивает сложность и требует внедрения RabbitMQ.
3. Анализ данных относительно прост.
1. Он не поддерживает запросы к одной цепочке вызовов и внешне выражает экологию вызовов всего приложения.
2. Вторичное развитие сложнее
1. До версии 3.2 было много багов, и совместимость онлайн отражения была плохой.В новой версии 3.2 меньше отражений
2. Зависит больше.
Документация В интернете информации меньше, только документы на официальном сайте беспорядочные Полная документация Полная документация Полная документация

преимущество

  • Spring Cloud предоставляет полный набор функциональных компонентов микросервиса, многие из которых в основном «из коробки», и компоненты хорошо совместимы, что упрощает разработку.
  • Компоненты, интегрированные в Spring Cloud, в основном легкие, и все они являются лидерами в своих областях.
  • Все компоненты разделены, и разработчики могут гибко выбирать соответствие различным компонентам.
  • На основе разработки Spring Boot соглашение лучше, чем конфигурация, основанная на аннотациях, и нет файла конфигурации.

недостаток

  • По сравнению с другими платформами RPC, Spring Cloud не ограничивает протокол связи между службами. Некоторые основные клиенты, такие как RestTemple и Feign, напрямую поддерживают использование ленты для обнаружения регистрации службы и интеллектуальной маршрутизации. производительность некоторых сервисных вызовов по сравнению с фреймворками RPC, такими как Dubbo.
  • С точки зрения разработки микросервисов слишком много микросервисов и высокие затраты на управление не способствуют поддержанию системы. Высокая стоимость разработки распределенной системы (отказоустойчивость, распределенные транзакции и т. д.) является большой проблемой для команды.

Повторное исследование отношений

Реализация автоматической конфигурации Spring Boot фактически управляется модулем @Enable Spring Framework.

Реализация фреймворка аннотация активировать модуль
Spring Framework @EnableTransactionManagement Модуль управления транзакциями
@EnableWebMvc Веб-модуль MVC
@EnableAspectJAutoProxy Модуль AspectJ
@EnableCaching кеш-модуль
@EnableEnableScheduling Модуль временных задач
@EnableAsync Модуль асинхронной обработки
@EnableMBeanExport JMX-модуль
Spring Boot @EnableAutoConfiguration Модули автоматической сборки
@EnableConfigurationProperties Настройте модуль привязки свойств
@EnableOAuth2Sso Модуль единого входа OAuth2
@EnableManagementContext Исполнительный модуль
Spring Cloud @EnableDiscoveryClient модуль обнаружения служб
@EnableFeignCliens Фейковый клиентский модуль
@EnableCircuitBreaker Сервисный модуль предохранителей
@EnableEurekaServer серверный модуль Эврика
@EnableEurekaClient Клиентский модуль Эврика

В приведенной выше таблице представлены некоторые модули аннотации @Enable Spring Framework, Spring Boot и Spring Cloud, а также многие другие, на которые вы можете ссылаться самостоятельно.На самом деле, мы также можем использовать модуль аннотации @Enable для реализации пользовательского Starter, так что наши собственные проекты также могут быть автоматически изменены.

Суммировать

  • Spring Framework является краеугольным камнем экосистемы Spring, и все остальные модули Spring неотделимы от него.
  • Spring Boot — это новое решение для автоматической настройки, управляемое модулем аннотации @Enable Spring Framework. Его внешний вид устраняет трудности, связанные с началом работы со Spring Framework, скрывает многие основные детали и использует JavaConfig для решения многих проблем с конфигурацией XML.
  • Sring Cloud — это набор инструментов разработки микросервисов на основе Spring Boot, который упрощает разработку распределенных проектов за счет использования функций автоматической настройки Spring Boot.

Spring -> Spring Boot -> Spring Cloud