Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 663035)
Контекстум

Микросервисы Spring в действии (6000,00 руб.)

0   0
Первый авторКарнелл Джон
АвторыСанчес Иллари Уайлупо
ИздательствоМ.: ДМК Пресс
Страниц490
ID810360
АннотацияВ книге рассказывается о том, как создавать приложения на основе микросервисов с использованием Java и Spring. Описываются особенности управления конфигурацией микросервисов и передовые практики их разработки. Уделено внимание защите потребителей, когда один или несколько экземпляров микросервисов выходят из строя. Начав с создания простых служб, читатель постепенно перейдет к знакомству с приемами эффективного журналирования и мониторинга, научится реструктурировать приложения на Java с помощью инструментов Spring, освоит управление API с помощью Spring Cloud Gateway.
Кому рекомендованоДля разработчиков на Java, имеющим опыт создания распределенных приложений и использования Spring, а также всем, кому интересно узнать, что необходимо для развертывания приложения на основе микросервисов в облаке.
ISBN978-5-97060-971-2
УДК004.432
ББК32.972.1
Карнелл, Д. . Микросервисы Spring в действии / И. . Санчес; Д. . Карнелл .— Москва : ДМК Пресс, 2022 .— 490 с. : ил. — ISBN 978-5-97060-971-2 .— URL: https://rucont.ru/efd/810360 (дата обращения: 11.12.2024)

Предпросмотр (выдержки из произведения)

