更多书籍点击进入>> CiCi岛
电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍
传统企业与亚马逊、Netflix和Etsy这类企业之间的区别是什么?这些公司有完善云原生开发方法,这些方法使得他们能够保持优势并领先于竞争对手。本实践指南向Java/JVM开发人员展示如何使用Spring Boot、Spring Cloud和Cloud Foundry更快更好地构建软件。很多组织都已涉足云计算、测试驱动开发、微服务,以及持续集成和交付领域。本书作者Josh Long和Kenny Bastani将带您深入研究这些工具和方法,并帮助您将传统应用程序转变为真正的云原生应用程序。本书四部分内容分别介绍: √ 基础知识:了解云原生思维背后的动机;配置和测试Spring Boot应用程序;将您的传统应用程序迁移至云端 √ 微服务:使用Spring构建HTTP和RESTful服务;在分布式系统中路由请求;建立更接近数据的边缘服务 √ 数据整合:使用Spring Data管理数据,并将分布式服务与——Spring对事件驱动、以消息传递为中心架构的支持——集成起来 √ 生产:让您的系统可观察;使用服务代理来连接有状态的服务;了解持续交付背后的重要思想
无论是传统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大会。 宋净超,就职于蚂蚁金服,Kubernetes及云原生应用布道师,ServiceMesher社区创始人。乐于分享,拥抱开源,活跃于Kubernetes及微服务开发者社区。经常作为讲师在Qcon、ArchSummit等技术会议上进行分享,也常参与云栖大会等行业会议和线下Meetup。喜欢在个人博客(https://jimmysong.io)上发表见解,发布开源教程。业余时间喜欢摄影和旅游。 张若飞,TGO会员,曾任易通贷CTO,宜人贷首席架构师,在雅虎北研、金山云、POLYCOM等知名公司担任架构师。十余年互联网研发及技术管理经验,管理过超过百人的技术研发团队,对搭建海量数据、大型分布式系统有丰富经验,对互联网金融领域有广泛涉猎。著有十余本技术译著,包括《Grails权威指南》《给大忙人看的JavaSE 8》《代码不朽:编写可维护软件的十大原则》《面向可伸缩架构》等书,总计300余万字。
序言(James Watters) xvii
序言(Rod Johnson) xix
前言 xxi
第Ⅰ部分 基础知识
第1 章 云原生应用程序 3
第2 章 训练营:Spring Boot 和Cloud Foundry 21
第3 章 符合十二要素程序风格的配置 67
第4章 测试 85
第5 章 迁移遗留的应用程序 115
第Ⅱ部分 Web 服务
第6 章 REST API 137
第7 章 路由 179
第8 章 边缘服务 197
第Ⅲ部分 数据整合
第9 章 数据管理 251
第10 章 消息系统 303
第11 章 批处理和任务 325
第12 章 数据集成 363
第IV 部分 生产
第13 章 可观测的系统 411
第14 章 服务代理 469
第15 章 持续交付 497
第V 部分 附录
附录A 在Java EE 中使用Spring Boot 527
序言(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 的企业,可以拿出更多的时间来思考他们的客户和市场,同时对开发和运维复杂性的担忧大大减少。
本书对现代企业软件设计中重要的模式,逐一进行了详细的论述。 在许多例子中,你可以看到Josh 和Kenny 与许多世界顶级企业一同努力所带来的实践经验。
我建议每个开发者和IT 主管,做好充分的准备,挖掘企业的适应性和柔韧性,来享受这份工作。
James Watters,Pivotal Cloud Foundry 高级副总裁,
Pivotal,@wattersjames
序言(Rod Johnson)
我们正处于行业历史上最剧烈的变革中:从传统架构转向云的架构,从传统开发和运维分工转向统一的DevOps。本书可帮助你进行转型,在本书中详细阐述了开发云原生应用程序的机遇和挑战,并明确指出了成功实现的方向。
转型不会一夜之间发生。这本书最好的一点,是它强调了如何将以现有经验构建的环境,逐步迁移到云上。特别是第5 章中“用Spring 实现服务平等”一节,提供了一个传统企业转向云端的优秀实战案例。
本书是理论和实践的完美结合,既解释了现代应用的架构原理,又给出了有效的、经过验证的实现方法。实践需要我们做出选择,不只是编程语言的选择,更主要是选择开源框架,因为现代应用程序几乎都是建立在通用问题的开源解决方案之上的。如果你选择了Java 语言,或是对编程语言持开放态度——本书就是你需要的书。
我的死亡报告是夸大的。
——马克· 吐温
几年前,报道Java 死亡的消息不绝于耳。今天,Java 仍在蓬勃发展,本书会告诉你为什么。Java 已经进入了新的生命周期,部分原因是因为Java 技术已经用于构建现代的、基于云的应用程序了。使Netflix 成功的两个关键因素,就是开源项目和Spring。本书在这两个方面都做得非常出色。
Spring 最初的核心思想,是降低过去Java EE 的复杂性,它经受住了时间的考验,成为了云应用的完美基础。十多年前,我们曾经谈论过“Spring 三原则”:依赖注入、可移植服务抽象和AOP。如今,将业务逻辑与环境完美分离比以往任何时候都重要,所有这一切都没有发生变化。
本书的重点是介绍Spring Boot,它是在微服务时代一种使用Spring 的新方式,我们无法拒绝使用它。 Spring Boot 可以轻松创建任何粒度的Spring 服务,并部署到现代的容器环境中。传统的“企业级”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
前言
更快!更快!更快!!每个人都想走得更快,但很少人知道如何做到。市场的需求在不断增长,机会也越来越多,但我们中的一些人根本无法跟上节奏!传统企业与亚马逊,以及Netflix 和Etsy 之间的区别是什么?我们知道这些公司已经成长到拥有令人疯狂的规模,但不知什么原因,它们仍然能够保持竞争优势,保持领先地位。它们究竟是如何做到的?
一个想法从概念到实现,需要做大量的工作。要了解一个想法,既要看它的效用,也要看它的价值。这些工作要经历很多不同的环节,从涉及用户体验的产品管理到测试,再到运行,最终才进入生产环境。从历史的角度看,这其中的每一道工序都会让整个工作变慢。我们作为一个开源社区,随着时间的推移,已经优化了这个流程中的一些部分。
我们有了云计算,所以不再需要机架和机柜。我们使用测试驱动开发和持续集成来实现自动化测试。我们以小步迭代的方式来发布软件,通过微服务来减小代码变更的范围和成本。我们拥抱DevOps 背后的理念(武装的同理心)来增强对整个系统的了解,增进开发人员与运维人员之间的感情,减少不同优先级事项之间的巨大协同成本。这些事情本身并不有趣,改进也不大,但是如果将它们结合起来,我们就可以将整个价值链中的每件重要事情都隔离开来。总而言之,这些东西就是我们所说的云原生。
作为行业中的一员和理论的实践者,软件开发人员今天处于一个激情的时代。我们在基础设施、测试、中间件、持续集成和交付、开发框架和云平台等方面,都拥有可靠的、开源的、稳定和自助服务的解决方案。这些基础条件让企业可以专注于如何低成本地提供高商业价值,以及扩张到更大的规模。
谁应该阅读本书
本书主要面向正在使用Spring Boot、Spring Cloud 和Cloud Foundry,以更快、更好地构建软件的Java / JVM 开发人员。相信你已经听说过微服务的概念,也许你已经看到了Spring Boot 的不断发展,并且想知道为什么今天大多数企业都在使用Cloud Foundry。
那么本书可以告诉你答案。
为什么我们写这本书
在Pivotal,我们通过传授持续交付的知识,以及通过Cloud Foundry、Spring Boot 和Spring Cloud 来帮助客户向数字化企业转型。我们已经知道了什么是可行的(以及什么不可行),并且希望把客户的实践和我们的经验总结出来。我们并不想面面俱到,但我们试图清晰地向你介绍整个云原生世界的关键概念。
如果你像我们一样,你不会从前到后来阅读本书。如果你真的像我们一样,你通常不会阅读前言。但是,既然你看到了这里,我们给出以下一些建议:
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 基金会的所有贡献者通力完成的。你会在上面找到相关的视频、教程、新闻等。
使用代码示例
你可以从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.”。
如果还有其他使用代码的情形需要与我们沟通,可以随时与我们联系:[email protected]。