Java云原生
  • 推荐1
  • 收藏4
  • 浏览2.5K

Java云原生

Josh Long, Kenny Bastani (作者)  张若飞 (译者)

  • 书  号:978-7-121-34251-6
  • 出版日期:2018-07-04
  • 页  数:600
  • 开  本:16(178*233)
  • 出版状态:上市销售
  • 原书名: Spring Boot Essentials: Building Applications and Microservices in the Cloud
  • 原书号:9781449374648
  • 维护人:张春雨
纸质版 ¥128.00
无论是传统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章介绍了持续交付背后的思想。
传统应用向Cloud Native应用的真正跨越 全局化解决微服务|REST|分布式路由|边缘服务|数据整合|系统可观测|服务代理|持续交付
译者序
“Java 已死。”
这几年,我们不断听到这句话,甚至相信过这句话,认为Java 语言已经存在了如此长的
时间,影响了如此广的范围,是时候该有一些新鲜的东西来颠覆它了。但是令人失望的
是,Java 语言不仅自身依然在快速地进化(本书完成时,Java 10 已经正式发布),其整
个生态圈也都不曾停下前进的脚步。Spring 就是一个很好的例子。相信Java 开发人员对
它已经再熟悉不过了,大部分人每天的工作都是在围绕着它进行开发。令人惊讶的是,
Spring 也已经从以前单一的核心框架,逐渐发展成为一个全栈的应用层框架,甚至在大
家还没有觉察的时候,它已经开始用于构建微服务的生态系统了,而Spring Boot 就是
整个微服务生态的核心。
在Spring Boot 出现之前,我们看到Spring 也在努力尝试,将整个繁杂的Spring/Spring
MVC 体系精简成一个足够容易上手的工具,也出现了像Spring Roo 这样的过渡产品。
但是直到Spring Boot 横空出世,我们才发现,原来开发一个应用程序,可以如此简单。
这使我不由想起10 年前,我翻译了国内第一本Grails 书籍和Rails 等书籍,当时那些
令我陶醉的feature,这一次终于踏踏实实地在Spring Boot 中得到了实现。与此同时,
Spring 团队秉承了其一贯的风格,简单却强大。如今,Spring Boot 不再是一个简单的框架,
而是像一个灵活的骨架结构,你可以很轻松地将Spring Data、Spring Security 这些耳熟
能详的模块,像插积木一样插在Spring Boot 上,甚至不需要写一行代码。它就像一幅绝
世的中国山水画,让你既惊叹于其精致的笔法,又被它整体磅礴的气势震慑得不能一语。
而这一切,都与Java 这十年间不断的提升和整个Spring 生态的发展密不可分。
如今的IT 行业,已经不再是十年前的情景,云计算已经发展成熟并且逐渐占据主流。没
有人愿意再去花高额的成本、时间、人手建立自己的数据中心,基于云计算的产品和项
目甚至一天就可以开发完成上线。更快,永远是技术追逐的目标。所有你能想到的框架、
组件、中间件,甚至是业务功能模块,都在快速地被云端化,你随便打开一个云计算产
品的官网,上面都有不下上百种的产品功能供你选择,即便是最新的机器学习平台,你
viii | 译者序
也只需点几下鼠标就可以搭建起来。更简单,也永远是技术发展的趋势。在Netflix 的成
功背景下,Spring 没有停留在Spring Boot 上止步不前,而是进一步迈向了云原生的应
用开发,因此而诞生了Spring Cloud。从严格意义上说,Spring Cloud 才是一个真正的
微服务框架,它提供了一套完善的解决方案,能够将云环境中各个独立部署的微服务整
合起来,因此云原生的应用,就是一个本质上分布式的应用。同时,它打破了我们之前
依靠硬件或其他一些软件来实现分布式系统的做法,其将一切功能都云端化,包括中心
化配置、负载均衡、路由、集群,以及衍生出来的断路器等常见设计模式。我们恍然发
现,原来开发一个云上的应用也变得如此简单,但其功能依然强大。可以预见的是,掌
握Spring Boot、Spring Cloud 的开发技术,以及其核心思想,一定会是下一代Java 开发
人员所必备的技能。幸运的是,我们已经在当前的工作中实际运用了它们,并取得了非
常不错的效果。
感谢Josh 和Kenny 分享了他们各自在这个领域的深刻理解和经验,编纂成此书,同时
我也为能够参与翻译此书感到荣幸。相信这本书,可以为Java 开发人员打开下一个时代
的大门,在原生云环境的应用中绱絴。感谢张春雨编辑的耐心和督促,不知不觉合作已
十年有余。感谢净超(Jimmy)临危受命,承担了本书后半部分的翻译工作,他的高产
和高效令我刮目相看,也时刻能感受到他对技术饱含的热情。感谢我身边的所有朋友,
一直在支持着我,鼓励着我,这也是当我面对压力和挫折时不放弃的理由。最后,感谢
我的妻子,给了我莫大的支持和鼓励,让我可以投身创业之中,愿她一生幸福满足!感
恩我的母亲,让我懂得了生命如此脆弱又如此坚强,生死之外,再无大事,愿她一生健
康平安!
译者 张若飞
2018 年5 月23 日凌晨 于北京
前言(James Watters)
你不能两次踏入同一条河流。
——赫拉克利特(希腊哲学家)
2015 年夏天,在威尼斯海滩的一家咖啡店里,我坐在Josh Long 旁边,我知道我们要开
始干一件大事了。因为开发者不断要求了解我们的新技术——Spring Boot,所以他的行
程几乎都被排满了。我们的云原生平台Pivotal Cloud Foundry,正在迅速成为流行的云
原生应用程序运行时环境。随着Spring Boot 越来越受到欢迎,Spring Cloud 的到来有望
成为一个爆炸点。“这将是一件大事,而且正在发生。”我跟他说。
工作中的力量是巨大的。在CIO 全力寻求如何提升开发者生产力的时候,Spring Boot 提
供了一个微服务和DevOps 友好的企业级开发方式。 随着Spring Boot 和PCF 之间的集
成日益完善,生产环境部署成为一个简单的流水线和API 调用工作。Spring Cloud 不仅
提供了世界上第一个微服务网格,并且诞生了一种新的、基于云的Java 标准。
这些技术的独特组合,不仅仅是表面看上去开发风格的变化,而是改变了大型组织的交
付结构。由于对传统Java 应用程序来说,服务器和运维的复杂性太高,因此开发人员被
禁止与生产环境接触。我们经常听到,客户部署一次程序要花费几天这样恐怖的故事。
我们知道我们的平台会改变他们的生活。有一些粉丝客户开始给我们写邮件,描述他们
在PCF 上采用Spring Boot 之后,如何将生产环境的更新从几个月的时间,降低到几分
钟之内。
自2015 年以来,现实已经证明,所有迁移到这种开发方式的企业,开发速度至少提高
了50%,超过了MTTR(平均维护时间)/ 停机时间的一半,并且他们与许多小型的平
台团队一起运行了成千上万的JVM 实例。 最重要的是,采用云原生Java 的企业,可以
拿出更多的时间来思考他们的客户和市场,同时对开发和运维复杂性的担忧大大减少。
本书对现代企业软件设计中重要的模式,逐一进行了详细的论述。 在许多例子中,你可
xviii | 前言(James Watters)
以看到Josh 和Kenny 与许多世界顶级企业一同努力所带来的实践经验。
我建议每个开发者和IT 主管,做好充分的准备,挖掘企业的适应性和柔韧性,来享受这
份工作。
James Watters,Pivotal Cloud Foundry 高级副总裁,
Pivotal,@wattersjames
xix
前言(Rod Johnson)
我们正处于行业历史上最剧烈的变革中:从传统架构转向云的架构,从传统开发和运维
分工转向统一的DevOps。本书可帮助你进行转型,在本书中详细阐述了开发云原生应
用程序的机遇和挑战,并明确指出了成功实现的方向。
转型不会一夜之间发生。这本书最好的一点,是它强调了如何将以现有经验构建的环境,
逐步迁移到云上。特别是第5 章中“用Spring 实现服务平等”一节,提供了一个传统企
业转向云端的优秀实战案例。
本书是理论和实践的完美结合,既解释了现代应用的架构原理,又给出了有效的、经过
验证的实现方法。实践需要我们做出选择,不只是编程语言的选择,更主要是选择开源
框架,因为现代应用程序几乎都是建立在通用问题的开源解决方案之上的。如果你选择
了Java 语言,或是对编程语言持开放态度——本书就是你需要的书。
我的死亡报告是夸大的。
——马克· 吐温
几年前,报道Java 死亡的消息不绝于耳。今天,Java 仍在蓬勃发展,本书会告诉你为什
么。Java 已经进入了新的生命周期,部分原因是因为Java 技术已经用于构建现代的、基
于云的应用程序了。使Netflix 成功的两个关键因素,就是开源项目和Spring。本书在这
两个方面都做得非常出色。
Spring 最初的核心思想,是降低过去Java EE 的复杂性,它经受住了时间的考验,成为
了云应用的完美基础。十多年前,我们曾经谈论过“Spring 三原则”:依赖注入、可移
植服务抽象和AOP。如今,将业务逻辑与环境完美分离比以往任何时候都重要,所有这
一切都没有发生变化。
本书的重点是介绍Spring Boot,它是在微服务时代一种使用Spring 的新方式,我们无
法拒绝使用它。 Spring Boot 可以轻松创建任何粒度的Spring 服务,并部署到现代的容
xx | 前言(Rod Johnson)
器环境中。传统的“企业级”Java 应用程序,都是只能运行在更大服务器上的单体程序,
而Spring Boot 以它的简单和效率改变了这一切:服务聚焦精准,以足够的服务器来运行。
书中的案例展示了Spring 团队的最新工作,例如,Spring Cloud Stream 和改进的集成测
试支持,以及与Netflix 开源项目不断的集成。
我很高兴看到Spring 的持续创新,以及专注于简单化开发人员的工作。虽然在过去的5
年中,我只是以一个用户的身份与Spring 进行了互动,但是看到它繁荣发展,成功解决
了许多复杂的问题,还是很高兴的。今天,我仍然在Atomist 从事这类工作,我们的目
标是让所有事情自动化,让Spring 来为所有的开发团队和开发过程做Java 应用程序的
事情。Spring 为Java 开发人员所关心的每件事情,都提供了一个简单的、有效的结构和
抽象,同时,Atomist 也希望为项目源代码、系统构建、问题跟踪器、环境部署等提供
同样的东西。无论是为了提高团队协作能力而使用Slack 管理项目,还是为了监控部署
事件,Atomist 都可以提供强大的开发自动化能力。
自动化的基本组成部分是测试。我特别喜欢本书对测试的介绍,书中对如何解决微服务
测试中的许多难题提出了宝贵的意见。我也喜欢书中许多注释详尽的代码清单,作者很
好地坚持了这个O'Reilly 一贯的风格。
我非常荣幸,可以为同道好友作序。Josh 是一个善于沟通的人。他的文字功底和他现场
编写的代码一样好。Josh 和Kenny 是两位充满激情的、好奇并且见多识广的导游,很高
兴与他们一起走过这个旅程。我在旅途中学到了很多东西,我相信你也会学到很多。
Rod Johnson,Spring Framework、Atomist 创始人兼CEO,
twitter 账号@springrod
xxi
前言
更快!更快!更快!!每个人都想走得更快,但很少人知道如何做到。市场的需求在不
断增长,机会也越来越多,但我们中的一些人根本无法跟上节奏!传统企业与亚马逊,
以及Netflix 和Etsy 之间的区别是什么?我们知道这些公司已经成长到拥有令人疯狂的
规模,但不知什么原因,它们仍然能够保持竞争优势,保持领先地位。它们究竟是如何
做到的?
一个想法从概念到实现,需要做大量的工作。要了解一个想法,既要看它的效用,也要
看它的价值。这些工作要经历很多不同的环节,从涉及用户体验的产品管理到测试,再
到运行,最终才进入生产环境。从历史的角度看,这其中的每一道工序都会让整个工作
变慢。我们作为一个开源社区,随着时间的推移,已经优化了这个流程中的一些部分。
我们有了云计算,所以不再需要机架和机柜。我们使用测试驱动开发和持续集成来实现
自动化测试。我们以小步迭代的方式来发布软件,通过微服务来减小代码变更的范围和
成本。我们拥抱DevOps 背后的理念(武装的同理心)来增强对整个系统的了解,增进
开发人员与运维人员之间的感情,减少不同优先级事项之间的巨大协同成本。这些事情
本身并不有趣,改进也不大,但是如果将它们结合起来,我们就可以将整个价值链中的
每件重要事情都隔离开来。总而言之,这些东西就是我们所说的云原生。
作为行业中的一员和理论的实践者,软件开发人员今天处于一个激情的时代。我们在基
础设施、测试、中间件、持续集成和交付、开发框架和云平台等方面,都拥有可靠的、
开源的、稳定和自助服务的解决方案。这些基础条件让企业可以专注于如何低成本地提
供高商业价值,以及扩张到更大的规模。
谁应该阅读本书
本书主要面向正在使用Spring Boot、Spring Cloud 和Cloud Foundry,以更快、更好地
构建软件的Java / JVM 开发人员。相信你已经听说过微服务的概念,也许你已经看到了
xxii | 前言
Spring Boot 的不断发展,并且想知道为什么今天大多数企业都在使用Cloud Foundry。
那么本书可以告诉你答案。
为什么我们写这本书
在Pivotal,我们通过传授持续交付的知识,以及通过Cloud Foundry、Spring Boot 和
Spring Cloud 来帮助客户向数字化企业转型。我们已经知道了什么是可行的(以及什么
不可行),并且希望把客户的实践和我们的经验总结出来。我们并不想面面俱到,但我
们试图清晰地向你介绍整个云原生世界的关键概念。
浏览本书
本书的组织结构如下:
y 第1 章和第2 章介绍了云原生思想产生的背景,然后介绍了Spring Boot 和Cloud
Foundry
y 第3 章介绍了如何配置Spring Boot 应用程序。这是我们所要依赖的基本技能。
y 第4 章介绍了如何测试Spring 应用程序,从如何测试最简单的组件到测试分布
式系统。
y 第5 章介绍了可以将应用程序迁移到Cloud Foundry 等云平台的轻量级重构方式,
你可以从中获得一些有价值的额外经验。
y 第6 章介绍了如何使用Spring 构建HTTP 和RESTful 服务。你会在API 和领域
驱动开发中用到其中很多技巧。
y 第7 章介绍了在分布式系统中控制请求进出的常用方法。
y 第8 章介绍了如何构建一个响应外部请求的服务。
y 第9 章介绍了如何使用Spring Data 在Spring 中管理数据。这为领域驱动的思想
奠定了基础。
y 第10 章介绍了如何使用Spring 中事件驱动、消息中心化的能力,来集成分布式
服务和数据。
y 第11章介绍了如何利用云平台(如Cloud Foundry)的能力来处理长期运行的工作。
y 第12 章介绍了在分布式系统中管理状态的一些方法。
y 第13 章介绍了如何构建具备可观测性和可操作性的系统。
y 第14 章介绍了如何构建类似于Cloud Foundry 平台的服务代理。服务代理可以
将有状态的服务(例如消息队列、数据库和缓存)连接到云平台。
y 第15 章介绍了持续交付背后的思想。这虽然是最后一章,但也可能是你旅程的
开始。
前言 | xxiii
如果你像我们一样,你不会从前到后来阅读本书。如果你真的像我们一样,你通常不会
阅读前言。但是,既然你看到了这里,我们给出以下一些建议:
y 无论你是做什么的,请阅读第1 章和第2 章。这两章为本书的其余部分奠定了基
础。如果没有第1 章中所介绍的动机和业务背景,本书中所有的技术讨论就都没
有了意义。而所有的技术讨论都依赖于在第2 章中所建立的基础。
y 第3 ~ 6 章介绍了任何Spring 开发人员都应该注意的事项。这些概念不仅适用
于较旧版本的Spring 应用程序,也适用于新的应用程序。第5 章介绍了如何同
时兼容新旧版本的应用程序(无论是否使用了Spring)。
y 第7章和第8章介绍了一些基于HTTP的微服务系统中的概念,包括安全性和路由。
y 第9 ~ 12 章可以帮助你更好地管理和处理分布式系统中的数据。
y 第13 章介绍了一个真正的核心概念,因为它依赖于其他一些技术概念,所以我
们在本书前半部分介绍核心概念和测试时没有介绍它。可运维的应用程序应该是
可观测的。尽早了解本章的基本原理,会帮助你理解本书的其他内容。
y 第14 章介绍了如何使用Spring(一个云原生的开发框架)来构建平台和云端的
组件。本章对开放服务代理的讨论尤为深刻。
y 最后,第15章提炼了有关持续交付的知识。整本书是按照持续交付的方式编写的,
这对于我们正在努力做的事情至关重要,因为我们选择用结果来证明一切。务必
阅读本章。
在线资源
我们提供了很多有用的在线资源来帮助你理解书中的内容:
y 本书的代码可以在GitHub 资料库(http:// github.com/cloud-native-java/)中找到。
y 从Spring 网站(http://spring.io/)上能找到关于Spring 的一切资料,包括文档、
技术问答论坛等。
y Cloud Foundry 网站(http://cloudfoundry.org)是由Cloud Foundry 基金会的所有
贡献者通力完成的。你会在上面找到相关的视频、教程、新闻等。
本书使用约定
本书使用以下印刷约定。
斜体(Italic)
斜体表示新的术语、URL、电子邮件地址、文件名和文件扩展名等。
xxiv | 前言
等宽字体(Constant width)
用于程序清单,以及段落中引用的程序元素,例如变量或函数名、数据库、数据类型、
环境变量、语句和关键字等。
等宽字体加粗(Constant width bold)
显示应该由用户输入的命令或其他文本。
等宽斜体(Constant width italic)
该处内容应该被由用户提供的值或者上下文所确定的值替换。
表示一个提示或建议。
表示一般注释。
表示警告或注意。
中文版书中切口以“ ”表示原书页码,便于读者与英文原版图书对照阅读,本书的
索引中所列的页码也为英文原版图书中的页码。
如何联系我们
请将对本书的评价和存在的问题通过如下地址告知出版者:
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
前言 | xxv
奥莱利技术咨询(北京)有限公司
O’Reilly 的每一本书都有专属网站,你可以在那里找到关于本书的相关信息,包括勘误
列表、示例代码以及其他信息。本书的网站地址是:
http://bit.ly/cloud-native-java
对于本书的评论和技术性的问题,请发送电子邮件到:
bookquestions@oreilly.com
关于我们的书籍、课程、会议和新闻的更多信息,请参阅我们的网站http://www.oreilly.
com。
在Facebook 上找到我们:http://facebook.com/oreilly
在Twitter 上关注我们:http://twitter.com/oreillymedia
在YouTube 上观看我们:http://www.youtube.com/oreillymedia
使用代码示例
你可以从http://github.com/Cloud-Native-Java 下载补充材料(代码示例、练习等)。
这本书是为了帮助你完成工作而编写的。一般来说,如果本书提供了示例代码,那么你
可以在程序和文档中使用它们。除非你大量使用本书中的代码,否则不需要与我们联系。
例如,编写一段使用了本书中多段代码的程序不需要我们授权。销售或者发行O'Reilly
书中代码示例的CD-ROM 需要授权。引用本书内容和示例代码来回答问题不需要授权。
将本书中重要的示例代码用于产品文档中需要授权。
使用我们的代码时,希望你能标明它的出处。出处一般要包含书名、作者、出版商和
ISBN,例如,“Book Title by Josh Long and Kenny Bastani (O’Reilly). Copyright 2017
Josh Long, Kenny Bastani, 978-1-449-37464-8.”。
如果还有其他使用代码的情形需要与我们沟通,可以随时与我们联系:permissions@
oreilly.com。
致谢
首先,我们要感谢O'Reilly 出版社的编辑Nan Barber 和Brian Foster,他们付出了令人
难以置信的耐心,并给了我们很大的支持。
xxvi | 前言
感谢所有给我们提供观点、想法和灵感的审稿人员。非常感谢Pivotal 公司和它的庞
大商业生态给我们的支持。特别感谢提供技术反馈的每位审稿人员,其中包括Brian
Dus-sault、Dave Syer 博士、Andrew Clay Shafer、Rob Winch、Mark Fisher 博士、Mark
Pollack 博士、Utkarsh Nadkarni、Sabby Anandan、Michael Hunger、Bridget Kromhout、
Russ Miles、Mark Heckler、Marten Deinum、Nathaniel Schutta 和Patrick Crocker,等等。
谢谢!
最后,我们要感谢Rod Johnson 和James Watters。你们不求回报,给予了我们一切需要
的帮助。非常感谢你们的序言、反馈和灵感。
本书是使用Asciidoctor 工具编写的,该工具由OpenDevise 的Dan Allen(http://twitter.
com/mojavelinux)和设计合作伙伴Sarah White(http://twitter.com/carbonfray)领导开
发。所有示例的源代码存放在GitHub(http://github.com)的公共仓库中。代码持续集
成使用了Travis CI(https://travis-ci.org/cloud-native-java)。构建产出物托管在由JFrog
(https://www.jfrog.com)慷慨捐赠给我们的Artifactory 仓库中。所有的代码示例都可以
在由Pivotal 托管的Pivotal Web Services 上运行。如果没有这些工具,编写本书不会如
此顺利,无论是开源社区还是由社区运维的公司,都在免费支持我们。非常感谢你们!
我们希望你的下一个项目会考虑使用他们的工具,并支持他们,因为他们曾经支持过我
们。
想对Spring 团队(http://spring.io/team)和Cloud Foundry 团队(http://cloud foundry.org)说,
非常感谢你们为我们编写所有代码、进行测试和对我们予以所有支持。
Josh Long
我要感谢我的合著者Kenny,加入我的这次冒险旅程!我想感谢O'Reilly 给我们这次机
会,以及他们给了我们难以置信的宽容,因为我们为了能够完整介绍Pivotal 的生态系统
而一再延期。谢谢Dave Syer 博士(https://twitter.com/david_syer)对本书致言和给予我
鼓励。不管在任何城市、时区、国家和大洲,我都在不断编程,而Pivotal 的Spring 和
Cloud Foundry 团队无论何时都在帮助我,谢谢你们!
Kenny Bastani
首先,我要感谢我的朋友、导师和同事Michael Hunger,他首先激发了我为开源软件写
书和发声的热情。我也要感谢我非常有才华的合著者Josh Long,当我两年前把我的第
一个Spring Boot 微服务投入生产时,他邀请我和他一起写这本书。与他一起写这本书
是一次令人难以置信的冒险。从Josh 和我在纸上写下第一行字起,我们看到了Spring
前言 | xxvii
Boot 逐渐成长为最成功的开源项目之一。今天,这种增长意味着每月Spring Boot 被下
载1300 万次,其中包括新的应用程序和持续的生产环境部署。达到这些成绩,Spring
团队已经发展到有将近50 名全职工程师。保守估计,Spring 团队维护着100 多个开源
项目,其中包括框架组件、示例应用程序和文档。所有这些项目都有赞助商Pivotal 的支持。
如果没有这些工作人员的巨大奉献,我们无法完成本书,因为他们所支持的开发者社区,
每年产生约300 万个新的、可运行于生产环境的Spring Boot 应用程序。
从2004 年到2017 年,仅仅Spring 框架项目,已经收到381 个开源Java 开发者的36412
个提交,这大概相当于339 年的人力成本。

目录

目录
前言(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 Foundry......................21
什么是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 和JavaScript 单页面应用程序 ............................................................. 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 Boot................................527
索引............................................................................... 552

本书勘误

印次
  • 页码:21  •  行数:13  •  印次: 4

    “Spring Initializrr”应该是“Spring Initializr”

    buzzerrookie 提交于 2019/11/20 23:45:40
    张春雨 确认于 2019/11/27 17:59:53
  • 页码:24  •  行数:13  •  印次: 4

    “通常在$ HOME”应该是“通常在$HOME”,多了个空格

    buzzerrookie 提交于 2019/11/20 23:55:32
    张春雨 确认于 2019/11/27 17:59:48
  • 页码:25  •  行数:2  •  印次: 4

    “通过http:// localhost:8080”应该是“通过http://localhost:8080”,多了个空格。

    buzzerrookie 提交于 2019/11/20 23:56:11
    张春雨 确认于 2019/11/27 17:59:42
  • 页码:33  •  行数:6  •  印次: 4

    “选择src/main/java/com/example/DemoAp plication.java”应该是“选择src/main/java/com/example/DemoApplication.java”

    buzzerrookie 提交于 2019/11/21 0:05:34
    张春雨 确认于 2019/11/27 17:59:36
  • 页码:49  •  行数:24  •  印次: 4

    “boot.auto configure”应该是“boot.autoconfigure”,多了个空格

    buzzerrookie 提交于 2019/11/21 0:25:20
    张春雨 确认于 2019/11/27 17:59:30

读者评论

相关博文

  • 亚马逊的云原生故事

    亚马逊的云原生故事

    管理员账号 2018-10-10

    从 20 世纪 90 年代初开始,经过 20 年的发展,总部设在西雅图的亚马逊已经从网络书店成长为世界上最大的在线零售商。 今天,它就像著名的“亚马逊河”一样,销售的东西远不仅仅是书籍了。在 2015 年,亚马逊超过了沃尔玛成为美国最...

    管理员账号 2018-10-10
    401 0 0 0

推荐用户

相关图书

Kubernetes源码剖析

郑东旭 (作者)

本书主要分析了Kubernetes核心功能的实现原理,是一本帮助读者了解Kubernetes架构设计及内部原理实现的书。由于Kubernetes代码量较大,源码...

 

Kubernetes in Action中文版

Marko Luksa (作者) 李雪瓅 (译者)

本书主要讲解如何在 Kubernetes 中部署分布式容器应用。本书开始部分概要介绍了 Docker 和Kubernetes 的由来和发展,然后通过在 Kube...

¥148.00

Docker微服务架构实战

蒋彪 (作者)

微服务与Docker 是近年来分布式大规模服务架构中两个主流的技术趋势,本书主要介绍中小型企业在架构落地过程中柔性地切入微服务和Docker 虚拟化的各种方法。...

¥39.00

Kubernetes容器云运维实战

闫健勇 (作者)

本书是基于《Kubernetes权威指南:从Docker到Kubernetes实践全接触》进行企业级容器云平台建设的实战指南,力图对容器云平台的建设、应用和运营...

¥89.00

生产微服务

Susan Fowler (作者) 薛命灯 (译者)

本书全面地探讨了微服务,作者从运行超过一千个微服务的高生产准备标准中获取经验,探讨了适用所有微服务的标准,分享了使微服务处于生产就绪状态的策略,为读者展现出一个...

¥35.00

Swarm容器编排与Docker原生集群

Fabrizio Soppelsa ,Chanwit Kaewkasi (作者) 崔婧雯 (译者)

Docker Swarm作为Docker集群原生的容器编排解决方案,是Docker生态系统中的关键组件之一。《Swarm容器编排与Docker原生集群》涵盖了S...

¥39.00