内容介绍
无论是传统IT行业,还是互联网行业,都正处于行业历史上最剧烈的变革中 :大量的系统正在从传统的IT架构转向基于云的架构, 开发模式也正在从开发和运维分工的传统模式,逐渐转向统一的“DevOps”模式。Java技术已经进入了新的生命周期,大量被用于构建现代的、基于云的应用程序。 本书详细阐述了开发云原生应用程序的机遇和挑战,明确指出了成功实现的方向,并且重点介绍了微服务框架Spring Boot。Spring Boot可以轻松创建任何粒度的 Spring服务,并部署到现代的容器环境中。本书主要面向正在使用 Spring Boot、SpringCloud和Cloud Foundry, 以便更快、更好地构建软件的Java/JVM 开发人员。本书一共分为4个部分共15章。第1章和第2章介绍了云原生思想产生的背景,然后介绍了Spring Foundry。第3章介绍了如何配置Spring Boot应用程序。第4章介绍了如何测试Spring应用程序,从如何测试最简单的组件到测试分布式系统。第5章介绍了可以将应用程序迁移到Cloud Foundry等云平台的轻量级重构方式。第6章介绍了如何使用Spring构建HTTP和RESTful服务。第7章介绍了在分布式系统中控制请求进出的常用方法。第8章介绍了如何构建一个响应外部请求的服务。第9章介绍了如何使用Spring Data在Spring中管理数据。这为领域驱动的思想奠定了基础。第10章介绍了如何使用Spring中事件驱动、消息中心化的能力,来集成分布式服务和数据。第11章介绍了如何利用云平台(如Cloud Foundry)的能力来处理长期运行的工作。第12章介绍了在分布式系统中管理状态的一些方法。第13章介绍了如何构建具备可观测性和可操作性的系统。第14章介绍了如何构建类似于Cloud Foundry平台的服务代理。第15章介绍了持续交付背后的思想。
作者介绍
Josh Long是一名Spring developer advocate,是InfoQ.com Java团队的编辑。他也是多部著作的主要作者,如Spring Recipes,2nd Edition(Apress)。Kenny Bastani是Pivotal的一名Spring developer advocate。作为一名开源贡献者和软件架构博主(WWW.kennybastani.com),他为软件开发者提供关于构建事件驱动的微服务和无服务器架构方面的教程。他也在一些行业会议上做演讲,如OSCON、SpringOne Platform和GOTO大会。
宋净超,曾就职于科大讯飞,在大数据平台架构、云平台的开发运维、容器平台构建方面有丰富经验,目前在TalkingData从事Kubernetes和云原生应用的研究和推广工作。《Cloud Native Go》《Pyhon云原生》译者,QCon讲师,个人博客 https://jimmysong.io。
关联推荐
程序员、软件工程师、一线高级开发人员和开发管理人员。
目录
目录
前言(James Watters)xv
前言(Rod Johnson) xvii
前言 xix
第Ⅰ部分 基础知识
第1 章 云原生应用程序 3
亚马逊的故事 3
平台的承诺 5
模式 7
可扩展性 7
可靠性 8
敏捷性 8
Netflix 的故事 9
微服务 11
拆分单体系统 12
Netflix OSS 13
云原生Java 14
十二要素原则 14
代码库 15
依赖 15
配置 16
x | 目录
后端服务 17
构建、发布、运行 17
进程 17
端口绑定 18
并发 18
易处理 18
开发/ 生产环境一致 19
日志 19
管理进程 19
总结 20
第2 章 训练营:Spring Boot 和Cloud Foundry21
什么是Spring Boot 21
Spring Initializr 入门 21
Spring Tool Suite 入门 30
安装Spring Tool Suite(STS) 30
使用Spring Initializr 创建一个新项目 31
Spring 指南大全 36
遵循STS 中的指南 38
配置 40
Cloud Foundry 平台 52
总结 66
第3 章 符合十二要素程序风格的配置 67
令人迷惑的“配置”合并 67
Spring 框架对配置的支持 67
PropertyPlaceholderConfigurer 68
Environment 接口和@Value 注解 69
Profile 71
启动配置 73
使用Spring Cloud Config Server 进行中心化、日志型的配置 76
Spring Cloud Config Server 76
Spring Cloud Config 客户端 78
安全 79
目录 | xi
可刷新的配置 79
总结 83
第4章 测试 85
测试的构成 86
在Spring Boot 中进行测试 86
集成测试 88
测试切片 89
测试中的Mock 89
使用@SpringBootTest 中的Servlet 容器 93
测试分片 94
端到端测试 102
测试分布式系统 102
消费者驱动的契约测试 104
Spring Cloud Contract 105
总结 113
第5 章 迁移遗留的应用程序 115
契约 115
迁移应用程序环境 116
开箱即用的构建包(Buildpacks) 116
自定义的构建包 117
容器化的应用程序 118
将应用程序迁移到云上的微重构 119
连接后端服务 120
用Spring 实现服务平等 121
总结 133
第Ⅱ部分 Web 服务
第6 章 REST API 137
伦纳德· 理查森的成熟模型 137
使用Spring MVC 实现简单的REST API 139
内容协商 142
xii | 目录
读写二进制数据 142
Google Protocol Buffers 145
错误处理 150
超媒体 152
媒体类型和模式 158
API 版本 159
编写REST API 文档 162
客户端 167
用于临时浏览和交互的REST 客户端 167
RestTemplate 171
总结 177
第7 章 路由 179
DiscoveryClient 接口 180
Cloud Foundry Route 服务 190
总结 195
第8 章 边缘服务 197
Greetings 服务 198
一个简单的边缘服务 200
Netflix Feign 202
使用Netflix Zuul 进行过滤和代理 204
自定义Zuul 过滤器 214
边缘服务的安全 218
OAuth 219
服务端应用程序 220
HTML5 和 单页面应用程序 221
没有用户的应用 221
受信任的客户端 221
Spring Security 222
Spring Cloud Security 227
一个Spring Security OAuth 授权服务器 227
保护Greetings 资源服务器的安全 232
创建一个受OAuth 保护的单页面应用程序 238
总结 247
目录 | xiii
第Ⅲ部分 数据整合
第9 章 数据管理 251
数据建模 251
关系数据库管理系统(RDBMS) 252
NoSQL 253
Spring Data 253
Spring Data 应用程序的结构 254
域类 254
库 254
为领域数据组织Java 包 255
使用JDBC 访问RDBMS 数据 258
Spring 的JDBC 支持 259
Spring Data 示例 261
Spring Data JPA 264
Account Service 264
集成测试 274
Spring Data MongoDB 275
Order Service 275
集成测试 282
Spring Data Neo4j 284
Inventory Service 284
集成测试 294
Spring Data Redis 297
高速缓存 298
总结 302
第10 章 消息系统 303
Spring Integration 的事件驱动架构 304
消息端点 305
使用简单的组件构建复杂的系统 306
消息代理、桥接、竞争消费者模式和事件溯源 314
发布—订阅目的地 314
点对点目的地 315
xiv | 目录
Spring Cloud Stream 315
流生产者 316
流消费者 321
总结 323
第11 章 批处理和任务 325
批处理工作 325
Spring Batch 326
我们的第一个批处理作业 327
调度 336
通过消息传递远程分区Spring 批处理作业 337
任务管理 346
通过Workflow 进行的以工作流为中心的整合 348
使用消息传递的分布式 362
总结 362
第12 章 数据集成 363
分布式事务 364
故障隔离和优雅的降级 364
saga 模式 369
CQRS(命令查询责任分离) 369
投诉API 371
投诉统计API 383
Spring Cloud Data Flow 385
Stream 387
任务 390
REST API 391
实现Data Flow 客户端 392
总结 407
第IV 部分 生产
第13 章 可观测的系统 411
你构建,你运行 412
目录 | xv
谋杀神秘微服务 413
十二要素运维 413
新方式 414
可观测性 416
推与拉的可观测性和解析率 416
使用Spring Boot Actuator 捕获应用程序的当前状态 417
度量 418
通过/info 端点识别服务 431
健康检查 432
审计事件 436
应用程序日志 439
指定日志输出 440
指定日志级别 441
分布式跟踪 445
用Spring Cloud Sleuth 寻找线索 446
多少数据是足够的 447
OpenZipkin :一张图片胜过千丝万缕 448
跟踪其他平台和技术 454
仪表板 455
使用Hystrix 仪表板监控下游服务 455
Codecentric 的Spring Boot Admin 459
Ordina Microservices 仪表板 462
Pivotal Cloud Foundry 的AppsManager 463
修复 465
总结 467
第14 章 服务代理469
创建后台服务 470
平台视图 472
使用Spring Cloud Cloud Foundry Service Broker 实现服务代理 473
简单的Amazon S3 服务代理 473
服务目录 474
管理服务实例 476
服务绑定 482
保护服务代理 486
xvi | 目录
部署 487
使用BOSH 发布 487
使用Cloud Foundry 发布 488
注册Amazon S3 Service Broker 489
创建Amazon S3 服务实例 490
消费服务实例 491
S3 客户端应用程序 493
运行测试 496
总结 496
第15 章 持续交付497
持续集成之外 497
John Allspaw 在Flickr 以及后来的Etsy 498
Netflix 的Adrian Cockroft 499
亚马逊的持续交付 500
流水线 500
测试 501
持续交付微服务 502
工具 503
Concourse 503
容器 504
持续交付微服务 504
安装Concourse 505
基本的管道设计 506
持续集成 518
消费者驱动的协约测试 518
User 微服务流水线 519
数据 522
生产 523
第V 部分 附录
附录A 在Java EE 中使用Spring Boot527
索引 552