Предварительное изучение отношений
Изображение выше взято с официального сайта 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