Какво отличава традиционните компании от такива като Amazon, Netflix и Etsy? Тези компании усъвършенстваха изкуството на разработка на приложения за облачна среда, за да поддържат конкурентното си предимство и да се задържат много пред конкуренцията. Това практическо ръководство показва на Java/JVM разработчиците как по-бързо да изграждат по-добър софтуер, използвайки Spring Boot, Spring Cloud и Cloud Foundry.
Много организации вече се захванаха с изчисления в облака, ориентирана към тестването разработка, микросървиси и непрекъсната интеграция и разгръщане. Авторите Джош Лонг и Кени Бастани изцяло ви потапят в средствата и методологиите, които ще ви помогнат да трансформирате съществуващите си приложения в приложения, напълно интегрирани в облака.
В четири части тази книга обяснява:
• Основите: каква е мотивацията за мислене в термините на облака; как да конфигурирате и тествате Spring Boot приложение; как да прехвърлите съществуващите си приложения в облака;
• Микросървиси: как да изградите HTTP и RESTful услуги със Spring; как да маршрутизирате заявки в разпределената ви система; как да изградите гранични услуги по-близо до данните;
• Интеграция на данните: как да управлявате данните си със Spring Data и как да интегрирате разпределени услуги с поддържката, която Spring предоставя за ориентирани към събития, концентрирани около съобщения архитектури;
• Експлоатация: как да направите системата си наблюдаема; как да използвате брокери на услуги, за да свържете запазващи състоянието услуги; каква е голямата идея зад непрекъснатото разгръщане.
„Ако изграждате облачни приложения, това е вашето най-важно ръководство за Java екосистемата. В него е покрито всичко – изграждането на гъвкави услуги, управлението на потока от данни (посредством REST и асинхронни събития), тестването, разгръщането и критичната задача за наблюдаемостта.“
— Даниел Брайънт, Софтуерен разработчик и технически директор в SpectoLabs
„Предричам, че всички, които участват в това приключение в облачните технологии, независимо дали едва започват, или почти са стигнали до целта, ще спечелят от разбирането и прилагането на изчистеното проникновение и познаниe в Java в облака.“
— д-р Дейв Сиер, сътрудник на Spring Framework и съосновател и сътрудник на Spring Boot и Spring Cloud
Съдържание
Предговор от Джеймс Уотърс…8
Предговор от Род Джонсън…10
Въведение…13
Благодарности…18
Част I. Основи
Глава 1. Приложения в облака…21
Историята на Amazon…21
Обещанието на платформата…23
Шаблоните…26
Мащабируемост…27
Надеждност…28
Гъвкавост…28
Историята на Netflix…29
Микросървиси…32
Разделяне на монолита…34
Netflix OSS…35
Java в облака…36
Дванадесетте фактора…36
Кодова база…38
Зависимости…39
Конфигурация…39
Поддържащи услуги…40
Изграждане, разпространение, изпълнение…40
Процеси…41
Обвързване на портовете…41
Паралелност…41
Наличност…42
Функционална съвместимост между развой и експлоатация…42
Log файлове…43
Процеси за администриране…43
Обобщение…43
Глава 2. Bootcamp: въведение в Spring Boot и Cloud Foundry…44
Какво представлява Spring Boot?…44
Запознаване със Spring Initializr…44
Въведение в Spring Tool Suite…53
Инсталиране на Spring Tool Suite (STS)…54
Създаване на нов проект със Spring Initializr…55
Ръководствата на Spring…59
Следване на ръководствата в STS…62
Конфигурация…63
Cloud Foundry…78
Обобщение…92
Глава 3. Конфигурация в стила на дванадесетфакторните приложения …93
Объркващото смесване на понятието „конфигурация“…93
Поддръжка в Spring Framework…94
Класът PropertyPlaceholderConfigurer…94
Абстракцията Environment и анотацията @Value…95
Профили…98
Конфигурация в Boot стил…100
Централизирана, проследима конфигурация със Spring Cloud Configuration Server…103
Конфигурационният сървър Spring Cloud Config …103
Spring Cloud Config клиенти…105
Защита…107
Опресняване на конфигурацията…107
Обобщение…111
Глава 4. Тестване…112
Подготовка на тестове…113
Тестване в Spring Boot…113
Интеграционно тестване…116
Парчета за тестове…116
Имитиране в тестовете…117
Работа с контейнера за сървлети в @SpringBootTest…122
Парчета…123
Цялостно тестване …131
Тестване на разпределени системи…132
Тестване чрез ориентиран към консуматора контракт…135
Spring Cloud Contract…136
Обобщение…144
Глава 5. Пренесеното в облака приложение…146
Контрактът…146
Мигриране на средите на приложенията…147
Готови пакети за изграждане…147
Адаптирани пакети за изграждане…148
Контейнеризирани приложения…150
Фино рефакториране, за да се пренесе приложението в облака…151
Обръщение към поддържащи услуги…152
Постигане на паритет на услугите със Spring…154
Обобщение…167
Част II. Уеб сървиси
Глава 6. REST интерфейси…168
Модел за зрелост на Леонард Ричардсън…169
Обикновени REST API със Spring MVC…170
Съгласуване на съдържанието…173
Четене и запис на двоични данни…174
Google Protocol Buffers…177
Обработка на грешки…183
Хипермедия…185
Тип на медията и схема…192
Версионност на интерфейса…192
Документиране на REST API…196
Клиентската страна …201
REST клиенти за директно наблюдение и взаимодействие…202
RestTemplate…204
Обобщение…211
Глава 7. Маршрутизация…212
Абстракцията DiscoveryClient…214
Маршрутизиращи услуги на Cloud Foundry…224
Обобщение…230
Глава 8. Гранични услуги…231
Услугата Greetings Service…232
Една проста гранична услуга…234
Netflix Feign…236
Филтриране и проксиране с Netflix Zuul…239
Адаптиран Zuul филтър…250
Гарантиране на сигурност в граничната зона…254
OAuth…256
Приложения за слоя на услугите…257
HTML5 и JavaScript Single-Page приложения…258
Приложения без потребители…258
Доверени клиенти…259
Spring Security…259
Spring Cloud Security…265
Сървър за авторизацията Spring Security OAuth…265
Защитаване на Greetings Resource Server…271
Изграждане на защитено с OAuth Single-Page приложение…278
Обобщение…286
Част III. Интеграция на данните
Глава 9. Управление на данните…287
Моделиране на данните…287
Релационни системи за управление на бази данни (RDBMS)…289
NoSQL…290
Spring Data…290
Структура на Spring Data приложение…291
Домейн – клас…291
Хранилища…291
Организиране на Java пакети за данните от домейна…292
Поддържани хранилища…294
Достъп до данни от RDBMS с JDBC…295
Поддръжка за JDBC в Spring…296
Примери за Spring Data…299
Spring Data JPA…302
Услугата Account Service…302
Използване на профили за различни източници на данни…302
Интеграционни тестове…310
Spring Data MongoDB…312
Услугата Order Service…312
Интеграционни тестове…318
Spring Data Neo4j…320
Услугата Inventory Service…321
Интеграционни тестове…331
Spring Data Redis…334
Кеширане…334
Обобщение…339
Глава 10. Обмен на съобщения…340
Ориентирани към събития архитектури със Spring Integration…341
Точки за достъп за обмен на съобщения…343
Изграждане на сложна система от прости компоненти…344
Брокери на съобщения, мостове, шаблон на съревноваващи се получатели и пресъздаване на събития…352
Дестинация от тип публикуване-абониране…352
Дестинация от тип от-точка-до-точка …353
Spring Cloud Stream…354
Stream създател на съобщения…355
Stream получател на съобщения …360
Обобщение…362
Глава 11. Пакетни процеси и задачи…363
Пакетни натоварвания…363
Spring Batch…364
Първата ни пакетна обработка…365
Планиране изпълнението на задания…375
Отдалечено разпределяне на Spring Batch задание чрез обмен на съобщения…376
Управление на задачи…385
Съсредоточена около процесa интеграция с Workflow…387
Разпределение с обмен на съобщения…402
Обобщение…402
Глава 12. Интеграция на данните…403
Разпределени транзакции…404
Изолиране на провали и елегантно разпадане …404
Сага шаблон…410
CQRS (Сегрeгация на отговорностите на команди и запитвания)…411
Услугата за подаване на жалби (Complaints API)…414
Услугата за статистика за жалби (Complaint Statistics API)…426
Spring Cloud Data Flow…428
Потоци…430
Задачи…434
REST API…435
Запознайте се с Data Flow клиентите…435
Обобщение…450
Част IV. Експлоатация
Глава 13. Наблюдаемата система…451
Вие го създавате, вие го изпълнявате…453
Мистериозни убийства с микросървиси…454
Дванадесетфакторна екплоатация…455
Новият контракт…456
Наблюдаемост…458
Наблюдаемост и анализ при push и pull подход…458
Прихващане на текущия статус на приложението със Spring Boot Actuator…459
Метрики…461
Консолидиран поглед върху метриките…471
Измерения на метричните данни…472
Предоставяне на метрики от Spring Boot приложение…473
Идентифициране на услугите чрез точката за достъп /info…475
Проверка на състоянието…477
Журналиращи събития…480
Журналиране нa приложението…484
Извеждане на логовете …485
Указване на ниво на журналиране…486
Разпределено проследяване…491
Намиране на следи със Spring Cloud Sleuth…492
Колко данни са достатъчни?…493
OpenZipkin: Една снимка е по-ценна от хиляди следи…494
Проследяване на други платформи и технологии…501
Панели…501
Наблюдение на даунстрийм услуги с Hystrix Dashboard…502
Проектът Spring Boot Admin на Codecentric …506
Панелът Microservices Dashboard на Ordina…509
Приложението AppsManager на Pivotal Cloud Foundry…511
Възстановяване …512
Обобщение…515
Глава 14. Брокери на услуги…517
Животът на поддържащата услуга…518
Изгледът откъм платформата…521
Имплементиране на брокер на услуги с проекта Spring Cloud Cloud Foundry Service Broker…522
Прост брокер на услуги Amazon S3…523
Каталогът на услугите…524
Управление на инстанции на услуги…525
Обвързвания на услуги…532
Защита на брокера на услуги…536
Разгръщане…537
Разпространение с BOSH …537
Разпространение с Cloud Foundry…538
Регистриране на брокера на услуги Amazon S3…540
Създаване на инстанции на услугата Amazon S3…541
Използване на инстанции на услуги…542
S3 клиентско приложение…544
Да видим как работи всичко това…547
Обобщение…548
Глава 15. Непрекъсната доставка …549
Отвъд непрекъснатата интеграция…549
Джон Оллспоу, работил за Flickr и Etsy…551
Адриан Кокфорт, работил за Netflix…552
Непрекъснатата доставка в Amazon…553
Конвейерът…554
Тестване…556
Непрекъсната доставка за микросървиси…557
Инструменти…558
Concourse…558
Контейнери…559
Непрекъснато доставяне на микросървиси…559
Инсталиране на Concourse…560
Основна структура на конвейер…561
Тестване чрез ориентиран към консуматора контракт…574
Конвейер за микросървиса user…575
Данни…578
Към експлоатация!…579
Приложение. Използване на Spring Boot с Java EE…580
Съвместимост и стабилност…580
Инжектиране на зависимости с JSR 330 (и JSR 250)…582
Използване на Servlet API в Spring Boot приложение…584
Изграждане на REST API с JAX-RS (Jersey)…591
JTA и управление на XA транзакции…593
Разгръщане в Java EE среда…604
Обобщение…606