Микросервисы_Spring_в_действии.pdf
Стр.5
Стр.8
Стр.9
Стр.10
Стр.11
Стр.12
Стр.13
Стр.14
Стр.15
Стр.16
Микросервисы_Spring_в_действии.pdf
УДК 004.432 ББК 32.972.1 К21 Джон Карнелл, Иллари Уайлупо Санчес К21 Микросервисы Spring в действии / пер. с англ. А. Н. Киселева. – М.: ДМК Пресс, 2022. – 490 с.: ил. ISBN 978-5-97060-971-2 В книге рассказывается о том, как создавать приложения на основе микросервисов с использованием Java и Spring. Описываются особенности управления конфигурацией микросервисов и передовые практики их разработки. Уделено внимание защите потребителей, когда один или несколько экземпляров микросервисов выходят из строя. Начав с создания простых служб, читатель постепенно перейдет к знакомству с приемами эффективного журналирования и мониторинга, научится реструктурировать приложения на Java с помощью инструментов Spring, освоит управление API с помощью Spring Cloud Gateway. Издание предназначено для разработчиков на Java, имеющим опыт создания распределенных приложений и использования Spring, а также всем, кому интересно узнать, что необходимо для развертывания приложения на основе микросервисов в облаке. УДК 004.432 ББК 32.972.1 Copyright Original English language edition published by Manning Publications USA, USA. Copyright (c) 2021 by Manning Publications. Russian-language edition copyright (c) 2021 by DMK Press. All rights reserved. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. ISBN (анг.) 978-1-617-29695-6 ISBN (рус.) 978-5-97060-971-2 © 2021 by Manning Publications Co. © Оформление, издание, перевод, ДМК Пресс, 2022
Стр.5
Содержание Предисловие от издательства ............................................................... 16 Предисловие .................................................................................................. 17 Благодарности ............................................................................................. 19 Об этой книге ............................................................................................... 21 1 Добро пожаловать в Spring Cloud ............................................. 27 1.1. Эволюция архитектуры микросервисов ................................. 28 1.1.1. N-уровневая архитектура .................................................... 28 1.1.2. Что такое монолитная архитектура? ............................... 29 1.1.3. Что такое микросервис? ...................................................... 30 1.1.4. Зачем менять способ создания приложений? ....................... 32 1.2. Микросервисы со Spring ............................................................ 34 1.3. Что мы будем создавать? ............................................................ 36 1.4. О чем эта книга? .......................................................................... 37 1.4.1. Что вы узнаете в этой книге ............................................... 37 1.4.2. Почему эта книга актуальна для вас? ................................ 38 1.5. Облачные приложения и приложения на основе микросервисов ................................................................................... 39 1.5.1. Создание микросервиса с помощью Spring Boot .................... 39 1.5.2. Что такое облачные вычисления? ....................................... 44 1.5.3. В чем преимущества облачных вычислений и микросервисов? ............................................................................ 46 1.6. Микросервисы – это больше чем код ...................................... 49 1.7. Базовый шаблон разработки микросервисов ........................ 50 1.8. Шаблоны маршрутизации ......................................................... 52 1.9. Устойчивость клиентов .............................................................. 54
Стр.8
8 Содержание 1.10. Шаблоны безопасности ........................................................... 55 1.11. Шаблоны журналирования и трассировки .......................... 56 1.12. Шаблон сбора метрик приложения ....................................... 58 1.13. Шаблоны сборки/развертывания микросервисов ............ 59 Итоги ................................................................................................... 61 2 Обзор мира микросервисов через призму Spring Cloud ........ 63 2.1. Что такое Spring Cloud? ............................................................. 64 2.1.1. Spring Cloud Config ............................................................... 65 2.1.2. Spring Cloud Service Discovery ................................................ 66 2.1.3. Spring Cloud LoadBalancer и Resilience4j .............................. 66 2.1.4. Spring Cloud API Gateway ..................................................... 67 2.1.5. Spring Cloud Stream ............................................................... 67 2.1.6. Spring Cloud Sleuth ................................................................ 67 2.1.7. Spring Cloud Security ............................................................. 68 2.2. Пример использования Spring Cloud ...................................... 68 2.3. Приемы создания облачных микросервисов ......................... 71 2.3.1. База кода .............................................................................. 74 2.3.2. Зависимости ........................................................................ 75 2.3.3. Конфигурация ...................................................................... 76 2.3.4. Вспомогательные службы ..................................................... 76 2.3.5. Сборка, выпуск, выполнение ................................................. 77 2.3.6. Процессы .............................................................................. 78 2.3.7. Привязка портов ................................................................. 78 2.3.8. Масштабируемость ............................................................. 79 2.3.9. Одноразовость ...................................................................... 79 2.3.10. Сходство окружений разработки/эксплуатации ............. 80 2.3.11. Журналирование ................................................................ 80 2.3.12. Задачи администрирования ............................................. 81 2.4. Актуальность наших примеров ................................................. 81 2.5. Создание микросервиса с использованием Spring Boot и Java ..................................................................................82 2.5.1. Подготовка окружения ........................................................ 83 2.5.2. Начало создания проекта .................................................... 83 2.5.3. Запуск приложения Spring Boot: класс инициализации ...... 88 Итоги ................................................................................................... 90 3 Создание микросервисов с использованием Spring Boot ....... 91 3.1.1. Декомпозиция бизнес-задачи ............................................ 92 3.1. Точка зрения архитектора: проектирование микросервисной архитектуры ......................................................... 92
Стр.9
Содержание 9 3.1.2. Детализация служб ............................................................. 95 3.1.3. Определение интерфейсов служб .......................................... 98 3.2. Когда не следует использовать микросервисы ...................... 99 3.2.1. Сложность распределенных систем ..................................... 99 3.2.2. Беспорядочный рост виртуальных серверов или контейнеров ............................................................................. 99 3.2.3. Тип приложения................................................................. 100 3.2.4. Транзакции и согласованность данных .............................. 100 3.3. Точка зрения разработчика: создание микросервиса с использованием Spring Boot и Java ............................................. 100 3.3.1. Встраивание дверного проема в микросервис: контроллер Spring Boot ................................................................. 101 3.3.2. Добавление интернационализации в службу лицензий ..... 112 3.3.3. Реализация Spring HATEOAS для отображения связанных ссылок .......................................................................... 115 3.4. Точка зрения инженера DevOps: сборка выполняемых артефактов ........................................................................................ 118 3.4.1. Сборка службы: упаковка и развертывание микросервисов .....120 3.4.2. Инициализация службы: управление конфигурацией микросервисов ...................................................... 122 3.4.3. Регистрация и обнаружение службы: взаимодействие клиентов с микросервисами ............................... 123 3.4.4. Мониторинг состояния микросервиса ............................... 124 3.5. Объединение точек зрения ..................................................... 127 Итоги ................................................................................................. 128 4 Добро пожаловать в Docker ...................................................... 129 4.1. Контейнеры или виртуальные машины? .............................. 130 4.2. Что такое Docker? ..................................................................... 132 4.3. Файлы Dockerfile ....................................................................... 135 4.4. Docker Compose......................................................................... 136 4.5. Интеграция Docker с микросервисами ................................. 138 4.5.1. Создание образа Docker ...................................................... 138 4.5.2. Создание образов Docker со Spring Boot ............................... 144 4.5.3. Запуск служб с помощью Docker Compose ............................ 147 Итоги ................................................................................................. 148 5 Управление конфигурациями с использованием Spring Cloud Configuration Server .............................................. 150 5.1. Об управлении конфигурациями (и сложностью) .............. 151 5.1.1. Архитектура управления конфигурацией ......................... 152
Стр.10
10 Содержание 5.1.2. Варианты реализации....................................................... 154 5.2. Настройка Spring Cloud Configuration Server ...................... 156 5.2.1. Настройка класса инициализации Spring Cloud Config ... 161 5.2.2. Использование Spring Cloud Config Server с файловой системой .................................................................... 161 5.2.3. Создание конфигурационных файлов для службы ............. 163 5.3. Интеграция Spring Cloud Config с клиентом Spring Boot ..... 168 5.3.1. Настройка зависимостей Spring Cloud Config Service в службе лицензий ......................................................................... 170 5.3.2. Настройка службы лицензий для взаимодействий с Spring Cloud Config ..................................................................... 170 5.3.3. Подключение к источнику данных с использованием Spring Cloud Config Server ............................................................. 175 5.3.4. Чтение настроек с использованием @ConfigurationProperties ............................................................... 179 5.3.5. Обновление настроек с использованием Spring Cloud Config Server ............................................................. 180 5.3.6. Использование Spring Cloud Configuration Server с Git ....... 182 5.3.7. Интеграция Vault со службой Spring Cloud Config ............. 183 5.3.8. Пользовательский интерфейс Vault ................................... 184 5.4. Защита конфиденциальных настроек в конфигурации ..... 187 5.4.1. Настройка симметричного шифрования .......................... 187 5.4.2. Шифрование и дешифрование настроек ............................ 188 5.5. Заключительные мысли ........................................................... 190 Итоги ................................................................................................. 190 6 Обнаружение служб ..................................................................... 191 6.1. Где моя служба? .......................................................................... 193 6.2. Обнаружение служб в облаке .................................................. 195 6.2.1. Архитектура механизма обнаружения служб ................... 196 6.2.2. Обнаружение служб с использованием Spring и Netflix Eureka ....................................................................................200 6.3. Создание службы Spring Eureka .............................................. 202 6.4. Регистрация служб в Spring Eureka ........................................ 207 6.4.1. REST API Eureka ................................................................ 211 6.4.2. Панель управления Eureka ................................................. 212 6.5. Использование механизма обнаружения служб .................. 214 6.5.1. Поиск экземпляров служб с Spring Discovery Client ............. 216 6.5.2. Вызов служб с использованием шаблона Spring REST с поддержкой Load Balancer ......................................................... 218 6.5.3. Вызов служб с использованием Netflix Feign ........................ 220 Итоги ................................................................................................. 222
Стр.11
Содержание 11 7 Когда случаются неприятности: шаблоны устойчивости с использованием Spring Cloud и Resilience4j ........................ 223 7.1. Шаблоны устойчивости на стороне клиента ....................... 225 7.1.1. Балансировка нагрузки на стороне клиента ..................... 226 7.1.2. Размыкатель цепи ............................................................. 226 7.1.3. Резервная реализация ......................................................... 227 7.1.4. Герметичные отсеки .......................................................... 227 7.2. Почему устойчивость клиента важна .................................... 228 7.3. Реализация с Resilience4j ......................................................... 232 7.4. Подготовка службы лицензий к использованию Spring Cloud и Resilience4j .............................................................. 233 7.5. Реализация размыкателя цепи ................................................ 234 7.5.1. Добавление размыкателя цепи для обработки вызовов службы организаций ....................................................... 240 7.5.2. Настройка размыкателя цепи .......................................... 240 7.6. Использование резервной реализации ................................. 241 7.7. Реализация шаблона герметичных отсеков ......................... 244 7.8. Реализация шаблона повторных попыток ............................ 248 7.9. Реализация шаблона ограничителя частоты........................ 249 7.10. ThreadLocal и Resilience4j ..................................................... 252 Итоги ................................................................................................. 257 8 Маршрутизация служб с использованием Spring Cloud Gateway .................................................................... 259 8.1. Что такое сервисный шлюз? ................................................... 260 8.2. Введение в Spring Cloud Gateway ............................................ 263 8.2.1. Настройка проекта шлюза Spring Boot ............................. 264 8.2.2. Настройка Spring Cloud Gateway для взаимодействий с Eureka ......................................................................................... 266 8.3. Настройка маршрутов в Spring Cloud Gateway ..................... 268 8.3.1. Автоматическое отображение маршрутов с помощью механизма обнаружения служб .................................................... 268 8.3.2. Отображение маршрутов вручную с помощью механизма обнаружения служб .................................................... 270 8.3.3. Динамическая загрузка настроек маршрутизации .......... 273 8.4. Настоящая мощь Spring Cloud Gateway: фабрики предикатов и фильтров .................................................. 274 8.4.1. Встроенные фабрики предикатов ...................................... 275 8.4.2. Встроенные фабрики фильтров ......................................... 276 8.4.3. Добавление своих фильтров ............................................... 278
Стр.12
12 Содержание 8.5. Создание предварительного фильтра ................................... 281 8.6. Использование идентификатора корреляции в службах ... 284 8.6.1. UserContextFilter: перехват входящих HTTP-запросов ....... 286 8.6.2. UserContext: обеспечение доступности HTTP-заголовков в службах .......................................................... 287 8.6.3. RestTemplate и UserContextInterceptor: обеспечение передачи идентификатора корреляции нижестоящим службам ............... 289 8.7. Создание заключительного фильтра, добавляющего идентификатор корреляции .......................................................... 290 Итоги ................................................................................................. 293 9 Безопасность микросервисов ..................................................... 294 9.1. Что такое OAuth2? .................................................................... 295 9.2. Введение в Keycloak .................................................................. 297 9.3. Начнем с малого: использование Spring и Keycloak для защиты единственной конечной точки ................................ 299 9.3.1. Добавление Keycloak в Docker .............................................. 299 9.3.2. Настройка Keycloak ........................................................... 300 9.3.3. Регистрация клиентского приложения ............................. 303 9.3.4. Настройка пользователей O-stock ...................................... 308 9.3.5. Аутентификация пользователей приложения O-stock ...... 310 9.4. Защита службы организаций с использованием Keycloak .... 314 9.4.1. Добавление в службы JAR-файлов Spring Security и Keycloak ...................................................................................... 314 9.4.2. Настройка связи службы с сервером Keycloak ..................... 315 9.4.3. Определение пользователей, кому разрешено обращаться к службе .................................................................... 315 9.4.4. Передача токена доступа .................................................. 320 9.4.5. Анализ нестандартного поля в JWT .................................. 326 9.5. Некоторые заключительные рассуждения о безопасности микросервисов ..................................................... 328 9.5.1. Используйте HTTPS/Secure Sockets Layer (SSL) для взаимодействий между службами .......................................... 329 9.5.2. Используйте шлюз для организации доступа к микросервисам ........................................................................... 329 9.5.3. Разделите свои службы на общедоступные и закрытые .... 330 9.5.4. Ограничьте поверхность атаки на ваши микросервисы, заблокировав ненужные сетевые порты ....................................... 330 Итоги ................................................................................................. 331
Стр.13
Содержание 13 10 Событийно-ориентированная архитектура и Spring Cloud Stream.................................................................... 332 10.1. Обмен сообщениями, событийно-ориентированная архитектура и микросервисы ........................................................ 333 10.1.1. Передача событий об изменении состояния с использованием синхронного подхода запрос/ответ ................. 334 10.1.2. Передача событий об изменении состояния с использованием сообщений ......................................................... 337 10.1.3. Недостатки архитектуры на основе сообщений ............. 339 10.2. Введение в Spring Cloud Stream ............................................ 340 10.3. Простые издатель и получатель сообщений ...................... 342 10.3.1. Настройка Apache Kafka и Redis в Docker ...................... 343 10.3.2. Публикация сообщений в службе организаций ............... 344 10.3.3. Получение сообщений в службе лицензий ........................ 351 10.3.4. Тестирование передачи сообщений между службами ....... 355 10.4. Пример использования Spring Cloud Stream: распределенное кеширование ....................................................... 356 10.4.1. Использование Redis в роли кеша ..................................... 357 10.4.2. Определение собственных каналов ................................... 363 Итоги ................................................................................................. 366 11 Распределенная трассировка с использованием Spring Cloud Sleuth и Zipkin ........................................................ 367 11.1. Spring Cloud Sleuth и идентификатор корреляции ........... 369 11.1.1. Подключение Spring Cloud Sleuth к службам лицензий и организаций .............................................................................. 370 11.1.2. Особенности трассировки в Spring Cloud Sleuth .............. 370 11.2. Агрегирование журналов и Spring Cloud Sleuth ................ 372 11.2.1. Интеграция Spring Cloud Sleuth и стека ELK ................. 374 11.2.2. Настройка Logback в службах ......................................... 376 11.2.3. Определение и запуск приложений ELK в Docker ............. 380 11.2.4. Настройка Kibana ........................................................... 383 11.2.5. Поиск идентификаторов трассировки Spring Cloud Sleuth в Kibana ......................................................... 386 11.2.6. Добавление идентификатора корреляции в HTTP-ответ с помощью Spring Cloud Gateway .......................... 388 11.3. Распределенная трассировка с использованием Zipkin ....... 390 11.3.1. Настройка зависимостей Spring Cloud Sleuth и Zipkin .....391
Стр.14
14 Содержание 11.3.2. Настройка в службах ссылки на сервер Zipkin ................ 391 11.3.3. Настройка сервера Zipkin ................................................ 392 11.3.4. Настройка уровней трассировки ..................................... 393 11.3.5. Использование Zipkin для трассировки транзакций ...... 394 11.3.6. Визуализация более сложных транзакций ...................... 397 11.3.7. Трассировка операций обмена сообщениями .................... 398 11.3.8. Добавление дополнительных операций ............................ 400 Итоги ................................................................................................. 403 12 Развертывание микросервисов ................................................. 404 12.1. Архитектура конвейера сборки/развертывания .............. 406 12.2. Настройка базовой инфраструктуры для O-stock в облаке ......................................................................... 410 12.2.1. Создание базы данных PostgreSQL с использованием Amazon RDS ..................................................... 413 12.2.2. Создание кластера Redis в Amazon .................................. 416 12.3. После подготовки инфраструктуры: развертывание O-stock и ELK ........................................................ 418 12.3.1. Создание экземпляра EC2 с помощью ELK ...................... 418 12.3.2. Развертывание стека ELK в экземпляре EC2 .................. 422 12.3.3. Создание кластера EKS .................................................... 423 12.4. Конвейер сборки/развертывания в действии .................. 430 12.5. Создание конвейера сборки/развертывания .................... 432 12.5.1. Настройка GitHub ........................................................... 433 12.5.2. Сборка наших служб в Jenkins .......................................... 434 12.5.3. Создание сценария конвейера ........................................... 439 12.5.4. Создание сценариев для конвейера развертывания Kubernetes ............................................................ 441 12.6. Заключительные рассуждения о конвейере сборки/развертывания .................................................................. 442 Итоги ................................................................................................. 444 Приложение A ............................................................................................ 445 Модель зрелости Ричардсона ....................................................... 446 Spring HATEOAS .............................................................................. 448 Внешняя конфигурация ................................................................. 448 Непрерывная интеграция и непрерывная доставка ................. 449 Мониторинг ..................................................................................... 450 Журналирование ............................................................................. 451 API-шлюзы ........................................................................................ 451
Стр.15
Содержание 15 Приложение B ........................................................................................... 453 Тип разрешения: пароль ................................................................ 454 Тип разрешения: учетные данные клиента ................................ 455 Тип разрешения: код авторизации............................................... 456 Тип разрешения: неявный ............................................................. 459 Как обновляются токены ............................................................... 461 Приложение C ........................................................................................... 463 C.1. Введение в мониторинг с использованием Spring Boot Actuator ......................................................................... 464 C.1.1. Добавление зависимостей Spring Boot Actuator .................. 464 C.1.2. Включение конечных точек Spring Boot Actuator ............... 464 C.2. Настройка Micrometer и Prometheus .................................... 465 C.2.1. Введение в Micrometer и Prometheus ..................................... 466 C.2.2. Интеграция с Micrometer и Prometheus .............................. 467 C.3. Настройка Grafana ................................................................... 469 C.4. Итоги обсуждения .................................................................... 474 Предметный указатель .......................................................................... 475
Стр.16

Облако ключевых слов *


* - вычисляется автоматически